Small UBO cleanup;

This commit is contained in:
bjorn 2018-03-04 22:47:35 -08:00
parent 2def650abd
commit d317502ffd
2 changed files with 11 additions and 3 deletions

View File

@ -252,7 +252,7 @@ void lovrGraphicsCreateWindow(int w, int h, bool fullscreen, int msaa, const cha
vertexFormatAppend(&format, "lovrTexCoord", ATTR_FLOAT, 2);
state.mesh = lovrMeshCreate(64, format, MESH_TRIANGLES, MESH_STREAM);
glGenBuffers(1, &state.cameraUBO);
glBindBuffer(GL_UNIFORM_BUFFER, state.cameraUBO);
lovrGraphicsBindUniformBuffer(state.cameraUBO);
glBufferData(GL_UNIFORM_BUFFER, 4 * 16 * sizeof(float), NULL, GL_DYNAMIC_DRAW);
glBindBufferBase(GL_UNIFORM_BUFFER, LOVR_SHADER_BLOCK_CAMERA, state.cameraUBO);
lovrGraphicsReset();
@ -1150,8 +1150,7 @@ void lovrGraphicsPushLayer(Layer layer) {
}
memcpy(&state.layers[state.layer], &layer, sizeof(Layer));
glBindBuffer(GL_UNIFORM_BUFFER, state.cameraUBO);
lovrGraphicsBindUniformBuffer(state.cameraUBO);
glBufferSubData(GL_UNIFORM_BUFFER, 0, 4 * 16 * sizeof(float), &layer);
if (state.canvasCount == 0) {
@ -1243,6 +1242,13 @@ void lovrGraphicsBindVertexBuffer(uint32_t vertexBuffer) {
}
}
void lovrGraphicsBindUniformBuffer(uint32_t uniformBuffer) {
if (state.uniformBuffer != uniformBuffer) {
state.uniformBuffer = uniformBuffer;
glBindBuffer(GL_UNIFORM_BUFFER, uniformBuffer);
}
}
void lovrGraphicsBindIndexBuffer(uint32_t indexBuffer) {
if (state.indexBuffer != indexBuffer) {
state.indexBuffer = indexBuffer;

View File

@ -135,6 +135,7 @@ typedef struct {
uint32_t program;
uint32_t vertexArray;
uint32_t vertexBuffer;
uint32_t uniformBuffer;
uint32_t indexBuffer;
GraphicsStats stats;
} GraphicsState;
@ -222,6 +223,7 @@ Shader* lovrGraphicsGetActiveShader();
void lovrGraphicsUseProgram(uint32_t program);
void lovrGraphicsBindVertexArray(uint32_t vao);
void lovrGraphicsBindVertexBuffer(uint32_t vbo);
void lovrGraphicsBindUniformBuffer(uint32_t ubo);
void lovrGraphicsBindIndexBuffer(uint32_t ibo);
void lovrGraphicsDrawArrays(GLenum mode, size_t start, size_t count, int instances);
void lovrGraphicsDrawElements(GLenum mode, size_t count, size_t indexSize, size_t offset, int instances);