Browse Source

Ensure the current color is set properly after drawing particlesystems and spritebatches

Alex Szpakowski 12 years ago
parent
commit
6a27e1aa2f

+ 4 - 2
src/modules/graphics/opengl/ParticleSystem.cpp

@@ -514,8 +514,9 @@ void ParticleSystem::draw(float x, float y, float angle, float sx, float sy, flo
 	int numParticles = count();
 	int numParticles = count();
 	if (numParticles == 0) return; // don't bother if there's nothing to do
 	if (numParticles == 0) return; // don't bother if there's nothing to do
 
 
+	Color curcolor = opengl::getCurrentColor();
+
 	glPushMatrix();
 	glPushMatrix();
-	glPushAttrib(GL_CURRENT_BIT);
 
 
 	static Matrix t;
 	static Matrix t;
 	t.setTransformation(x, y, angle, sx, sy, ox, oy, kx, ky);
 	t.setTransformation(x, y, angle, sx, sy, ox, oy, kx, ky);
@@ -576,8 +577,9 @@ void ParticleSystem::draw(float x, float y, float angle, float sx, float sy, flo
 	glDisableClientState(GL_VERTEX_ARRAY);
 	glDisableClientState(GL_VERTEX_ARRAY);
 	glDisableClientState(GL_COLOR_ARRAY);
 	glDisableClientState(GL_COLOR_ARRAY);
 
 
-	glPopAttrib();
 	glPopMatrix();
 	glPopMatrix();
+
+	opengl::setCurrentColor(curcolor);
 }
 }
 
 
 void ParticleSystem::update(float dt)
 void ParticleSystem::update(float dt)

+ 5 - 0
src/modules/graphics/opengl/SpriteBatch.cpp

@@ -218,6 +218,8 @@ void SpriteBatch::draw(float x, float y, float angle, float sx, float sy, float
 	VertexBuffer::Bind array_bind(*array_buf);
 	VertexBuffer::Bind array_bind(*array_buf);
 	VertexBuffer::Bind element_bind(*element_buf->getVertexBuffer());
 	VertexBuffer::Bind element_bind(*element_buf->getVertexBuffer());
 
 
+	Color curcolor = opengl::getCurrentColor();
+
 	// Apply per-sprite color, if a color is set.
 	// Apply per-sprite color, if a color is set.
 	if (color)
 	if (color)
 	{
 	{
@@ -237,7 +239,10 @@ void SpriteBatch::draw(float x, float y, float angle, float sx, float sy, float
 	glDisableClientState(GL_TEXTURE_COORD_ARRAY);
 	glDisableClientState(GL_TEXTURE_COORD_ARRAY);
 
 
 	if (color)
 	if (color)
+	{
 		glDisableClientState(GL_COLOR_ARRAY);
 		glDisableClientState(GL_COLOR_ARRAY);
+		opengl::setCurrentColor(curcolor);
+	}
 
 
 	glPopMatrix();
 	glPopMatrix();
 }
 }