Shader reference counting;

This commit is contained in:
bjorn 2016-11-19 14:06:41 -08:00
parent 0f0c301525
commit c41204f876
1 changed files with 14 additions and 3 deletions

View File

@ -24,10 +24,13 @@ void lovrGraphicsInit() {
} }
void lovrGraphicsDestroy() { void lovrGraphicsDestroy() {
lovrGraphicsSetShader(NULL);
glUseProgram(0);
lovrRelease(&state.defaultShader->ref);
vec_deinit(&state.transforms); vec_deinit(&state.transforms);
mat4_deinit(state.projection); mat4_deinit(state.projection);
lovrShaderDestroy(&state.defaultShader->ref); lovrRelease(&state.defaultShader->ref);
lovrShaderDestroy(&state.skyboxShader->ref); lovrRelease(&state.skyboxShader->ref);
glDeleteBuffers(1, &state.shapeBuffer); glDeleteBuffers(1, &state.shapeBuffer);
glDeleteBuffers(1, &state.shapeIndexBuffer); glDeleteBuffers(1, &state.shapeIndexBuffer);
glDeleteVertexArrays(1, &state.shapeArray); glDeleteVertexArrays(1, &state.shapeArray);
@ -157,7 +160,15 @@ void lovrGraphicsSetShader(Shader* shader) {
shader = state.defaultShader; shader = state.defaultShader;
} }
state.activeShader = shader; if (shader != state.activeShader) {
if (state.activeShader) {
lovrRelease(&state.activeShader->ref);
}
state.activeShader = shader;
lovrRetain(&state.activeShader->ref);
}
} }
void lovrGraphicsSetProjection(float near, float far, float fov) { void lovrGraphicsSetProjection(float near, float far, float fov) {