Jump to content
  • Advertisement
Sign in to follow this  
Elastoman

OpenGL Problem with textures in 2D game

This topic is 2244 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 writing a 2D game, which involves drawing a lot of sprites. They are stored in one big image, which I load to texture.

I used GL_TEXTURE_RECTANGLE_NV, as described here http://www.gamedev.net/page/resources/_/technical/opengl/rendering-efficient-2d-sprites-in-opengl-using-r2429

It worked great on my desktop (although I have ATI videocard), but when I tried it on my laptop - nothing was painted.

So I tried GL_TEXTURE_2D and got the picture, but it's rendered too slow.

Can somebody give a hint how to make it work properly? All I need is drawing small rectangular pictures, but quite a lot of them.

Share this post


Link to post
Share on other sites
Advertisement
You can use glGetString(GL_EXTENSIONS) to return a string listing all of the extensions supported by the video driver. If the string "GL_NV_texture_rectangle" isn't in the list anywhere, then you can't use GL_TEXTURE_RECTANGLE_NV. Note that this, of course, is only relevant for deprecated GL (pre 3.0) which, judging by the code at the link you are trying to use, I assume is the case.

Also, if rendering using GL_TEXTURE_2D is slow, then you might want to call glGetString(GL_VENDOR). If the vendor string returned is for Microsoft, then your drivers are the software-only drivers installed by default with Windows, and you'll need to install updated drivers from your card manufacturer. This is often the culprit when performance of even simple tasks seems unreasonably slow. This would also possibly result in your desired extension not being supported, since the default Microsoft GL implementation doesn't support many extensions.

Share this post


Link to post
Share on other sites
It appeared to be an issue with laptop drivers described here: http://gregs-blog.com/2007/11/17/certain-notebook-ati-video-card-drivers-not-supporting-opengl-20-how-to-update-mobility-radeon-drivers/

I was able to upgrade OpenGL version from 1.1 to 3.3, and now both methods work well.

But I'm interested which is better to use so my game is supported by as many machines as possible. It's just a simple 2D game after all.

Share this post


Link to post
Share on other sites
Generally you will want to use GL_TEXTURE_2D and two triangles (or a quad).

GL_TEXTURE_RECTANGLE was originally used for a means of achieving non-power-of-two textures; now most modern hardware supports NPOT textures with GL_TEXTURE_2D.

Share this post


Link to post
Share on other sites
GL_TEXTURE_RECTANGLE was originally used for a means of achieving non-power-of-two textures; now most modern hardware supports NPOT textures with GL_TEXTURE_2D.
. . . and most hardware that doesn't, isn't worth your time to write demanding applications for, anyway.

Also remember to be careful of certain state changes, particularly binding. If you're binding a separate texture for each sprite, for instance, you can get substantial slowdowns anywhere, no matter what kind of texture or sampler you're using.

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!