Problem with textures in 2D game

Started by
3 comments, last by Geometrian 11 years, 8 months ago
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.
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.
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.
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.
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.

[size="1"]And a Unix user said rm -rf *.* and all was null and void...|There's no place like 127.0.0.1|The Application "Programmer" has unexpectedly quit. An error of type A.M. has occurred.
[size="2"]

This topic is closed to new replies.

Advertisement