// // Lol Engine // // Copyright: (c) 2010-2011 Sam Hocevar // This program is free software; you can redistribute it and/or // modify it under the terms of the Do What The Fuck You Want To // Public License, Version 2, as published by Sam Hocevar. See // http://sam.zoy.org/projects/COPYING.WTFPL for more details. // #if defined HAVE_CONFIG_H # include "config.h" #endif #include "core.h" #include "lolgl.h" #include "gpu/vbo.h" using namespace std; namespace lol { /* * GpuVbo implementation class */ class GpuVboData { friend class GpuVbo; size_t elemsize, elemcount; uint8_t *alloc_buffer; static size_t const GPU_ALIGN = 128; }; /* * Public GpuVbo class */ GpuVbo::GpuVbo() : data(new GpuVboData()) { data->elemsize = 0; data->elemcount = 0; data->alloc_buffer = 0; } void GpuVbo::SetSize(size_t elemsize, size_t elemcount) { size_t oldsize = data->elemsize * data->elemcount; size_t newsize = elemsize * elemcount; if (newsize == oldsize) return; if (oldsize) delete[] data->alloc_buffer; data->alloc_buffer = NULL; if (newsize) data->alloc_buffer = new uint8_t[newsize + GpuVboData::GPU_ALIGN - 1]; data->elemsize = elemsize; data->elemcount = elemcount; } size_t GpuVbo::GetSize() { return data->elemsize * data->elemcount; } uint8_t *GpuVbo::GetData() { return (uint8_t *)(((uintptr_t)data->alloc_buffer) & ~((uintptr_t)GpuVboData::GPU_ALIGN - 1)); } uint8_t const *GpuVbo::GetData() const { return (uint8_t const *)(((uintptr_t)data->alloc_buffer) & ~((uintptr_t)GpuVboData::GPU_ALIGN - 1)); } void GpuVbo::Bind() { } void GpuVbo::Unbind() { } GpuVbo::~GpuVbo() { delete[] data->alloc_buffer; delete data; } } /* namespace lol */