summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/glwrapper.cc
diff options
context:
space:
mode:
authorIxtli <cg@325i.org>2010-03-06 21:01:05 +0900
committerEnne Walker <ennewalker@users.sourceforge.net>2010-04-24 10:19:41 -0400
commit39c67a47583ff614d09aa7ed15cce6595d50ebd8 (patch)
tree1096d02f16ada38fb3cc0533f723d926d63b1429 /crawl-ref/source/glwrapper.cc
parent780665a3fb385d397c6f3e92cffee89df3ff94db (diff)
downloadcrawl-ref-39c67a47583ff614d09aa7ed15cce6595d50ebd8.tar.gz
crawl-ref-39c67a47583ff614d09aa7ed15cce6595d50ebd8.zip
Added GLPrimitive to glwrapper, condenced all vert-drawing methods to drawGLPrimitives and then updated tilebuf, font, reg, and sdl to use it propperly.
As well, tilebuf's VertBuffer::draw() method needed to be changed to allow passing to pre-render transformations (used in submerged tile rendering.)
Diffstat (limited to 'crawl-ref/source/glwrapper.cc')
-rw-r--r--crawl-ref/source/glwrapper.cc151
1 files changed, 75 insertions, 76 deletions
diff --git a/crawl-ref/source/glwrapper.cc b/crawl-ref/source/glwrapper.cc
index b058c448d7..3313a0130b 100644
--- a/crawl-ref/source/glwrapper.cc
+++ b/crawl-ref/source/glwrapper.cc
@@ -9,6 +9,22 @@
#endif
/////////////////////////////////////////////////////////////////////////////
+// GLPrimitive
+GLPrimitive::GLPrimitive(long unsigned int sz, size_t ct, unsigned int vs,
+ const void* v_pt, const void *c_pt, const void *t_pt) :
+ mode(GLW_QUADS),
+ vertSize(vs),
+ size(sz),
+ count(ct),
+ vert_pointer(v_pt),
+ colour_pointer(c_pt),
+ texture_pointer(t_pt),
+ pretranslate(NULL),
+ prescale(NULL)
+{
+}
+
+/////////////////////////////////////////////////////////////////////////////
// GLState
// Note: these defaults should match the OpenGL defaults
@@ -84,58 +100,75 @@ void GLStateManager::set(const GLState& state)
glDisable(GL_ALPHA_TEST);
}
-void GLStateManager::pixelStoreUnpackAlignment(unsigned int bpp)
+void GLStateManager::setTransform(GLW_3VF *translate, GLW_3VF *scale)
{
- glPixelStorei(GL_UNPACK_ALIGNMENT, bpp);
+ glLoadIdentity();
+ if(translate) glTranslatef(translate->x, translate->y, translate->z);
+ if(scale) glScalef(scale->x, scale->y, scale->z);
}
-void GLStateManager::drawQuadPTVert( long unsigned int size, size_t count,
- const void *vert_pointer, const void *tex_pointer)
+void GLStateManager::resetTransform()
{
- ASSERT(_valid(count, GLW_QUADS));
- glVertexPointer(2, GL_FLOAT, size, vert_pointer);
- glTexCoordPointer(2, GL_FLOAT, size, tex_pointer);
- glDrawArrays(GL_QUADS, 0, count);
+ glLoadIdentity();
+ glTranslatef(0,0,0);
+ glScalef(1,1,1);
}
-void GLStateManager::drawQuadPCVert( long unsigned int size, size_t count,
- const void *vert_pointer, const void *color_pointer)
+void GLStateManager::pixelStoreUnpackAlignment(unsigned int bpp)
{
- ASSERT(_valid(count, GLW_QUADS));
- glVertexPointer(2, GL_FLOAT, size, vert_pointer);
- glColorPointer(4, GL_UNSIGNED_BYTE, size, color_pointer);
- glDrawArrays(GL_QUADS, 0, count);
+ glPixelStorei(GL_UNPACK_ALIGNMENT, bpp);
}
-void GLStateManager::drawLinePCVert( long unsigned int size, size_t count,
- const void *vert_pointer, const void *color_pointer)
+void GLStateManager::drawGLPrimitive(const GLPrimitive &prim)
{
- ASSERT(_valid(count, GLW_LINES));
- glVertexPointer(2, GL_FLOAT, size, vert_pointer);
- glColorPointer(4, GL_UNSIGNED_BYTE, size, color_pointer);
- glDrawArrays(GL_LINES, 0, count);
-}
+ // Handle errors
+ if( !prim.vert_pointer || prim.count < 1 || prim.size < 1 ) return;
+ ASSERT(_valid(prim.count, prim.mode));
+
+ // Set pointers
+ glVertexPointer(prim.vertSize, GL_FLOAT, prim.size, prim.vert_pointer);
+ if( prim.texture_pointer && prim.mode != GLW_LINES )
+ glTexCoordPointer(2, GL_FLOAT, prim.size, prim.texture_pointer);
+ if( prim.colour_pointer )
+ glColorPointer(4, GL_UNSIGNED_BYTE, prim.size, prim.colour_pointer);
+
+ // Handle pre-render matrix manipulations
+ if( prim.pretranslate || prim.prescale )
+ {
+ glPushMatrix();
-void GLStateManager::drawQuadPTCVert( long unsigned int size, size_t count,
- const void *vert_pointer, const void *tex_pointer,
- const void *color_pointer)
-{
- ASSERT(_valid(count, GLW_QUADS));
- glVertexPointer(2, GL_FLOAT, size, vert_pointer);
- glTexCoordPointer(2, GL_FLOAT, size, tex_pointer);
- glColorPointer(4, GL_UNSIGNED_BYTE, size, color_pointer);
- glDrawArrays(GL_QUADS, 0, count);
-}
+ if( prim.pretranslate )
+ {
+ glTranslatef( prim.pretranslate->x,
+ prim.pretranslate->y,
+ prim.pretranslate->z);
+ }
-void GLStateManager::drawQuadP3TCVert( long unsigned int size, size_t count,
- const void *vert_pointer, const void *tex_pointer,
- const void *color_pointer)
-{
- ASSERT(_valid(count, GLW_QUADS));
- glVertexPointer(3, GL_FLOAT, size, vert_pointer);
- glTexCoordPointer(2, GL_FLOAT, size, tex_pointer);
- glColorPointer(4, GL_UNSIGNED_BYTE, size, color_pointer);
- glDrawArrays(GL_QUADS, 0, count);
+ if( prim.prescale )
+ glScalef(prim.prescale->x, prim.prescale->y, prim.prescale->z);
+
+ }
+
+ // Draw!
+ switch( prim.mode )
+ {
+ case GLW_QUADS:
+ glDrawArrays(GL_QUADS, 0, prim.count);
+ break;
+
+ case GLW_LINES:
+ glDrawArrays(GL_LINES, 0, prim.count);
+ break;
+
+ default:
+ break;
+ }
+
+ // Clean up
+ if( prim.pretranslate || prim.prescale )
+ {
+ glPopMatrix();
+ }
}
void GLStateManager::deleteTextures(size_t count, unsigned int *textures)
@@ -180,46 +213,12 @@ void GLStateManager::loadTexture(unsigned char *pixels, unsigned int width,
}
}
-void GLStateManager::clearBuffers()
+void GLStateManager::resetViewForRedraw(float x, float y)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-}
-
-void GLStateManager::setProjectionMatrixMode()
-{
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
-}
-
-void GLStateManager::setModelviewMatrixMode()
-{
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
-}
-
-void GLStateManager::pushMatrix()
-{
- glPushMatrix();
-}
-
-void GLStateManager::popMatrix()
-{
- glPopMatrix();
-}
-
-void GLStateManager::translatef(float x, float y, float z)
-{
- glTranslatef(x, y ,z);
-}
-
-void GLStateManager::scalef(float x, float y, float z)
-{
- glScalef(x, y, z);
-}
-
-void GLStateManager::loadIdentity()
-{
- glLoadIdentity();
+ glTranslatef(x, y , 1.0f);
}
void GLStateManager::drawTextBlock(unsigned int x_pos, unsigned int y_pos,