1
0
Fork 0
mirror of https://github.com/bjornbytes/lovr.git synced 2024-07-03 04:53:35 +00:00

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); vertexFormatAppend(&format, "lovrTexCoord", ATTR_FLOAT, 2);
state.mesh = lovrMeshCreate(64, format, MESH_TRIANGLES, MESH_STREAM); state.mesh = lovrMeshCreate(64, format, MESH_TRIANGLES, MESH_STREAM);
glGenBuffers(1, &state.cameraUBO); 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); glBufferData(GL_UNIFORM_BUFFER, 4 * 16 * sizeof(float), NULL, GL_DYNAMIC_DRAW);
glBindBufferBase(GL_UNIFORM_BUFFER, LOVR_SHADER_BLOCK_CAMERA, state.cameraUBO); glBindBufferBase(GL_UNIFORM_BUFFER, LOVR_SHADER_BLOCK_CAMERA, state.cameraUBO);
lovrGraphicsReset(); lovrGraphicsReset();
@ -1150,8 +1150,7 @@ void lovrGraphicsPushLayer(Layer layer) {
} }
memcpy(&state.layers[state.layer], &layer, sizeof(Layer)); memcpy(&state.layers[state.layer], &layer, sizeof(Layer));
lovrGraphicsBindUniformBuffer(state.cameraUBO);
glBindBuffer(GL_UNIFORM_BUFFER, state.cameraUBO);
glBufferSubData(GL_UNIFORM_BUFFER, 0, 4 * 16 * sizeof(float), &layer); glBufferSubData(GL_UNIFORM_BUFFER, 0, 4 * 16 * sizeof(float), &layer);
if (state.canvasCount == 0) { 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) { void lovrGraphicsBindIndexBuffer(uint32_t indexBuffer) {
if (state.indexBuffer != indexBuffer) { if (state.indexBuffer != indexBuffer) {
state.indexBuffer = indexBuffer; state.indexBuffer = indexBuffer;

View file

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