Only update the shader point size in OpenGL ES 2 when it's been modified, rather than before every draw.

This commit is contained in:
Alex Szpakowski
2015-03-17 17:24:45 -03:00
parent 4a8e5bd4db
commit a36dbc3d49
3 changed files with 17 additions and 1 deletions
+1 -1
View File
@@ -331,7 +331,7 @@ void OpenGL::prepareDraw()
Matrix tp_matrix(curproj * curxform);
shader->sendBuiltinMatrix(Shader::BUILTIN_TRANSFORM_PROJECTION_MATRIX, 4, tp_matrix.getElements(), 1);
shader->sendBuiltinFloat(Shader::BUILTIN_POINT_SIZE, 1, &state.pointSize, 1);
shader->checkSetPointSize(state.pointSize);
}
else if (GLAD_VERSION_1_0)
{
+13
View File
@@ -75,6 +75,7 @@ Shader::Shader(const ShaderSource &source)
, builtinAttributes()
, lastCanvas((Canvas *) -1)
, lastViewport()
, lastPointSize(0.0f)
{
if (source.vertex.empty() && source.pixel.empty())
throw love::Exception("Cannot create shader: no source code!");
@@ -216,6 +217,8 @@ bool Shader::loadVolatile()
lastCanvas = (Canvas *) -1;
lastViewport = OpenGL::Viewport();
lastPointSize = 0.0f;
// zero out active texture list
activeTexUnits.clear();
activeTexUnits.insert(activeTexUnits.begin(), gl.getMaxTextureUnits() - 1, 0);
@@ -709,6 +712,16 @@ void Shader::checkSetScreenParams()
lastViewport = view;
}
void Shader::checkSetPointSize(float size)
{
if (size == lastPointSize)
return;
sendBuiltinFloat(BUILTIN_POINT_SIZE, 1, &size, 1);
lastPointSize = size;
}
const std::map<std::string, Object *> &Shader::getBoundRetainables() const
{
return boundRetainables;
+3
View File
@@ -182,6 +182,7 @@ public:
bool sendBuiltinMatrix(BuiltinUniform builtin, int size, const GLfloat *m, int count);
bool sendBuiltinFloat(BuiltinUniform builtin, int size, const GLfloat *m, int count);
void checkSetScreenParams();
void checkSetPointSize(float size);
const std::map<std::string, Object *> &getBoundRetainables() const;
@@ -250,6 +251,8 @@ private:
Canvas *lastCanvas;
OpenGL::Viewport lastViewport;
float lastPointSize;
// Counts total number of textures bound to each texture unit in all shaders
static std::vector<int> textureCounters;