PDA

View Full Version : texture border support in hw?



Hampel
09-09-2004, 11:34 PM
Is there graphics hw shipping which supports the 1 pixel wide texture border around a pow2 texture?

That is, the texture is, for example, 34x34 pixels large and the texture border flag in glTexImage2D() set to 1 (instead of the usual 0). This is at least an OpenGL 1.1 feature.

I've tested it on a GeForce2MX which falls back to software texturing... :mad:

-NiCo-
09-09-2004, 11:37 PM
The NV GF6800 and ATI X800 series support this through the GL_ARB_texture_non_power_of_two extension.

Greetz,

Nico

Korval
09-09-2004, 11:41 PM
I hate to disappoint you, but ATi cards do not support NPOT textures. You need an NV4x-based chip for that (I'm so wanting one of those 6600's).

-NiCo-
09-09-2004, 11:54 PM
Hmm, looks like you're right. Glad I bought me a 6800 then ;)

Nico

Hampel
09-10-2004, 01:02 AM
But NPOT is not necessarily the same and not very common today ;) : you have to adjust the tex coords to achieve the texture border effect specified for basic OpenGL 1.0/1.1...

The most available seems to be GL_NV_texture_rectangle, but without mipmapping and only supported by NVidia (but back to GeForce256 cards)... :(

V-man
09-10-2004, 08:59 AM
Yes Nvidia advertizes NV_texture_rectangle while ATI has EXT_texture_rectangle, which are the same thing it seems.

As to your orginal question, the Gf2 had some issue with GL_CLAMP_TO_EDGE I think. Search the archives on this topic.

I think most programs used GL_CLAMP instead of GL_CLAMP_TO_EDGE or something like that...

jwatte
09-10-2004, 07:41 PM
Hampel seems to want border texels for a regular, conforming, power-of-two texture.

Yes, the GeForce 3 and up, but not the GeForce 4 MX, support this. ATI also started supporting this, although I'm unsure whether it's with then 8500 or 9500.

Because the GeForce 2 and lower, and the related GeForce 4 MX, do not support borders, NVIDIA "magically" turned GL_CLAMP into the behavior of GL_CLAMP_TO_EDGE, which caused some games whose QA all used GeForces to ship with horrible textur edge artifacts. That, in turn, meant that NVIDIA made CLAMP mean CLAMP_TO_EDGE even on newer cards (that support border) -- they now have a checkbox in the graphics control panel to control this behavior.

Korval
09-10-2004, 09:34 PM
Because the GeForce 2 and lower, and the related GeForce 4 MX, do not support borders, NVIDIA "magically" turned GL_CLAMP into the behavior of GL_CLAMP_TO_EDGEThat's not entirely true. Originally, the problem was that there was no CLAMP_TO_EDGE in the spec, so developers had no choice but to use CLAMP. The resulting bugs were quickly tossed to the dominant GL implementation at the time (re: nVidia), and they had little choice but to make GL_CLAMP do what GL_CLAMP_TO_EDGE did. The workaround lasted well past the days when GL_CLAMP_TO_EDGE_EXT existed, mostly because they have to support old code.

Also, to be honest, SGI dropped the ball on it. GL_CLAMP really should have had the functionality of GL_CLAMP_TO_EDGE, or there should have been a GL_CLAMP_TO_EDGE from day 1.

Hampel
09-11-2004, 02:58 AM
@V-man: I think, the GF2/GF2MX/GF4MX have problems with GL_ARB_clamp_to_border which drops them to software mode, too (just like the usage of border texels)

@jwatte: You are right, I want border texels for my conforming POT textures

@Korval: I don't know, why it took soooo long to come up with GL_EXT_clamp_to_edge and even loooooooooonger with GL_ARB_clamp_to_border! :confused: