| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- #include "BsGLGpuParamBlockBuffer.h"
- #include "BsRenderStats.h"
- #include "BsException.h"
- namespace BansheeEngine
- {
- GLGpuParamBlockBufferCore::GLGpuParamBlockBufferCore(UINT32 size, GpuParamBlockUsage usage)
- :GpuParamBlockBufferCore(size, usage), mGLHandle(0)
- {
- }
- GLGpuParamBlockBufferCore::~GLGpuParamBlockBufferCore()
- {
- glDeleteBuffers(1, &mGLHandle);
- BS_INC_RENDER_STAT_CAT(ResDestroyed, RenderStatObject_GpuParamBuffer);
- }
- void GLGpuParamBlockBufferCore::initialize()
- {
- glGenBuffers(1, &mGLHandle);
- glBindBuffer(GL_UNIFORM_BUFFER, mGLHandle);
- if(mUsage == GPBU_STATIC)
- glBufferData(GL_UNIFORM_BUFFER, mSize, nullptr, GL_STATIC_DRAW);
- else if(mUsage == GPBU_DYNAMIC)
- glBufferData(GL_UNIFORM_BUFFER, mSize, nullptr, GL_DYNAMIC_DRAW);
- else
- BS_EXCEPT(InternalErrorException, "Invalid gpu param block usage.");
- glBindBuffer(GL_UNIFORM_BUFFER, 0);
- BS_INC_RENDER_STAT_CAT(ResCreated, RenderStatObject_GpuParamBuffer);
- GpuParamBlockBufferCore::initialize();
- }
- void GLGpuParamBlockBufferCore::writeToGPU(const UINT8* data)
- {
- glBindBuffer(GL_UNIFORM_BUFFER, mGLHandle);
- glBufferSubData(GL_UNIFORM_BUFFER, 0 , mSize, data);
- glBindBuffer(GL_UNIFORM_BUFFER, 0);
- BS_INC_RENDER_STAT_CAT(ResWrite, RenderStatObject_GpuParamBuffer);
- }
- void GLGpuParamBlockBufferCore::readFromGPU(UINT8* data) const
- {
- glBindBuffer(GL_UNIFORM_BUFFER, mGLHandle);
- glGetBufferSubData(GL_UNIFORM_BUFFER, 0 , mSize, (GLvoid*)data);
- glBindBuffer(GL_UNIFORM_BUFFER, 0);
- BS_INC_RENDER_STAT_CAT(ResRead, RenderStatObject_GpuParamBuffer);
- }
- }
|