I think I actually computed the attenuation in the fragment shader, before I changed to the texture attenuation. And since if you have a texture of size 512x512 as an attenuation map, you can do 3d attenuation with just the one 2d texture. I think that's kind of handy and I actually need the accurate falloff, if I want to project shadow volumes to the light range. But I don't do that atm. so that's not a necessity. Btw. this has been bugging me for some time: does ATI have branching support in any extension for shaders/programs, since I can't find any :\ The ARB_vertex_program doesn't support them, and I haven't seen any in EXT_vertex_shader :\ I know that NV_vertex_program_x_x or what ever they're called ^_^ supports brancing, but ATI seems to support it only in D3D9 as predefined behaviour, that is non-dynamic. Or am I wrong, does ATI have support for brancing in some extension, have I missed it?