I’m back re-writing some of the code in my engine and I something just occurred to me. When I draw each GUI element, I’m setting up the matrices and setting the Ortho mode:
void hbGuiSplashScreen::Render() { HBfloat texMinX, texMinY, texMaxX, texMaxY; glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); mMaterial->GetTextureCoordinates(texMinX, texMinY, texMaxX, texMaxY); glEnable(GL_TEXTURE_2D); glBindTexture( GL_TEXTURE_2D, mMaterial->GetTexture()); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); // Initialise the model matrix. glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); glOrtho(0, 640, 0, 480, -1.0, 1.0); glDisable(GL_DEPTH_TEST); glBegin(GL_QUADS); glTexCoord2f(texMinX, texMaxY); glVertex2f(mPosX, mPosY); glTexCoord2f(texMaxX, texMaxY); glVertex2f(mPosX+mSizeX, mPosY); glTexCoord2f(texMaxX, texMinY); glVertex2f(mPosX+mSizeX, mPosY+mSizeY); glTexCoord2f(texMinX, texMinY); glVertex2f(mPosX, mPosY+mSizeY); glEnd(); glEnable(GL_DEPTH_TEST); // Restore the projection matrix. glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); glDisable(GL_TEXTURE_2D); glDisable(GL_BLEND); }
I was wondering if this was the inefficient way of doing it. Do you guys do this or do the following:
Start 3D Frame
Render 3D World
End 3D Frame
Start 2D Frame (set up matrices and set ortho)
Render 2D Objects (GUI)
End 2D Frame
Is there a “best” way of doing this?
Thanks