From: <axl...@us...> - 2009-08-19 23:50:42
|
Revision: 501 http://hgengine.svn.sourceforge.net/hgengine/?rev=501&view=rev Author: axlecrusher Date: 2009-08-19 23:50:34 +0000 (Wed, 19 Aug 2009) Log Message: ----------- Poor man's OpenGL profiler. I can't afford gDEBugger. Modified Paths: -------------- Mercury2/src/BoundingBox.cpp Mercury2/src/FullscreenQuad.cpp Mercury2/src/GLHeaders.h Mercury2/src/GLHelpers.cpp Mercury2/src/Light.cpp Mercury2/src/Mercury2.cpp Mercury2/src/MercuryAsset.cpp Mercury2/src/MercuryFBO.cpp Mercury2/src/MercuryNode.cpp Mercury2/src/MercuryVBO.cpp Mercury2/src/Orthographic.cpp Mercury2/src/RenderBuffer.cpp Mercury2/src/RenderDifferedLights.cpp Mercury2/src/RenderGraph.cpp Mercury2/src/Shader.cpp Mercury2/src/Texture.cpp Mercury2/src/TransformNode.cpp Mercury2/src/Viewport.cpp Mercury2/src/X11Window.cpp Modified: Mercury2/src/BoundingBox.cpp =================================================================== --- Mercury2/src/BoundingBox.cpp 2009-08-19 01:48:06 UTC (rev 500) +++ Mercury2/src/BoundingBox.cpp 2009-08-19 23:50:34 UTC (rev 501) @@ -14,7 +14,9 @@ OcclusionResult::~OcclusionResult() { if ( m_occlusionQuery != 0 ) - glDeleteQueriesARB( 1, &m_occlusionQuery ); + { + GLCALL( glDeleteQueriesARB( 1, &m_occlusionQuery ) ); + } m_occlusionQuery = 0; } @@ -23,7 +25,7 @@ if (m_occlusionQuery == 0) return ~0; uint32_t samples; - glGetQueryObjectuivARB(m_occlusionQuery, GL_QUERY_RESULT_ARB, &samples); + GLCALL( glGetQueryObjectuivARB(m_occlusionQuery, GL_QUERY_RESULT_ARB, &samples) ); return samples; } @@ -144,36 +146,36 @@ const float* center = GetCenter(); const float* extend = GetExtend(); - glPushAttrib( GL_CURRENT_BIT | GL_ENABLE_BIT | GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); - glDisable(GL_CULL_FACE); + GLCALL( glPushAttrib( GL_CURRENT_BIT | GL_ENABLE_BIT | GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT) ); + GLCALL( glDisable(GL_CULL_FACE) ); - glPushMatrix(); - glTranslatef(center[0], center[1], center[2]); - glScalef(extend[0],extend[1],extend[2]); + GLCALL( glPushMatrix() ); + GLCALL( glTranslatef(center[0], center[1], center[2]) ); + GLCALL( glScalef(extend[0],extend[1],extend[2]) ); if (m_vboID == 0) InitVBO(); if ( MercuryVBO::m_lastVBOrendered != &m_vboID ) { MercuryVBO::m_lastVBOrendered = &m_vboID; - glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_vboID); // once - glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); // once - glVertexPointer(3, GL_FLOAT, 0, 0); // once + GLCALL( glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_vboID) ); // once + GLCALL( glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0) ); // once + GLCALL( glVertexPointer(3, GL_FLOAT, 0, 0) ); // once } - if (result.GetQueryID() == 0) glGenQueriesARB(1, &result.GetQueryID()); - glBeginQueryARB(GL_SAMPLES_PASSED_ARB, result.GetQueryID()); + if (result.GetQueryID() == 0) { GLCALL( glGenQueriesARB(1, &result.GetQueryID()) ); } + GLCALL( glBeginQueryARB(GL_SAMPLES_PASSED_ARB, result.GetQueryID()) ); - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - glDepthMask(GL_FALSE); + GLCALL( glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE) ); + GLCALL( glDepthMask(GL_FALSE) ); - glDrawArrays(GL_QUADS, 0, 24); + GLCALL( glDrawArrays(GL_QUADS, 0, 24) ); - glEndQueryARB(GL_SAMPLES_PASSED_ARB); -// glGetQueryObjectuivARB(q, GL_QUERY_RESULT_ARB, &samples); + GLCALL( glEndQueryARB(GL_SAMPLES_PASSED_ARB) ); +// GLCALL( glGetQueryObjectuivARB(q, GL_QUERY_RESULT_ARB, &samples) ); - glPopMatrix(); - glPopAttrib( ); + GLCALL( glPopMatrix() ); + GLCALL( glPopAttrib( ) ); } void BoundingBox::RenderFaces() const @@ -181,22 +183,22 @@ const float* center = GetCenter(); const float* extend = GetExtend(); - glPushMatrix(); - glTranslatef(center[0], center[1], center[2]); - glScalef(extend[0],extend[1],extend[2]); + GLCALL( glPushMatrix() ); + GLCALL( glTranslatef(center[0], center[1], center[2]) ); + GLCALL( glScalef(extend[0],extend[1],extend[2]) ); if (m_vboID == 0) InitVBO(); // if ( MercuryVBO::m_lastVBOrendered != &m_vboID ) { MercuryVBO::m_lastVBOrendered = &m_vboID; - glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_vboID); // once - glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); // once - glVertexPointer(3, GL_FLOAT, 0, 0); // once + GLCALL( glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_vboID) ); // once + GLCALL( glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0) ); // once + GLCALL( glVertexPointer(3, GL_FLOAT, 0, 0) ); // once } - glDrawArrays(GL_QUADS, 0, 24); - glPopMatrix(); + GLCALL( glDrawArrays(GL_QUADS, 0, 24) ); + GLCALL( glPopMatrix() ); } void BoundingBox::Render() @@ -209,85 +211,85 @@ const float* center = GetCenter(); const float* extend = GetExtend(); - glPushMatrix(); -// glLoadIdentity(); - glPushAttrib( GL_CURRENT_BIT ); - glBegin(GL_LINES); - glColor3f(0,1.0f,0); + GLCALL( glPushMatrix() ); +// GLCALL( glLoadIdentity() ); + GLCALL( glPushAttrib( GL_CURRENT_BIT ) ); + GLCALL( glBegin(GL_LINES) ); + GLCALL( glColor3f(0,1.0f,0) ); //front - glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]+extend[2]); - glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]+extend[2]); - glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]+extend[2]); - glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]+extend[2]); - glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]+extend[2]); - glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]+extend[2]); - glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]+extend[2]); - glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]+extend[2]); + GLCALL( glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]+extend[2]) ); + GLCALL( glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]+extend[2]) ); + GLCALL( glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]+extend[2]) ); + GLCALL( glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]+extend[2]) ); + GLCALL( glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]+extend[2]) ); + GLCALL( glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]+extend[2]) ); + GLCALL( glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]+extend[2]) ); + GLCALL( glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]+extend[2]) ); //back - glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]-extend[2]); - glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]-extend[2]); - glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]-extend[2]); - glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]-extend[2]); - glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]-extend[2]); - glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]-extend[2]); - glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]-extend[2]); - glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]-extend[2]); + GLCALL( glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]-extend[2]) ); + GLCALL( glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]-extend[2]) ); + GLCALL( glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]-extend[2]) ); + GLCALL( glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]-extend[2]) ); + GLCALL( glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]-extend[2]) ); + GLCALL( glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]-extend[2]) ); + GLCALL( glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]-extend[2]) ); + GLCALL( glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]-extend[2]) ); //top - glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]-extend[2]); - glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]+extend[2]); - glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]-extend[2]); - glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]+extend[2]); + GLCALL( glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]-extend[2]) ); + GLCALL( glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]+extend[2]) ); + GLCALL( glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]-extend[2]) ); + GLCALL( glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]+extend[2]) ); //bottom - glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]-extend[2]); - glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]+extend[2]); - glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]-extend[2]); - glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]+extend[2]); + GLCALL( glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]-extend[2]) ); + GLCALL( glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]+extend[2]) ); + GLCALL( glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]-extend[2]) ); + GLCALL( glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]+extend[2]) ); - glEnd(); + GLCALL( glEnd() ); - glPointSize(4); - glBegin(GL_POINTS); + GLCALL( glPointSize(4) ); + GLCALL( glBegin(GL_POINTS) ); //center - glVertex3f(center[0], center[1], center[2]); + GLCALL( glVertex3f(center[0], center[1], center[2]) ); //max point - glColor3f(1,1,0); - glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]+extend[2]); + GLCALL( glColor3f(1,1,0) ); + GLCALL( glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]+extend[2]) ); //min point -// glColor3f(1,0,0); - glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]-extend[2]); - glEnd(); +// GLCALL( glColor3f(1,0,0) ); + GLCALL( glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]-extend[2]) ); + GLCALL( glEnd() ); //normals MercuryVertex c; - glBegin(GL_LINES); + GLCALL( glBegin(GL_LINES) ); - glColor3f(1.0f,0,0); - glVertex3f(center[0], center[1], center[2]); + GLCALL( glColor3f(1.0f,0,0) ); + GLCALL( glVertex3f(center[0], center[1], center[2]) ); c = center; c += m_normals[0]; - glVertex3f(c.GetX(), c.GetY(), c.GetZ()); + GLCALL( glVertex3f(c.GetX(), c.GetY(), c.GetZ()) ); - glColor3f(0,1.0f,0); - glVertex3f(center[0], center[1], center[2]); + GLCALL( glColor3f(0,1.0f,0) ); + GLCALL( glVertex3f(center[0], center[1], center[2]) ); c = center; c += m_normals[1]; - glVertex3f(c.GetX(), c.GetY(), c.GetZ()); + GLCALL( glVertex3f(c.GetX(), c.GetY(), c.GetZ()) ); - glColor3f(0,0,1.0f); - glVertex3f(center[0], center[1], center[2]); + GLCALL( glColor3f(0,0,1.0f) ); + GLCALL( glVertex3f(center[0], center[1], center[2]) ); c = center; c += m_normals[2]; - glVertex3f(c.GetX(), c.GetY(), c.GetZ()); + GLCALL( glVertex3f(c.GetX(), c.GetY(), c.GetZ()) ); - glEnd(); + GLCALL( glEnd() ); - glPopAttrib( ); - glPopMatrix(); + GLCALL( glPopAttrib( ) ); + GLCALL( glPopMatrix() ); } void BoundingBox::PopulateVertices() @@ -336,11 +338,11 @@ void BoundingBox::InitVBO() { - glGenBuffersARB(1, &m_vboID); + GLCALL( glGenBuffersARB(1, &m_vboID) ); //vertex VBO - glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_vboID); - glBufferDataARB(GL_ARRAY_BUFFER_ARB, m_vertexData.LengthInBytes(), m_vertexData.Buffer(), GL_STATIC_DRAW_ARB); + GLCALL( glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_vboID) ); + GLCALL( glBufferDataARB(GL_ARRAY_BUFFER_ARB, m_vertexData.LengthInBytes(), m_vertexData.Buffer(), GL_STATIC_DRAW_ARB) ); } AlignedBuffer<float> BoundingBox::m_vertexData; Modified: Mercury2/src/FullscreenQuad.cpp =================================================================== --- Mercury2/src/FullscreenQuad.cpp 2009-08-19 01:48:06 UTC (rev 500) +++ Mercury2/src/FullscreenQuad.cpp 2009-08-19 23:50:34 UTC (rev 501) @@ -13,20 +13,20 @@ void FullscreenQuad::Render(const MercuryNode* node) { - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); -// glLoadIdentity(); - glLoadMatrixf( m_matrix.Ptr() ); //this is OK + GLCALL( glMatrixMode(GL_MODELVIEW) ); + GLCALL( glPushMatrix() ); +// GLCALL( glLoadIdentity() ); + GLCALL( glLoadMatrixf( m_matrix.Ptr() ) ); //this is OK - glMatrixMode(GL_PROJECTION); - glPushMatrix(); -// glLoadIdentity(); + GLCALL( glMatrixMode(GL_PROJECTION) ); + GLCALL( glPushMatrix() ); +// GLCALL( glLoadIdentity() ); Quad::Render( node ); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); + GLCALL( glPopMatrix() ); + GLCALL( glMatrixMode(GL_MODELVIEW) ); + GLCALL( glPopMatrix() ); } FullscreenQuad* FullscreenQuad::Generate() Modified: Mercury2/src/GLHeaders.h =================================================================== --- Mercury2/src/GLHeaders.h 2009-08-19 01:48:06 UTC (rev 500) +++ Mercury2/src/GLHeaders.h 2009-08-19 23:50:34 UTC (rev 501) @@ -23,17 +23,19 @@ #include <MercuryLog.h> +#define GLCALL(x) x; ++GLCALLCOUNT; + #define GLERRORCHECK { \ -uint32_t e = glGetError(); \ +uint32_t e = GLCALL( glGetError() ); \ if ( e != GL_NO_ERROR ) { \ LOG.Write(ssprintf("GL Error:%s", GlError2String(e).c_str())); \ assert(0); } } #define CHECKFBO { \ -uint32_t e = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER); \ +uint32_t e = GLCALL( glCheckFramebufferStatusEXT(GL_FRAMEBUFFER) ); \ if ( e != GL_FRAMEBUFFER_COMPLETE ) { \ LOG.Write(ssprintf("GL FBO Error:%s", GlError2String(e).c_str())); \ assert(0); } } - +extern uint32_t GLCALLCOUNT; #endif Modified: Mercury2/src/GLHelpers.cpp =================================================================== --- Mercury2/src/GLHelpers.cpp 2009-08-19 01:48:06 UTC (rev 500) +++ Mercury2/src/GLHelpers.cpp 2009-08-19 23:50:34 UTC (rev 501) @@ -1,6 +1,8 @@ #include <GLHeaders.h> #include <GLHelpers.h> +uint32_t GLCALLCOUNT = 0; + MString GlError2String(uint32_t e) { switch (e) @@ -63,13 +65,13 @@ GLdouble modelview[16]; GLdouble projection[16]; - glGetIntegerv(GL_VIEWPORT, viewport); - glGetDoublev(GL_MODELVIEW_MATRIX, modelview); - glGetDoublev(GL_PROJECTION_MATRIX, projection); + GLCALL( glGetIntegerv(GL_VIEWPORT, viewport) ); + GLCALL( glGetDoublev(GL_MODELVIEW_MATRIX, modelview) ); + GLCALL( glGetDoublev(GL_PROJECTION_MATRIX, projection) ); winX = (float)screen_x; winY = (float)viewport[3] - (float)screen_y; - glReadPixels( screen_x, (int)winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ ); + GLCALL( glReadPixels( screen_x, (int)winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ ) ); gluUnProject( winX, winY, winZ, Modified: Mercury2/src/Light.cpp =================================================================== --- Mercury2/src/Light.cpp 2009-08-19 01:48:06 UTC (rev 500) +++ Mercury2/src/Light.cpp 2009-08-19 23:50:34 UTC (rev 501) @@ -131,7 +131,7 @@ void Light::DifferedRender() { - glLoadMatrix( m_worldPosition ); + GLCALL( glLoadMatrix( m_worldPosition ) ); if ( !m_boundingVolume ) return; if ( m_shader.IsValid() ) @@ -169,9 +169,9 @@ if (m_fullscreen) { - glCullFace(GL_BACK); + GLCALL( glCullFace(GL_BACK) ); m_fullScreenQuad.Render( this ); - glCullFace(GL_FRONT); + GLCALL( glCullFace(GL_FRONT) ); } else bb->RenderFaces(); Modified: Mercury2/src/Mercury2.cpp =================================================================== --- Mercury2/src/Mercury2.cpp 2009-08-19 01:48:06 UTC (rev 500) +++ Mercury2/src/Mercury2.cpp 2009-08-19 23:50:34 UTC (rev 501) @@ -106,8 +106,11 @@ float batches = MercuryVBO::ResetBatchCount()/(float)m_count; float VBinds = MercuryVBO::ResetBindCount()/(float)m_count; float Tbinds = Texture::ReadAndResetBindCount()/(float)m_count; + float GLcalls = GLCALLCOUNT/(float)m_count; LOG.Write( ssprintf("FPS: %f, VBO batches %f, TBinds %f, VBinds %f", m_count/fpsTimer.Age(), batches, Tbinds, VBinds) ); + LOG.Write( ssprintf("GL/f: %f", GLcalls) ); m_count = 0; + GLCALLCOUNT = 0; fpsTimer = timer; } } Modified: Mercury2/src/MercuryAsset.cpp =================================================================== --- Mercury2/src/MercuryAsset.cpp 2009-08-19 01:48:06 UTC (rev 500) +++ Mercury2/src/MercuryAsset.cpp 2009-08-19 23:50:34 UTC (rev 501) @@ -71,18 +71,18 @@ void MercuryAsset::DrawAxes() { - glBegin(GL_LINES); - glColor3f(1,0,0); - glVertex3f(0,0,0); - glVertex3f(0.5,0,0); - glColor3f(0,1,0); - glVertex3f(0,0,0); - glVertex3f(0,0.5,0); - glColor3f(0,0,1); - glVertex3f(0,0,0); - glVertex3f(0,0,0.5); - glColor3f(1,1,1); - glEnd(); + GLCALL( glBegin(GL_LINES) ); + GLCALL( glColor3f(1,0,0) ); + GLCALL( glVertex3f(0,0,0) ); + GLCALL( glVertex3f(0.5,0,0) ); + GLCALL( glColor3f(0,1,0) ); + GLCALL( glVertex3f(0,0,0) ); + GLCALL( glVertex3f(0,0.5,0) ); + GLCALL( glColor3f(0,0,1) ); + GLCALL( glVertex3f(0,0,0) ); + GLCALL( glVertex3f(0,0,0.5) ); + GLCALL( glColor3f(1,1,1) ); + GLCALL( glEnd() ); } MercuryAssetInstance::MercuryAssetInstance(MercuryAsset* asset) Modified: Mercury2/src/MercuryFBO.cpp =================================================================== --- Mercury2/src/MercuryFBO.cpp 2009-08-19 01:48:06 UTC (rev 500) +++ Mercury2/src/MercuryFBO.cpp 2009-08-19 23:50:34 UTC (rev 501) @@ -24,8 +24,8 @@ void MercuryFBO::Clean() { - if (m_fboID != 0) glDeleteFramebuffersEXT(1, &m_fboID); - if (m_depthBufferID != 0) glDeleteRenderbuffersEXT( 1, &m_depthBufferID ); + if (m_fboID != 0) { GLCALL( glDeleteFramebuffersEXT(1, &m_fboID) ); } + if (m_depthBufferID != 0) { GLCALL( glDeleteRenderbuffersEXT( 1, &m_depthBufferID ) ); } m_fboID = m_depthBufferID = 0; m_initiated = false; for (uint8_t i = 0; i < 4; ++i) m_textures[i] = NULL; @@ -43,8 +43,8 @@ void MercuryFBO::GenerateFBO() { - if( m_useDepth ) glGenRenderbuffersEXT( 1, &m_depthBufferID ); - glGenFramebuffersEXT( 1, &m_fboID ); + if( m_useDepth ) { GLCALL( glGenRenderbuffersEXT( 1, &m_depthBufferID ) ); } + GLCALL( glGenFramebuffersEXT( 1, &m_fboID ) ); for (uint8_t i = 0; i < m_numTextures; ++i) { @@ -58,16 +58,20 @@ { if( m_useDepth ) { - glBindRenderbufferEXT( GL_RENDERBUFFER_EXT, m_fboID ); - glRenderbufferStorageEXT( GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, m_width, m_height ); + GLCALL( glBindRenderbufferEXT( GL_RENDERBUFFER_EXT, m_fboID ) ); + GLCALL( glRenderbufferStorageEXT( GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, m_width, m_height ) ); } - glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, m_fboID ); + GLCALL( glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, m_fboID ) ); for (uint8_t i = 0; i < m_numTextures; ++i) - glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT + i, GL_TEXTURE_2D, m_textures[i]->TextureID(), 0 ); - + { + GLCALL( glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT + i, GL_TEXTURE_2D, m_textures[i]->TextureID(), 0 ) ); + } + if( m_useDepth ) - glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, m_depthBufferID ); + { + GLCALL( glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, m_depthBufferID ) ); + } } @@ -75,7 +79,7 @@ void MercuryFBO::InitFBOBeforeRender() { m_initiated = true; - glGenFramebuffersEXT(1, &m_fboID); + GLCALL( glGenFramebuffersEXT(1, &m_fboID) ); CHECKFBO; GLERRORCHECK; } @@ -104,19 +108,19 @@ GLERRORCHECK; } - glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_fboID); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + GLCALL( glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_fboID) ); + GLCALL( glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) ); GLERRORCHECK; const GLenum buffers[8] = { GL_COLOR_ATTACHMENT0_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_COLOR_ATTACHMENT2_EXT, GL_COLOR_ATTACHMENT3_EXT, GL_COLOR_ATTACHMENT4_EXT, GL_COLOR_ATTACHMENT5_EXT, GL_COLOR_ATTACHMENT6_EXT, GL_COLOR_ATTACHMENT7_EXT }; - glDrawBuffersARB( m_numTextures, buffers ); + GLCALL( glDrawBuffersARB( m_numTextures, buffers ) ); - glPushAttrib(GL_VIEWPORT_BIT); + GLCALL( glPushAttrib(GL_VIEWPORT_BIT) ); - if ( !m_useScreenSize ) glViewport(0,0,m_width, m_height); + if ( !m_useScreenSize ) { GLCALL( glViewport(0,0,m_width, m_height) ); } GLERRORCHECK; MercuryNode::Render(matrix); @@ -125,19 +129,19 @@ void MercuryFBO::PostRender(const MercuryMatrix& matrix) { - glPopAttrib(); + GLCALL( glPopAttrib() ); MercuryNode::PostRender(matrix); // for( uint8_t i = 0; i < m_numTextures; i++ ) // { -// glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT + i, GL_TEXTURE_2D, 0, 0 ); -// glActiveTextureARB( GL_TEXTURE0_ARB + i ); -// glDisable( GL_TEXTURE_2D ); +// GLCALL( glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT + i, GL_TEXTURE_2D, 0, 0 ) ); +// GLCALL( glActiveTextureARB( GL_TEXTURE0_ARB + i ) ); +// GLCALL( glDisable( GL_TEXTURE_2D ) ); // } // CURRENTRENDERGRAPH->DoDifferedLightPass(); - glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, 0 ); -// glBindRenderbufferEXT( GL_RENDERBUFFER_EXT, 0 ); + GLCALL( glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, 0 ) ); +// GLCALL( glBindRenderbufferEXT( GL_RENDERBUFFER_EXT, 0 ) ); // CURRENTRENDERGRAPH->DoDifferedLightPass(); CHECKFBO; Modified: Mercury2/src/MercuryNode.cpp =================================================================== --- Mercury2/src/MercuryNode.cpp 2009-08-19 01:48:06 UTC (rev 500) +++ Mercury2/src/MercuryNode.cpp 2009-08-19 23:50:34 UTC (rev 501) @@ -198,7 +198,7 @@ //the alpha render path requires that all things things happen, so //it is just easier to leave it here than to duplicate this code in //RenderGraph::RenderAlpha - glLoadMatrix( modelView ); + GLCALL( glLoadMatrix( modelView ) ); ShaderAttribute sa; sa.type = ShaderAttribute::TYPE_MATRIX; @@ -216,7 +216,7 @@ child->RecursiveRender(); } - glLoadMatrix( modelView ); + GLCALL( glLoadMatrix( modelView ) ); Shader::SetAttribute("HG_ModelMatrix", sa); PostRender( modelView ); //calls on children assets } Modified: Mercury2/src/MercuryVBO.cpp =================================================================== --- Mercury2/src/MercuryVBO.cpp 2009-08-19 01:48:06 UTC (rev 500) +++ Mercury2/src/MercuryVBO.cpp 2009-08-19 23:50:34 UTC (rev 501) @@ -19,7 +19,7 @@ MercuryVBO::~MercuryVBO() { - if (m_bufferIDs[0]) glDeleteBuffersARB(2, m_bufferIDs); + if (m_bufferIDs[0]) { GLCALL( glDeleteBuffersARB(2, m_bufferIDs) ); } m_bufferIDs[0] = m_bufferIDs[1] = 0; } @@ -39,24 +39,24 @@ if( m_bDirtyIndices ) UpdateIndices(); - glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_bufferIDs[0]); - glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, m_bufferIDs[1]); - glVertexPointer(3, GL_FLOAT, stride, BUFFER_OFFSET(sizeof(float)*5)); + GLCALL( glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_bufferIDs[0]) ); + GLCALL( glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, m_bufferIDs[1]) ); + GLCALL( glVertexPointer(3, GL_FLOAT, stride, BUFFER_OFFSET(sizeof(float)*5)) ); ++m_vboBinds; } //apply all the active Textures for (uint8_t i = 0; i < numTextures; ++i) { - glActiveTexture( GL_TEXTURE0+i ); - glClientActiveTextureARB(GL_TEXTURE0+i); - glTexCoordPointer(2, GL_FLOAT, stride, BUFFER_OFFSET(sizeof(float)*0)); + GLCALL( glActiveTexture( GL_TEXTURE0+i ) ); + GLCALL( glClientActiveTextureARB(GL_TEXTURE0+i) ); + GLCALL( glTexCoordPointer(2, GL_FLOAT, stride, BUFFER_OFFSET(sizeof(float)*0)) ); } - glEnableClientState( GL_NORMAL_ARRAY ); - glNormalPointer(GL_FLOAT, stride, BUFFER_OFFSET(sizeof(float)*2)); + GLCALL( glEnableClientState( GL_NORMAL_ARRAY ) ); + GLCALL( glNormalPointer(GL_FLOAT, stride, BUFFER_OFFSET(sizeof(float)*2)) ); - glDrawRangeElements(GL_TRIANGLES, 0, m_indexData.Length()-1, m_indexData.Length(), GL_UNSIGNED_SHORT, NULL); + GLCALL( glDrawRangeElements(GL_TRIANGLES, 0, m_indexData.Length()-1, m_indexData.Length(), GL_UNSIGNED_SHORT, NULL) ); m_vboBatches++; if (m_boundingVolume && SHOWBOUNDINGVOLUME) m_boundingVolume->Render(); @@ -67,27 +67,27 @@ { if (!m_bufferIDs[0]) { - glGenBuffersARB(2, m_bufferIDs); + GLCALL( glGenBuffersARB(2, m_bufferIDs) ); } UpdateIndices(); UpdateVertices(); - glEnableClientState(GL_VERTEX_ARRAY); + GLCALL( glEnableClientState(GL_VERTEX_ARRAY) ); m_initiated = true; } void MercuryVBO::UpdateIndices() { - glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, m_bufferIDs[1]); - glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, m_indexData.LengthInBytes(), m_indexData.Buffer(), GL_STATIC_DRAW_ARB); + GLCALL( glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, m_bufferIDs[1]) ); + GLCALL( glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, m_indexData.LengthInBytes(), m_indexData.Buffer(), GL_STATIC_DRAW_ARB) ); m_bDirtyIndices = 0; } void MercuryVBO::UpdateVertices() { - glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_bufferIDs[0]); - glBufferDataARB(GL_ARRAY_BUFFER_ARB, m_vertexData.LengthInBytes(), m_vertexData.Buffer(), GL_STATIC_DRAW_ARB); + GLCALL( glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_bufferIDs[0]) ); + GLCALL( glBufferDataARB(GL_ARRAY_BUFFER_ARB, m_vertexData.LengthInBytes(), m_vertexData.Buffer(), GL_STATIC_DRAW_ARB) ); m_bDirtyVertices = 0; } Modified: Mercury2/src/Orthographic.cpp =================================================================== --- Mercury2/src/Orthographic.cpp 2009-08-19 01:48:06 UTC (rev 500) +++ Mercury2/src/Orthographic.cpp 2009-08-19 23:50:34 UTC (rev 501) @@ -13,9 +13,9 @@ FRUSTUM = &m_frustum; //Load the frustum into the projection - glMatrixMode(GL_PROJECTION); - glLoadMatrix( m_frustum.GetMatrix() ); - glMatrixMode(GL_MODELVIEW); + GLCALL( glMatrixMode(GL_PROJECTION) ); + GLCALL( glLoadMatrix( m_frustum.GetMatrix() ) ); + GLCALL( glMatrixMode(GL_MODELVIEW) ); VIEWMATRIX = matrix; MercuryNode::PreRender(matrix); @@ -26,9 +26,9 @@ FRUSTUM = &m_frustum; //Load the frustum into the projection - glMatrixMode(GL_PROJECTION); - glLoadMatrix( m_frustum.GetMatrix() ); - glMatrixMode(GL_MODELVIEW); + GLCALL( glMatrixMode(GL_PROJECTION) ); + GLCALL( glLoadMatrix( m_frustum.GetMatrix() ) ); + GLCALL( glMatrixMode(GL_MODELVIEW) ); VIEWMATRIX = matrix; MercuryNode::Render(matrix); Modified: Mercury2/src/RenderBuffer.cpp =================================================================== --- Mercury2/src/RenderBuffer.cpp 2009-08-19 01:48:06 UTC (rev 500) +++ Mercury2/src/RenderBuffer.cpp 2009-08-19 23:50:34 UTC (rev 501) @@ -14,28 +14,28 @@ RenderBuffer::~RenderBuffer() { - if (m_bufferID != 0) glDeleteRenderbuffersEXT(1, &m_bufferID); + if (m_bufferID != 0) { GLCALL( glDeleteRenderbuffersEXT(1, &m_bufferID) ); } } void RenderBuffer::Render(const MercuryNode* node) { if ( !m_initiated ) InitRenderBuffer(); - glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, m_bufferID); + GLCALL( glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, m_bufferID) ); if ( NeedResize() ) AllocateSpace(); if ( m_type == TEXTURE ) { - glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GLAttachPoint(), GL_TEXTURE_2D, m_textureID, 0); + GLCALL( glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GLAttachPoint(), GL_TEXTURE_2D, m_textureID, 0) ); } else { - glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GLAttachPoint(), GL_RENDERBUFFER_EXT, m_bufferID); + GLCALL( glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GLAttachPoint(), GL_RENDERBUFFER_EXT, m_bufferID) ); } CHECKFBO; - glClearColor(0.0, 0.0, 0.0, 0.0); - glClear(GL_COLOR_BUFFER_BIT ); + GLCALL( glClearColor(0.0, 0.0, 0.0, 0.0) ); + GLCALL( glClear(GL_COLOR_BUFFER_BIT ) ); GLERRORCHECK; } @@ -44,57 +44,57 @@ GLERRORCHECK; if ( m_type == TEXTURE ) { - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); + GLCALL( glMatrixMode(GL_MODELVIEW) ); + GLCALL( glPushMatrix() ); + GLCALL( glLoadIdentity() ); GLERRORCHECK; - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); + GLCALL( glMatrixMode(GL_PROJECTION) ); + GLCALL( glPushMatrix() ); + GLCALL( glLoadIdentity() ); GLERRORCHECK; // printf("active %d\n", Texture::NumberActiveTextures() ); //this works with a "normal" texture, FBO texture is still white - glActiveTexture( GL_TEXTURE0 ); - glClientActiveTextureARB(GL_TEXTURE0); - glEnable( GL_TEXTURE_2D ); - glBindTexture(GL_TEXTURE_2D, m_textureID); - glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); + GLCALL( glActiveTexture( GL_TEXTURE0 ) ); + GLCALL( glClientActiveTextureARB(GL_TEXTURE0) ); + GLCALL( glEnable( GL_TEXTURE_2D ) ); + GLCALL( glBindTexture(GL_TEXTURE_2D, m_textureID) ); + GLCALL( glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ) ); GLERRORCHECK; - glBegin(GL_QUADS); - glTexCoord2d(0,1); - glVertex3i(-1, -1, -1); + GLCALL( glBegin(GL_QUADS) ); + GLCALL( glTexCoord2d(0,1) ); + GLCALL( glVertex3i(-1, -1, -1) ); - glTexCoord2d(1,1); - glVertex3i(1, -1, -1); + GLCALL( glTexCoord2d(1,1) ); + GLCALL( glVertex3i(1, -1, -1) ); - glTexCoord2d(1,0); - glVertex3i(1, 1, -1); + GLCALL( glTexCoord2d(1,0) ); + GLCALL( glVertex3i(1, 1, -1) ); - glTexCoord2d(0,0); - glVertex3i(-1, 1, -1); + GLCALL( glTexCoord2d(0,0) ); + GLCALL( glVertex3i(-1, 1, -1) ); - glEnd(); + GLCALL( glEnd() ); GLERRORCHECK; - glBindTexture(GL_TEXTURE_2D, 0); -// glActiveTexture( GL_TEXTURE0 ); -// glClientActiveTextureARB(GL_TEXTURE0); -// glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glDisable( GL_TEXTURE_2D ); + GLCALL( glBindTexture(GL_TEXTURE_2D, 0) ); +// GLCALL( glActiveTexture( GL_TEXTURE0 ) ); +// GLCALL( glClientActiveTextureARB(GL_TEXTURE0) ); +// GLCALL( glDisableClientState(GL_TEXTURE_COORD_ARRAY) ); + GLCALL( glDisable( GL_TEXTURE_2D ) ); GLERRORCHECK; - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); + GLCALL( glPopMatrix() ); + GLCALL( glMatrixMode(GL_MODELVIEW) ); + GLCALL( glPopMatrix() ); GLERRORCHECK; } @@ -103,10 +103,10 @@ void RenderBuffer::InitRenderBuffer() { m_initiated = true; - glGenRenderbuffersEXT(1, &m_bufferID); + GLCALL( glGenRenderbuffersEXT(1, &m_bufferID) ); CHECKFBO; GLERRORCHECK; - if (m_type == TEXTURE) glGenTextures(1, &m_textureID); + if (m_type == TEXTURE) { GLCALL( glGenTextures(1, &m_textureID) ); } CHECKFBO; GLERRORCHECK; } @@ -120,11 +120,13 @@ if (m_type == TEXTURE) { - glBindTexture(GL_TEXTURE_2D, m_textureID); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, m_width, m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); + GLCALL( glBindTexture(GL_TEXTURE_2D, m_textureID) ); + GLCALL( glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, m_width, m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL) ); } else - glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GLType(), m_width, m_height); + { + GLCALL( glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GLType(), m_width, m_height) ); + } GLERRORCHECK; } Modified: Mercury2/src/RenderDifferedLights.cpp =================================================================== --- Mercury2/src/RenderDifferedLights.cpp 2009-08-19 01:48:06 UTC (rev 500) +++ Mercury2/src/RenderDifferedLights.cpp 2009-08-19 23:50:34 UTC (rev 501) @@ -23,21 +23,21 @@ //apply all the active Textures for (uint8_t i = 0; i < numTextures; ++i) { - glActiveTexture( GL_TEXTURE0+i ); - glClientActiveTextureARB(GL_TEXTURE0+i); - glTexCoordPointer(2, GL_FLOAT, stride, BUFFER_OFFSET(sizeof(float)*0)); + GLCALL( glActiveTexture( GL_TEXTURE0+i ) ); + GLCALL( glClientActiveTextureARB(GL_TEXTURE0+i) ); + GLCALL( glTexCoordPointer(2, GL_FLOAT, stride, BUFFER_OFFSET(sizeof(float)*0)) ); } - glPushAttrib( GL_CURRENT_BIT | GL_ENABLE_BIT | GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_POLYGON_BIT); - glCullFace(GL_FRONT); + GLCALL( glPushAttrib( GL_CURRENT_BIT | GL_ENABLE_BIT | GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_POLYGON_BIT) ); + GLCALL( glCullFace(GL_FRONT) ); - glDisable(GL_DEPTH_TEST); - glDepthMask(false); - glBlendFunc(GL_ONE, GL_ONE); + GLCALL( glDisable(GL_DEPTH_TEST) ); + GLCALL( glDepthMask(false) ); + GLCALL( glBlendFunc(GL_ONE, GL_ONE) ); CURRENTRENDERGRAPH->DoDifferedLightPass(); - glPopAttrib( ); + GLCALL( glPopAttrib( ) ); } RenderDifferedLights* RenderDifferedLights::Generate() Modified: Mercury2/src/RenderGraph.cpp =================================================================== --- Mercury2/src/RenderGraph.cpp 2009-08-19 01:48:06 UTC (rev 500) +++ Mercury2/src/RenderGraph.cpp 2009-08-19 23:50:34 UTC (rev 501) @@ -20,7 +20,7 @@ modelView = m_node->ManipulateMatrix( *m_matrix ); if ( m_node->IsHidden() || m_node->IsCulled(modelView) ) return; - glLoadMatrix( modelView ); + GLCALL( glLoadMatrix( modelView ) ); sa.type = ShaderAttribute::TYPE_MATRIX; sa.value.matrix = m_matrix->Ptr(); @@ -36,7 +36,7 @@ if (m_node) { - glLoadMatrix( modelView ); + GLCALL( glLoadMatrix( modelView ) ); Shader::SetAttribute("HG_ModelMatrix", sa); m_node->PostRender( modelView ); //calls on children assets } Modified: Mercury2/src/Shader.cpp =================================================================== --- Mercury2/src/Shader.cpp 2009-08-19 01:48:06 UTC (rev 500) +++ Mercury2/src/Shader.cpp 2009-08-19 23:50:34 UTC (rev 501) @@ -193,16 +193,16 @@ GLint bFragCompiled; GLint stringLength; - fragmentShader = glCreateShaderObjectARB( GL_FRAGMENT_SHADER_ARB ); - glShaderSourceARB( fragmentShader, 1, &sShaderCode, NULL ); - glCompileShaderARB( fragmentShader ); + fragmentShader = GLCALL( glCreateShaderObjectARB( GL_FRAGMENT_SHADER_ARB ) ); + GLCALL( glShaderSourceARB( fragmentShader, 1, &sShaderCode, NULL ) ); + GLCALL( glCompileShaderARB( fragmentShader ) ); - glGetObjectParameterivARB( fragmentShader, GL_OBJECT_COMPILE_STATUS_ARB, &bFragCompiled ); - glGetObjectParameterivARB( fragmentShader, GL_OBJECT_INFO_LOG_LENGTH_ARB, &stringLength ); + GLCALL( glGetObjectParameterivARB( fragmentShader, GL_OBJECT_COMPILE_STATUS_ARB, &bFragCompiled ) ); + GLCALL( glGetObjectParameterivARB( fragmentShader, GL_OBJECT_INFO_LOG_LENGTH_ARB, &stringLength ) ); if ( stringLength > 1 ) { char * tmpstr = (char*)malloc( stringLength + 1 ); - glGetInfoLogARB( fragmentShader, stringLength, NULL, tmpstr ); + GLCALL( glGetInfoLogARB( fragmentShader, stringLength, NULL, tmpstr ) ); puts( "Compiling Fragment Shader response follows:" ); puts( tmpstr ); free( tmpstr ); @@ -219,18 +219,18 @@ GLint bVertCompiled; GLint stringLength; //Create a new vertex shader - vertexShader = glCreateShaderObjectARB( GL_VERTEX_SHADER_ARB ); + vertexShader = GLCALL( glCreateShaderObjectARB( GL_VERTEX_SHADER_ARB ) ); //Bind the shader to the text, setting that to be its source. - glShaderSourceARB( vertexShader, 1, &sShaderCode, NULL ); + GLCALL( glShaderSourceARB( vertexShader, 1, &sShaderCode, NULL ) ); //Compile the shader - glCompileShaderARB( vertexShader ); + GLCALL( glCompileShaderARB( vertexShader ) ); //Did the shader compile? Were there any errors? - glGetObjectParameterivARB( vertexShader, GL_OBJECT_COMPILE_STATUS_ARB, &bVertCompiled ); - glGetObjectParameterivARB( vertexShader, GL_OBJECT_INFO_LOG_LENGTH_ARB, &stringLength ); + GLCALL( glGetObjectParameterivARB( vertexShader, GL_OBJECT_COMPILE_STATUS_ARB, &bVertCompiled ) ); + GLCALL( glGetObjectParameterivARB( vertexShader, GL_OBJECT_INFO_LOG_LENGTH_ARB, &stringLength ) ); if( stringLength > 1 ) { char * tmpstr = (char*)malloc( stringLength + 1 ); - glGetInfoLogARB( vertexShader, stringLength, NULL, tmpstr ); + GLCALL( glGetInfoLogARB( vertexShader, stringLength, NULL, tmpstr ) ); puts( "Compiling Vertex Shader response follows:" ); puts( tmpstr ); free( tmpstr ); @@ -248,18 +248,18 @@ GLint bGeomCompiled; GLint stringLength; //Create a new geometry shader - geometryShader = glCreateShaderObjectARB( GL_GEOMETRY_SHADER_EXT ); + geometryShader = GLCALL( glCreateShaderObjectARB( GL_GEOMETRY_SHADER_EXT ) ); //Bind the shader to the text, setting that to be its source. - glShaderSourceARB( geometryShader, 1, &sShaderCode, NULL ); + GLCALL( glShaderSourceARB( geometryShader, 1, &sShaderCode, NULL ) ); //Compile the shader - glCompileShaderARB( geometryShader ); + GLCALL( glCompileShaderARB( geometryShader ) ); //Did the shader compile? Were there any errors? - glGetObjectParameterivARB( geometryShader, GL_OBJECT_COMPILE_STATUS_ARB, &bGeomCompiled ); - glGetObjectParameterivARB( geometryShader, GL_OBJECT_INFO_LOG_LENGTH_ARB, &stringLength ); + GLCALL( glGetObjectParameterivARB( geometryShader, GL_OBJECT_COMPILE_STATUS_ARB, &bGeomCompiled ) ); + GLCALL( glGetObjectParameterivARB( geometryShader, GL_OBJECT_INFO_LOG_LENGTH_ARB, &stringLength ) ); if( bGeomCompiled == 0 ) { char * tmpstr = (char*)malloc( stringLength + 1 ); - glGetInfoLogARB( geometryShader, stringLength, NULL, tmpstr ); + GLCALL( glGetInfoLogARB( geometryShader, stringLength, NULL, tmpstr ) ); puts( "Compiling Geometry Shader response follows:" ); puts( tmpstr ); free( tmpstr ); @@ -273,16 +273,22 @@ GLint bLinked; GLint stringLength; //Create the actual shader prgoram - iProgramID = glCreateProgramObjectARB(); + iProgramID = GLCALL( glCreateProgramObjectARB() ); //Attach the fragment/vertex shader to it. if( vertexShader ) - glAttachObjectARB( iProgramID, vertexShader ); + { + GLCALL( glAttachObjectARB( iProgramID, vertexShader ) ); + } if( fragmentShader ) - glAttachObjectARB( iProgramID, fragmentShader ); + { + GLCALL( glAttachObjectARB( iProgramID, fragmentShader ) ); + } if( geometryShader ) - glAttachObjectARB( iProgramID, geometryShader ); + { + GLCALL( glAttachObjectARB( iProgramID, geometryShader ) ); + } //Attempt to link the shader - glLinkProgramARB( iProgramID ); + GLCALL( glLinkProgramARB( iProgramID ) ); //If we're using a geometry shader, we have to do a little extra. if( CustomGLProgramParI && geometryShader ) @@ -292,7 +298,7 @@ int ierror, i; GLint imaxvert; - glGetIntegerv(GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT,&imaxvert); + GLCALL( glGetIntegerv(GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT,&imaxvert) ); if( (ierror = glGetError()) != 0 ) { puts( "ERROR: You cannot load a geometry shader when there are still errors left in OpenGL." ); @@ -310,13 +316,13 @@ //See if there were any errors. - glGetObjectParameterivARB( iProgramID, GL_OBJECT_LINK_STATUS_ARB, &bLinked ); - glGetObjectParameterivARB( iProgramID, GL_OBJECT_INFO_LOG_LENGTH_ARB, &stringLength ); + GLCALL( glGetObjectParameterivARB( iProgramID, GL_OBJECT_LINK_STATUS_ARB, &bLinked ) ); + GLCALL( glGetObjectParameterivARB( iProgramID, GL_OBJECT_INFO_LOG_LENGTH_ARB, &stringLength ) ); if ( stringLength > 1 || bLinked == 0 ) { char * tmpstr = (char*)malloc( stringLength + 1 ); - glGetInfoLogARB( iProgramID, stringLength, NULL, tmpstr ); + GLCALL( glGetInfoLogARB( iProgramID, stringLength, NULL, tmpstr ) ); puts( "Linking shaders. response follows:" ); puts( tmpstr ); free( tmpstr ); @@ -326,7 +332,7 @@ //Build the list of uniform tabs. int iNumUniforms; - glGetObjectParameterivARB( iProgramID, GL_OBJECT_ACTIVE_UNIFORMS_ARB, &iNumUniforms ); + GLCALL( glGetObjectParameterivARB( iProgramID, GL_OBJECT_ACTIVE_UNIFORMS_ARB, &iNumUniforms ) ); m_uniforms.clear(); for( int i = 0; i < iNumUniforms; ++i ) { @@ -334,10 +340,10 @@ int bufflen; GLint size; GLenum type; - glGetActiveUniformARB( iProgramID, i, 1024, &bufflen, &size, &type, buffer ); + GLCALL( glGetActiveUniformARB( iProgramID, i, 1024, &bufflen, &size, &type, buffer ) ); buffer[bufflen] = 0; -// m_uniforms[buffer] = glGetUniformLocationARB( iProgramID, buffer ); - int location = glGetUniformLocationARB( iProgramID, buffer ); +// m_uniforms[buffer] = GLCALL( glGetUniformLocationARB( iProgramID, buffer ) ); + int location = GLCALL( glGetUniformLocationARB( iProgramID, buffer ) ); m_uniforms.push_back( UniformMap(buffer, location) ); } return true; @@ -352,23 +358,23 @@ return; //If we can't destroy the object, then don't try. - glGetObjectParameterivARB(iProgramID, GL_OBJECT_ATTACHED_OBJECTS_ARB, &count); + GLCALL( glGetObjectParameterivARB(iProgramID, GL_OBJECT_ATTACHED_OBJECTS_ARB, &count) ); //Iterate through all children. if (count > 0) { objects = (GLhandleARB *)malloc(count*sizeof(GLhandleARB)); - glGetAttachedObjectsARB(iProgramID, count, NULL, objects); + GLCALL( glGetAttachedObjectsARB(iProgramID, count, NULL, objects) ); } else return; for ( i = 0; i < count; ++i) { - glDetachObjectARB(iProgramID, objects[i]); + GLCALL( glDetachObjectARB(iProgramID, objects[i]) ); } - glDeleteObjectARB(iProgramID); + GLCALL( glDeleteObjectARB(iProgramID) ); iProgramID = 0; free( objects ); @@ -418,7 +424,7 @@ { if ( !iProgramID ) return; - glUseProgramObjectARB( iProgramID ); + GLCALL( glUseProgramObjectARB( iProgramID ) ); GLERRORCHECK; //set attributes here @@ -433,7 +439,7 @@ void Shader::DeactivateShader() { - glUseProgramObjectARB( 0 ); + GLCALL( glUseProgramObjectARB( 0 ) ); GLERRORCHECK; } @@ -471,17 +477,17 @@ { case ShaderAttribute::TYPE_INT: case ShaderAttribute::TYPE_SAMPLER: - glUniform1iARB( location, x.value.iInt ); + GLCALL( glUniform1iARB( location, x.value.iInt ) ); break; case ShaderAttribute::TYPE_FLOAT: case ShaderAttribute::TYPE_FLOATV4: - glUniform4fvARB( location, 1, &x.value.fFloatV4[0] ); + GLCALL( glUniform4fvARB( location, 1, &x.value.fFloatV4[0] ) ); break; case ShaderAttribute::TYPE_MATRIX: - glUniformMatrix4fvARB(location, 1, 1, x.value.matrix); //transpase too + GLCALL( glUniformMatrix4fvARB(location, 1, 1, x.value.matrix) ); //transpase too break; case ShaderAttribute::TYPE_INT4: - glUniform4ivARB( location, 1, x.value.iInts ); + GLCALL( glUniform4ivARB( location, 1, x.value.iInts ) ); break; }; GLERRORCHECK; Modified: Mercury2/src/Texture.cpp =================================================================== --- Mercury2/src/Texture.cpp 2009-08-19 01:48:06 UTC (rev 500) +++ Mercury2/src/Texture.cpp 2009-08-19 23:50:34 UTC (rev 501) @@ -33,19 +33,19 @@ void Texture::Clean() { - if (m_textureID) glDeleteTextures(1, &m_textureID); + if (m_textureID) { GLCALL( glDeleteTextures(1, &m_textureID) ); } m_textureID = 0; } void Texture::LoadFromRaw() { if ( !m_raw ) return; - if ( !m_textureID ) glGenTextures(1, &m_textureID); + if ( !m_textureID ) { GLCALL( glGenTextures(1, &m_textureID) ); } // m_raw = raw; GLenum byteType = ToGLColorType( m_raw->m_ColorByteType ); - glBindTexture(GL_TEXTURE_2D, m_textureID); + GLCALL( glBindTexture(GL_TEXTURE_2D, m_textureID) ); /* glTexImage2D(GL_TEXTURE_2D, 0, @@ -57,17 +57,17 @@ GL_UNSIGNED_BYTE, m_raw->m_data); */ - gluBuild2DMipmaps( GL_TEXTURE_2D, byteType, m_raw->m_width, m_raw->m_height, byteType, GL_UNSIGNED_BYTE, m_raw->m_data ); + GLCALL( gluBuild2DMipmaps( GL_TEXTURE_2D, byteType, m_raw->m_width, m_raw->m_height, byteType, GL_UNSIGNED_BYTE, m_raw->m_data ) ); - glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST); - glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); + GLCALL( glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST) ); + GLCALL( glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR) ); -// glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); +// GLCALL( glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ) ); - glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + GLCALL( glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP) ); + GLCALL( glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP) ); -// gluBuild2DMipmaps( GL_TEXTURE_2D, 3, m_raw->m_width, m_raw->m_height, ByteType, GL_UNSIGNED_BYTE, m_raw->m_data ); +// GLCALL( gluBuild2DMipmaps( GL_TEXTURE_2D, 3, m_raw->m_width, m_raw->m_height, ByteType, GL_UNSIGNED_BYTE, m_raw->m_data ) ); SAFE_DELETE(m_raw); }; @@ -103,12 +103,12 @@ void Texture::BindTexture() { m_textureResource = GL_TEXTURE0+m_numActiveTextures; - glActiveTexture( m_textureResource ); - glClientActiveTextureARB(m_textureResource); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glEnable( GL_TEXTURE_2D ); - glBindTexture(GL_TEXTURE_2D, m_textureID); - glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); + GLCALL( glActiveTexture( m_textureResource ) ); + GLCALL( glClientActiveTextureARB(m_textureResource) ); + GLCALL( glEnableClientState(GL_TEXTURE_COORD_ARRAY) ); + GLCALL( glEnable( GL_TEXTURE_2D ) ); + GLCALL( glBindTexture(GL_TEXTURE_2D, m_textureID) ); + GLCALL( glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ) ); GLERRORCHECK; @@ -125,10 +125,10 @@ void Texture::UnbindTexture() { - glActiveTexture( m_textureResource ); - glClientActiveTextureARB(m_textureResource); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glDisable( GL_TEXTURE_2D ); + GLCALL( glActiveTexture( m_textureResource ) ); + GLCALL( glClientActiveTextureARB(m_textureResource) ); + GLCALL( glDisableClientState(GL_TEXTURE_COORD_ARRAY) ); + GLCALL( glDisable( GL_TEXTURE_2D ) ); GLERRORCHECK; Shader::RemoveAttribute( ssprintf("HG_Texture%d", m_numActiveTextures) ); @@ -172,12 +172,12 @@ m_path = "DYNATEXT"+name; ADD_ASSET_INSTANCE(Texture, m_path, this); - if (m_textureID == 0) glGenTextures( 1, &m_textureID ); - glBindTexture( GL_TEXTURE_2D, m_textureID ); - glCopyTexImage2D( GL_TEXTURE_2D, 0, ToGLColorType(cbt), 0, 0, width, height, 0 ); - glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST ); - glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glBindTexture( GL_TEXTURE_2D, 0 ); + if (m_textureID == 0) { GLCALL( glGenTextures( 1, &m_textureID ) ); } + GLCALL( glBindTexture( GL_TEXTURE_2D, m_textureID ) ); + GLCALL( glCopyTexImage2D( GL_TEXTURE_2D, 0, ToGLColorType(cbt), 0, 0, width, height, 0 ) ); + GLCALL( glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST ) ); + GLCALL( glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST) ); + GLCALL( glBindTexture( GL_TEXTURE_2D, 0 ) ); GLERRORCHECK; } Modified: Mercury2/src/TransformNode.cpp =================================================================== --- Mercury2/src/TransformNode.cpp 2009-08-19 01:48:06 UTC (rev 500) +++ Mercury2/src/TransformNode.cpp 2009-08-19 23:50:34 UTC (rev 501) @@ -23,7 +23,7 @@ const MercuryMatrix& matrix = GetGlobalMatrix(); m_modelView = ManipulateMatrix( matrix ); - glLoadMatrix( m_modelView ); + GLCALL( glLoadMatrix( m_modelView ) ); MercuryNode::RecursivePreRender(); } @@ -35,7 +35,7 @@ const MercuryMatrix& matrix = GetGlobalMatrix(); m_modelView = ManipulateMatrix( matrix ); - glLoadMatrix( m_modelView ); + GLCALL( glLoadMatrix( m_modelView ) ); } Modified: Mercury2/src/Viewport.cpp =================================================================== --- Mercury2/src/Viewport.cpp 2009-08-19 01:48:06 UTC (rev 500) +++ Mercury2/src/Viewport.cpp 2009-08-19 23:50:34 UTC (rev 501) @@ -23,14 +23,14 @@ FRUSTUM = &m_frustum; MercuryWindow* w = MercuryWindow::GetCurrentWindow(); - glViewport(m_minx, m_miny, (GLsizei)(w->Width()*m_xFactor), (GLsizei)(w->Height()*m_yFactor)); + GLCALL( glViewport(m_minx, m_miny, (GLsizei)(w->Width()*m_xFactor), (GLsizei)(w->Height()*m_yFactor)) ); //Load the frustum into the projection //"eye" position does not go into projection - glMatrixMode(GL_PROJECTION); - glLoadMatrix( m_frustum.GetMatrix() ); + GLCALL( glMatrixMode(GL_PROJECTION) ); + GLCALL( glLoadMatrix( m_frustum.GetMatrix() ) ); - glMatrixMode(GL_MODELVIEW); + GLCALL( glMatrixMode(GL_MODELVIEW) ); //Sets up the clipping frustum m_frustum.LookAt(EYE, LOOKAT, MercuryVertex(0,1,0)); @@ -41,18 +41,18 @@ FRUSTUM = &m_frustum; MercuryWindow* w = MercuryWindow::GetCurrentWindow(); - glViewport(m_minx, m_miny, (GLsizei)(w->Width()*m_xFactor), (GLsizei)(w->Height()*m_yFactor)); + GLCALL( glViewport(m_minx, m_miny, (GLsizei)(w->Width()*m_xFactor), (GLsizei)(w->Height()*m_yFactor)) ); //Load the frustum into the projection //"eye" position does not go into projection - glMatrixMode(GL_PROJECTION); - glLoadMatrix( m_frustum.GetMatrix() ); + GLCALL( glMatrixMode(GL_PROJECTION) ); + GLCALL( glLoadMatrix( m_frustum.GetMatrix() ) ); - glMatrixMode(GL_MODELVIEW); + GLCALL( glMatrixMode(GL_MODELVIEW) ); ShaderAttribute sa; sa.type = ShaderAttribute::TYPE_INT4; - glGetIntegerv(GL_VIEWPORT, sa.value.iInts); + GLCALL( glGetIntegerv(GL_VIEWPORT, sa.value.iInts) ); Shader::SetAttribute("HG_ViewPort", sa); sa.type = ShaderAttribute::TYPE_FLOATV4; @@ -87,11 +87,11 @@ void Viewport::PostRender(const MercuryMatrix& matrix) { - glPushMatrix(); -// glLoadIdentity(); + GLCALL( glPushMatrix() ); +// GLCALL( glLoadIdentity() ); glLoadMatrix( matrix ); CURRENTRENDERGRAPH->RenderAlpha(); - glPopMatrix(); + GLCALL( glPopMatrix() ); MercuryNode::PostRender(matrix); } Modified: Mercury2/src/X11Window.cpp =================================================================== --- Mercury2/src/X11Window.cpp 2009-08-19 01:48:06 UTC (rev 500) +++ Mercury2/src/X11Window.cpp 2009-08-19 23:50:34 UTC (rev 501) @@ -3,6 +3,8 @@ #include <MercuryInput.h> #include <MercuryPrefs.h> +#include <GLHeaders.h> + #define MOUSE_BTN_LEFT 1 #define MOUSE_BTN_RIGHT 3 #define MOUSE_BTN_CENTER 2 @@ -186,18 +188,19 @@ } XMapWindow(m_display, win); - glXMakeCurrent(m_display, win, ctx); + GLCALL( glXMakeCurrent(m_display, win, ctx) ); XFree(visinfo); m_window = win; m_renderCtx = ctx; - glEnable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); - glEnable(GL_NORMALIZE); + GLCALL( glEnable(GL_DEPTH_TEST) ); + GLCALL( glEnable(GL_CULL_FACE) ); + GLCALL( glEnable(GL_NORMALIZE) ); - glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + GLCALL( glEnable (GL_BLEND); ); + GLCALL( glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) ); } X11Window::~X11Window() @@ -363,7 +366,7 @@ void X11Window::Clear() { - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + GLCALL( glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) ); } void* X11Window::GetProcAddress(const MString& x) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |