mirror of https://github.com/bjornbytes/lovr.git
Shader state;
This commit is contained in:
parent
047fe412eb
commit
80c9d7f4d8
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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");
|
||||
|
|
Loading…
Reference in New Issue