PDA

View Full Version : Anyone seen this error before?



PickleWorld
02-28-2006, 12:19 PM
I am trying to complie and link an OpenGL shader on a Nvidia Quadro 3000 (81.67 driver) and getting the following error...


<stdlib><9487> : error C5100: unknown semantics "FACE" specified for "gl_FrontFacing"The shader has the following line in it...

if (!gl_FrontFacing) normal = -normal;Now I assume the error is from this line but what does it mean "semantics "FACE""??

Relic
02-28-2006, 11:15 PM
That's in a fragment shader, right?
Sounds like the chip on that board doesn't support gl_FrontFacing.
In that case here's a trick for a workaround by "abusing" a normally unused color varying.

In the vertex shader add

gl_FrontSecondaryColor = vec4(1.0);
gl_BackSecondaryColor = vec4(0.0);In the fragment shader replace the if (!gl_FrontFacing) with

if (gl_SecondaryColor.r < 0.5)
{
normal = -normal;
}

PickleWorld
03-01-2006, 05:42 AM
Sounds like the chip on that board doesn't support gl_FrontFacing
That is the first thing that crossed my mind but its a pretty new Nvidia card and its a pretty odd error for a call thats not supported... so I thought I would ask.

Thanks for the tip, I will give it a try.

Relic
03-01-2006, 05:55 AM
>>but its a pretty new Nvidia card<<
Not really. According to this document it's still based on the previous chip generation. http://developer.nvidia.com/object/nv_ogl2_support.html
The workaround is mentioned in there as well.

PickleWorld
03-01-2006, 07:06 AM
You are correct sir... straight out of the PDF:



The built-in fragment shader varying parameter gl_FrontFacing is supported by
GeForce 6 Series and NV4xGL-based Quadro FX GPUs but not GeForce FX and
NV3xGL-based Quadro FX GPUs.
and the 3000 is indeed a NV3xGL-based Quadro card. Thanks.

PickleWorld
03-03-2006, 12:05 PM
Relic one more quick question, in order to get that work around to work you need to call:

glEnable(GL_VERTEX_PROGRAM_TWO_SIDE);Which from the docs I can find allows you to use gl_BackColor and gl_BackSecondaryColor in your vertex programs.

Does it do anything else? In other words, are there any side effects I need to be watching here or special cases I need to be handling?

knackered
03-04-2006, 09:16 AM
Why doesn't it just pick up the two sided lighting model parameter as specified by:-
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 1);
???
Why a new state token?

Relic
03-06-2006, 05:07 AM
That's not "new", it's six years old. ;) I don't know why the vertex_program specs haven't reused the light model state either.
I think it really only enables the back color routing from vertex to fragment shader.