[osg-users] Shader problem on nvidia card

2010-12-22 Thread Aitor Ardanza
Hi,

I have a problem when I apply a shader to an object in osg. I tried it on two 
machines. One with an intel G41 graphics card, which does not give me any 
problem, and the other is a NVidia GTX 480, which gives me the problem. When 
osg try to compile the shader, skip the following error:

FRAGMENT glCompileShader  FAILED
VERTEX glCompileShader  FAILED
glLinkProgram  FAILED
Error: In Texture::Extensions::setupGLExtensions(..) OpenGL version test 
failed, requires valid graphics context.

Vertex program:

Code:

uniform mat4 boneMatrices[2];

attribute vec4 weights;
attribute vec4 matrixIndices;
attribute float numBones;

varying vec2 Texcoord;
varying vec3 ViewDirection;
varying vec3 LightDirection;
varying vec3 Normal;

void main( void )
{
vec4 normal  = vec4( gl_Normal.xyz, 0.0 );
vec4 tempPosition= vec4( 0.0, 0.0, 0.0, 0.0 );
vec4 tempNormal  = vec4( 0.0, 0.0, 0.0, 0.0 );
for(int i = 0; i  int(numBones); i++  )
{
// Apply influence of bone i
tempPosition += vec4((boneMatrices[int(matrixIndices[i])] * 
gl_Vertex).xyz,1.0) * weights[i];

// Transform normal by bone i
tempNormal += (boneMatrices[int(matrixIndices[i])] * normal) * 
weights[i];
}

gl_Position = gl_ModelViewProjectionMatrix * tempPosition;
Texcoord= gl_MultiTexCoord0.xy;

vec4 fvObjectPosition =  gl_ModelViewMatrix * gl_Vertex;
   
ViewDirection  = normalize(-fvObjectPosition.xyz);
LightDirection = normalize(gl_LightSource[0].position.xyz - 
fvObjectPosition.xyz);
Normal = normalize(gl_NormalMatrix * tempNormal.xyz);
}



Fragment program:

Code:

uniform sampler2D baseMap;

varying vec3 ViewDirection;
varying vec3 LightDirection;
varying vec3 Normal;
varying vec2 Texcoord;

void main( void )
{
float NdotL = max(dot(Normal, LightDirection), 0.0);
vec4 diffuse = NdotL * gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse;

vec4 ambient = gl_FrontMaterial.ambient * gl_LightSource[0].ambient;
vec4 globalAmbient = gl_LightModel.ambient * gl_FrontMaterial.ambient;

vec3  fvReflection = normalize( ( ( 2.0 * Normal ) * NdotL ) - 
LightDirection ); 
float fRDotV   = max( 0.0, dot( fvReflection, ViewDirection ) );
vec4 specular = gl_FrontMaterial.specular * gl_LightSource[0].specular * 
pow(fRDotV,200.0);

vec4 color =  diffuse + globalAmbient + ambient + specular;

gl_FragColor = texture2D( baseMap, Texcoord ) * color;
}



I fail to understand what may be the problem... any idea?

Thank you!

Cheers,
Aitor

--
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=35085#35085





___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] Shader problem on nvidia card

2010-12-22 Thread Robert Osfield
Hi Aitor,

The warning you are getting OpenGL version test failed, requires
valid graphics context. suggests that you are trying to do rendering
from a thread that doesn't have a graphics context current.

I know nothing about how you are setting up your graphics context or
how you manage you frame loop so I can do little to advice beyond
suggesting that you try the same scene graph with a standard OSG
example that is known to set up graphics contexts correctly and then
see how you can fix your application to match this.

Robert.

On Wed, Dec 22, 2010 at 2:56 PM, Aitor Ardanza aitoralt...@terra.es wrote:
 Hi,

 I have a problem when I apply a shader to an object in osg. I tried it on two 
 machines. One with an intel G41 graphics card, which does not give me any 
 problem, and the other is a NVidia GTX 480, which gives me the problem. When 
 osg try to compile the shader, skip the following error:

 FRAGMENT glCompileShader  FAILED
 VERTEX glCompileShader  FAILED
 glLinkProgram  FAILED
 Error: In Texture::Extensions::setupGLExtensions(..) OpenGL version test 
 failed, requires valid graphics context.

 Vertex program:

 Code:

 uniform mat4 boneMatrices[2];

 attribute vec4 weights;
 attribute vec4 matrixIndices;
 attribute float numBones;

 varying vec2 Texcoord;
 varying vec3 ViewDirection;
 varying vec3 LightDirection;
 varying vec3 Normal;

 void main( void )
 {
    vec4 normal      = vec4( gl_Normal.xyz, 0.0 );
    vec4 tempPosition    = vec4( 0.0, 0.0, 0.0, 0.0 );
    vec4 tempNormal  = vec4( 0.0, 0.0, 0.0, 0.0 );
    for(int i = 0; i  int(numBones); i++  )
    {
        // Apply influence of bone i
        tempPosition += vec4((boneMatrices[int(matrixIndices[i])] * 
 gl_Vertex).xyz,1.0) * weights[i];

        // Transform normal by bone i
        tempNormal += (boneMatrices[int(matrixIndices[i])] * normal) * 
 weights[i];
    }

    gl_Position = gl_ModelViewProjectionMatrix * tempPosition;
    Texcoord    = gl_MultiTexCoord0.xy;

    vec4 fvObjectPosition =  gl_ModelViewMatrix * gl_Vertex;

    ViewDirection  = normalize(-fvObjectPosition.xyz);
    LightDirection = normalize(gl_LightSource[0].position.xyz - 
 fvObjectPosition.xyz);
    Normal         = normalize(gl_NormalMatrix * tempNormal.xyz);
 }



 Fragment program:

 Code:

 uniform sampler2D baseMap;

 varying vec3 ViewDirection;
 varying vec3 LightDirection;
 varying vec3 Normal;
 varying vec2 Texcoord;

 void main( void )
 {
    float NdotL = max(dot(Normal, LightDirection), 0.0);
    vec4 diffuse = NdotL * gl_FrontMaterial.diffuse * 
 gl_LightSource[0].diffuse;

    vec4 ambient = gl_FrontMaterial.ambient * gl_LightSource[0].ambient;
    vec4 globalAmbient = gl_LightModel.ambient * gl_FrontMaterial.ambient;

    vec3  fvReflection     = normalize( ( ( 2.0 * Normal ) * NdotL ) - 
 LightDirection );
    float fRDotV           = max( 0.0, dot( fvReflection, ViewDirection ) );
    vec4 specular = gl_FrontMaterial.specular * gl_LightSource[0].specular * 
 pow(fRDotV,200.0);

    vec4 color =  diffuse + globalAmbient + ambient + specular;

    gl_FragColor = texture2D( baseMap, Texcoord ) * color;
 }



 I fail to understand what may be the problem... any idea?

 Thank you!

 Cheers,
 Aitor

 --
 Read this topic online here:
 http://forum.openscenegraph.org/viewtopic.php?p=35085#35085





 ___
 osg-users mailing list
 osg-users@lists.openscenegraph.org
 http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org