Detecting ability to texture with arbitrary sizes.

Is searching for “GL_ARB_texture_non_power_of_two” in the extensions info string the best way to determine whether or not a driver can handle textures of arbitrary pixel width and height?

Or check the version - 2.0 or greater supports non power of two textures.

Also, depending on your requirments, EXT_TEXTURE_RECTANGLE is a commonly supported extension.

Thanks for the 2.0 tip.

Next question: What about the dimentions of an FBO?

One of my test machines is an NVIDIA GeForce FX 5700 Ultra.

Which seems to support arbitrary dimentions. It doesn’t mention “GL_ARB_texture_non_power_of_two” in the extensions list, but it’s opengl version is 2.0.3. glTexImage2D() doesn’t cause an error when the dimentions are not powers of 2.

However, when a non-power-of-2 texture is attached to an FBO via glFramebufferTexture2DEXT(), glCheckFramebufferStatusEXT() reports an error: GL_FRAMEBUFFER_UNSUPPORTED_EXT.

The FBO works fine with textures that are a power of 2. (other machines have no problem either way, it is just this card)

Cany anyone think of a way to check the extensions for that limitation?

Update: For now, I am determining whether or not an FBO can handle textures with dimensions that are not powers of 2 by writing my own test function.

A test function which… (get ready for it) attempts to attach a texture to an FBO, with dimensions that are not powers of 2.

If there is no other elegant way of determining it, then I will just go with that.

Since a lot of people around here seem to be using FBOs, I thought you all might want to know about this issue.


One more problem:

I have another machine with a Radeon card that supports only OpenGL version 1.4 and it’s extensions string does not mention power of 2 anywhere.

However, it is capable of working with arbitrary sized images.

So, it ends up hamstringing itself with inflated textures unnecessarily.

There has to be a well-established method for making this determination! What is it?

Beware, in fact it is exposed as GL_ARB_texture_non_power_of_two (instead of GL_EXT_ ). And then there is the *_texture_rectangle extensions which are similar, and have better support on ATI cards.
what Radeon card is it precisely ?

Unfortunately, texture rectangles do not support mipmapping.

How does everyone deal with this? Does everyone just use textures that are sized a power of two and leave it at that?