GLState: Add bound shader program to managed state
Squishes a handful of redundant binds per frame.
This commit is contained in:
parent
b729da249b
commit
87c1e376b9
|
@ -20,6 +20,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "glstate.h"
|
#include "glstate.h"
|
||||||
|
#include "shader.h"
|
||||||
#include "etc.h"
|
#include "etc.h"
|
||||||
|
|
||||||
#include <glew.h>
|
#include <glew.h>
|
||||||
|
@ -95,6 +96,11 @@ void GLViewport::apply(const IntRect &value)
|
||||||
glViewport(value.x, value.y, value.w, value.h);
|
glViewport(value.x, value.y, value.w, value.h);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GLProgram::apply(const unsigned int &value)
|
||||||
|
{
|
||||||
|
glUseProgram(value);
|
||||||
|
}
|
||||||
|
|
||||||
GLState::Caps::Caps()
|
GLState::Caps::Caps()
|
||||||
{
|
{
|
||||||
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTexSize);
|
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTexSize);
|
||||||
|
@ -110,4 +116,5 @@ GLState::GLState()
|
||||||
scissorTest.init(false);
|
scissorTest.init(false);
|
||||||
scissorBox.init(IntRect(0, 0, 640, 480));
|
scissorBox.init(IntRect(0, 0, 640, 480));
|
||||||
texture2D.init(true);
|
texture2D.init(true);
|
||||||
|
program.init(0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,6 +99,11 @@ class GLViewport : public GLProperty<IntRect>
|
||||||
void apply(const IntRect &value);
|
void apply(const IntRect &value);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class GLProgram : public GLProperty<unsigned int> /* GLuint */
|
||||||
|
{
|
||||||
|
void apply(const unsigned int &value);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
class GLState
|
class GLState
|
||||||
{
|
{
|
||||||
|
@ -109,6 +114,7 @@ public:
|
||||||
GLTexture2D texture2D;
|
GLTexture2D texture2D;
|
||||||
GLBlendMode blendMode;
|
GLBlendMode blendMode;
|
||||||
GLViewport viewport;
|
GLViewport viewport;
|
||||||
|
GLProgram program;
|
||||||
|
|
||||||
struct Caps
|
struct Caps
|
||||||
{
|
{
|
||||||
|
|
|
@ -99,13 +99,13 @@ Shader::~Shader()
|
||||||
|
|
||||||
void Shader::bind()
|
void Shader::bind()
|
||||||
{
|
{
|
||||||
glUseProgram(program);
|
glState.program.set(program);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Shader::unbind()
|
void Shader::unbind()
|
||||||
{
|
{
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
glUseProgram(0);
|
glState.program.set(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Shader::init(const unsigned char *vert, int vertSize,
|
void Shader::init(const unsigned char *vert, int vertSize,
|
||||||
|
|
Loading…
Reference in New Issue