From c41204f8768af06b5278a47f2daedf65c48c7104 Mon Sep 17 00:00:00 2001 From: bjorn Date: Sat, 19 Nov 2016 14:06:41 -0800 Subject: [PATCH] Shader reference counting; --- src/graphics/graphics.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/graphics/graphics.c b/src/graphics/graphics.c index 9bf26f38..6a5537d5 100644 --- a/src/graphics/graphics.c +++ b/src/graphics/graphics.c @@ -24,10 +24,13 @@ void lovrGraphicsInit() { } void lovrGraphicsDestroy() { + lovrGraphicsSetShader(NULL); + glUseProgram(0); + lovrRelease(&state.defaultShader->ref); vec_deinit(&state.transforms); mat4_deinit(state.projection); - lovrShaderDestroy(&state.defaultShader->ref); - lovrShaderDestroy(&state.skyboxShader->ref); + lovrRelease(&state.defaultShader->ref); + lovrRelease(&state.skyboxShader->ref); glDeleteBuffers(1, &state.shapeBuffer); glDeleteBuffers(1, &state.shapeIndexBuffer); glDeleteVertexArrays(1, &state.shapeArray); @@ -157,7 +160,15 @@ void lovrGraphicsSetShader(Shader* shader) { 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) {