Shader state;

This commit is contained in:
bjorn 2017-08-08 01:32:15 -07:00
parent 047fe412eb
commit 80c9d7f4d8
3 changed files with 21 additions and 27 deletions

View File

@ -296,6 +296,26 @@ void lovrGraphicsSetPointSize(float size) {
#endif
}
Shader* lovrGraphicsGetShader() {
return state.shader;
}
void lovrGraphicsSetShader(Shader* shader) {
if (!shader) {
shader = state.defaultShader;
}
if (shader != state.shader) {
if (state.shader) {
lovrRelease(&state.shader->ref);
}
state.shader = shader;
glUseProgram(shader->id);
lovrRetain(&state.shader->ref);
}
}
Winding lovrGraphicsGetWinding() {
return state.winding;
}
@ -318,25 +338,6 @@ void lovrGraphicsSetWireframe(int wireframe) {
#endif
}
Shader* lovrGraphicsGetShader() {
return state.activeShader;
}
void lovrGraphicsSetShader(Shader* shader) {
if (!shader) {
shader = state.defaultShader;
}
if (shader != state.activeShader) {
if (state.activeShader) {
lovrRelease(&state.activeShader->ref);
}
state.activeShader = shader;
lovrRetain(&state.activeShader->ref);
}
}
Font* lovrGraphicsGetFont() {
lovrGraphicsEnsureFont();
return state.activeFont;

View File

@ -65,7 +65,6 @@ typedef struct {
typedef struct {
GLFWwindow* window;
Shader* activeShader;
Shader* defaultShader;
Shader* skyboxShader;
Shader* fontShader;
@ -97,6 +96,7 @@ typedef struct {
GraphicsLimits limits;
float lineWidth;
float pointSize;
Shader* shader;
Winding winding;
int wireframe;
} GraphicsState;

View File

@ -196,13 +196,6 @@ void lovrShaderDestroy(const Ref* ref) {
void lovrShaderBind(Shader* shader, mat4 transform, mat4 projection, Color color, int force) {
// Bind shader if necessary
int program;
glGetIntegerv(GL_CURRENT_PROGRAM, &program);
if (program != shader->id) {
glUseProgram(shader->id);
}
// Update transform if necessary
if (force || memcmp(shader->transform, transform, 16 * sizeof(float))) {
int uniformId = lovrShaderGetUniformId(shader, "lovrTransform");