Jump to content
  • Advertisement
Sign in to follow this  
mmakrzem

OpenGL OpenGL texture managing help needed

This topic is 4312 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I'm trying to figure out how to create a texture manager in OpenGL. Previously I worked with DirectX and what I did there was the following: I created n number of containers that could t number of triangles of a specific type. ie a type would be defined by the material, texture etc used. everytime I render an object, it would be subdivided up into the appropriate container(s). when a container became full then I would empty it by rendering all items in the container to the screen. if at any point I needed more then n containers since a unique triangle was requested to be rendered then I would look through the n current containers and find the container that has the most amount of triangles in it. I would then render all items in that container and use it to hold the new triangle type. Now I was thinking of implementing the same sort of thing in OpenGL but I don't think I can because of the way that OpenGL works in comparison to DirectX. So my question is, how can I organize my data that I want to render, so that I minimize the number of texture loading/binding calls that are required to be done during each frame rendered. As an example, say that I have 3 objects made of of textures A, B, and C. What I would like to do is bind texture A, render each of the pieces of all the objects that contain texture A. Then bind texture B and render all the pieces in the scene that use texture B. Repeat for texture C. This way I am not switching multiple times between textures in one render call. Also in OpenGL, is there anyway to know how many textures I can stuff into the video memory at one time? For example in the previous case, if I can put textures A B and C all into the video memory at the same time, then it shouldn't matter how many times I bind to each one since the data doesn't have to transfer over to the graphics card each time.

Share this post


Link to post
Share on other sites
Advertisement
Nope, there is no way to know, once you upload the data to opengl (via the glTexImage() function) what happens to it is driver dependant.

It will probably endup in VRAM at "somepoint" however the swapping in and out operations are handled by the driver (I believe they use a Least-recently-used scheme to decide what stays in VRAM and what doesn't when space is needed) as is the "somepoint", it could be on first bind after the glTexImage call, it could be right after it, no one knows...

The scheme you outlined above however will work just as well with OGL as it did with DX, batching is still very much the order of the day.

To be honest, I'm not sure what 'differences' you are coming across between how OGL and D3D handle texture uploads...

Share this post


Link to post
Share on other sites
Quote:
Original post by mmakrzem
Could you show me some pseudo code (or real code would be even better), on how I can batch render calls in OpenGL.


Not sure, but I am assuming he means use one texture call glBindTexture() and draw all polygons that use that texture with each object glDraw*(). And then move onto the next object and repeat as needed... That's my best guess.

Share this post


Link to post
Share on other sites
That's exactly what I am trying to achieve however I don't know how to structure my code so that I can "find" all polygons that use a specific texture/material. I don't want to search through all my scene objects for each texture/material since this will kill performance.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!