I am working on a specific OpenGL project and have to make a decision: stick with NV_register_combiners, NV_texture_shaders and so on, and support gf4 hardware, or simply skip to ARB_vp/ARB_fp and gf fx/radeon?

I am quite new to vp and fp, but the same is the case for register combiners and texture shaders, and the project will have to be done in rather short time. What would you (advanced) guys recommend? I guess, once understood, vp and fp are easier and of course more powerful than dx 8 type NV extensions!?


[This message has been edited by JanHH (edited 01-15-2004).]

If the number of potential users isn’t that important, then go for ARB_fp. It’ll work on NVIDIA and ATI cards of the latest generation.

If the size of your market does matter, you’ll have to support anything at least back to a GeForce2, ATI Rage 128, and Intel i845, and forward to DX9 hardware, although how many stops you make on the way is up to you.

The NVIDIA extensions are NVIDIA specific, and a dying breed – the future clearly belongs to ARB_fp, and future more powerful ARB extensions such as the GLSlang.

I nearly made the decision to only use ARB_fp/ARB_vp, as it seems to be far more powerful and also a lot of easier to learn (compared to bothering with register combiners and texture shaders), and it’s unlikely that someone will buy a gf 4 card anyway . The market is rather small, it’s a client-specific application.


And what about glslang? I guess that’s about the same functionality as ARB_vp/ARB_fp, but not assembler but c style code? Is that what one should use?

And another question… I read that when using ARB_fragment_program on gf fx, you have 16 texture units to work with… does that really mean that I can bind 16 different textures at the same time and use all of them as input in my fragment program? for example, two normalization cube maps, one normap map, one gloss map and four color maps?


Yes, you can access up to 16 textures in a fragment program and up to 8 sets of texture coordinates on a GeForce FX video card.

Yes, GLslang is just like ARB_fp/ARB_vp but not assembler. Additionally GLslang hase some more advantages than ARB_fp/ARB_vp. I’d recommend you to learn GLslang although it is in an early stage.

thanks for answering… I tink I’ll start with ARB_fp, I am not afraid of assembler, and it seems to be VERY straightforward.

What I do not understand is LIT. I do not understand what it does in a vertex program (ok, it computes the light coefficients, but what is that ), and in a fragment program I do not understand it even more. can anyone help?


Used in vertex shader it will give you vertex lighting and used in fragment shader it will give you per-pixel lighting.

It’s all in the ARB_vp spec. . .

. . . but from what I understand. . .

The LIT operation should accept the dot product of the normal vector and the light vector for x, the dot product of the normal vector and the half-angle vector for y, and the specular exponent for z. In the result, the x component holds the value to multiply by the ambient light colour, the y component holds the value to multiply by the diffuse colour, and the z component holds the value to multiply by the specular colour.

thanks for your help… looks like there’s still a lot to learn left.