I’m using a full-screen background texture. It’s stored in a 512×512 PNG file. When rendering it to the screen using glDrawTexfOES, for some reason I need to add a 32 point y-offset in order to make it align with the screen. Why?
glBindTexture(GL_TEXTURE_2D, backgroundTexture);
int backgroundRectangle[] = { 0, 480, 320, -480 }; // Handle origin at upper left
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, backgroundRectangle);
glColor4f(1, 1, 1, 1);
glDrawTexfOES(0, 32, 1, 320, 480);
The logical origin of textures on OpenGL is the lower left corner of the texture..
Your screen has a height of 480 pixels and the texture is 512 pixels in size. This won’t match without an offset.
To compensate for this you have to draw your texture using the 32 pixel offset. Let’s see how much: 512-480 is … you guessed it … 32. That’s where your offset comes from.
You can get around this by changing your texture-load code to align the image to the upper-left corner of the texture. Afterwards you don’t need the offset during rendering anymore. Instead it will move to your texture load function.
I for one would do this because textures only get loaded once and drawn quite a bit. It makes the hard to understand code (drawing) more readable. Not that such a code is difficult to understand, but I know from experience that these codes get messy and hard to understand over time..
You will not make anything faster though – such a change is only good for readability.