Jump to content

  • Log In with Google      Sign In   
  • Create Account


is glBindTexture() not efficency ?


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
2 replies to this topic

#1 lanhaiou   Members   -  Reputation: 101

Like
0Likes
Like

Posted 19 March 2012 - 05:19 AM

Hello,

I am trying to write a tile based 2D game using openGL, and I'm new to openGL..
I heard that glBindTexture() is not efficency and we'd better to bind texture only one time and drawing all the staff using this texture(this texture

constains all the tiles we need).
so I have 2 questions, could anybody help? thanks very much!
1\ Is this description above right ?
2\ Is the following Game logic the right way to rendering a game with good efficency?
if not, could I have some indication? thanks!

/* this render() is called every 30 millisecond to render the game.
there may be about 2000 tiles need to be rendered one time. */

render()
{
glEnable2D;
/*this texture contains all the tiles needed in the game*/
glBindTexture(GL_TEXTURE_2D, mTexture);

glClear();
for(...)// the drawing loop to draw all the staff
{
/* draw the needed tiles from the same texture */
glBegin();
//drawing...
glEnd();
}
SwapBuffers();
glDisable2D;
}

Thanks!

Sponsor:

#2 samoth   Crossbones+   -  Reputation: 4643

Like
1Likes
Like

Posted 19 March 2012 - 05:34 AM

glBindTexture will likely cause a pipeline stall at the next draw call. Insofar, glBindTexture is not inefficient itself, but using it too often is. I say "likely" because it is possible that it does not cause a stall, depending on the hardware (but you have to assume the worst case, not the best case).

On the other hand, glBegin/glEnd is not efficient for drawing thousands of tiles (i.e. single quads) either.

What you want to do ideally is bind a texture once, bind a vertex buffer, and draw your 2000 quads with one call to glDrawElements. Even using a plain old vertex array (i.e. not a buffer object) would be much preferrable, because it's much more efficient for the GL to upload that block of data.

#3 lanhaiou   Members   -  Reputation: 101

Like
0Likes
Like

Posted 19 March 2012 - 06:12 AM

Thank you very much !Posted Image

glBindTexture will likely cause a pipeline stall at the next draw call. Insofar, glBindTexture is not inefficient itself, but using it too often is. I say "likely" because it is possible that it does not cause a stall, depending on the hardware (but you have to assume the worst case, not the best case).

On the other hand, glBegin/glEnd is not efficient for drawing thousands of tiles (i.e. single quads) either.

What you want to do ideally is bind a texture once, bind a vertex buffer, and draw your 2000 quads with one call to glDrawElements. Even using a plain old vertex array (i.e. not a buffer object) would be much preferrable, because it's much more efficient for the GL to upload that block of data.






Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS