| 123456789101112131415161718192021222324252627282930313233343536373839 |
- #include "CmGLGpuParamBlock.h"
- #include "CmException.h"
- namespace CamelotEngine
- {
- GLGpuParamBlockBuffer::GLGpuParamBlockBuffer(UINT32 size, GpuParamBlockUsage usage)
- :GpuParamBlockBuffer(size, usage)
- {
- glGenBuffers(1, &mGLHandle);
- glBindBuffer(GL_UNIFORM_BUFFER, mGLHandle);
- if(mUsage == GPBU_STATIC)
- glBufferData(GL_UNIFORM_BUFFER, mSize, (GLvoid*)mData, GL_STATIC_DRAW);
- else if(mUsage == GPBU_DYNAMIC)
- glBufferData(GL_UNIFORM_BUFFER, mSize, (GLvoid*)mData, GL_DYNAMIC_DRAW);
- else
- CM_EXCEPT(InternalErrorException, "Invalid gpu param block usage.");
- glBindBuffer(GL_UNIFORM_BUFFER, 0);
- }
- GLGpuParamBlockBuffer::~GLGpuParamBlockBuffer()
- {
- glDeleteBuffers(1, &mGLHandle);
- }
- void GLGpuParamBlockBuffer::writeAll(const void* data)
- {
- glBindBuffer(GL_UNIFORM_BUFFER, mGLHandle);
- glBufferSubData(GL_UNIFORM_BUFFER, 0 , mSize, data);
- glBindBuffer(GL_UNIFORM_BUFFER, 0);
- GpuParamBlockBuffer::writeAll(data);
- }
- GpuParamBlockBuffer* GLGpuParamBlock::createBuffer() const
- {
- return CM_NEW(GLGpuParamBlockBuffer, PoolAlloc) GLGpuParamBlockBuffer(mSize, mUsage);
- }
- }
|