Sign in to follow this  
Elastoman

OpenGL Problem with textures in 2D game

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
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
[quote name='mattdesl' timestamp='1343667942' post='4964550']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.[/quote]. . . 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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this