Shadow works on one machine but not on another

Same code that uses shadow works on a machine with Quadro FX 4800. But on another laptop with GeForce GTX 285M I get the slew of print outs below and black screen.



If I disable shadow:

if(false)

{

pssmRenderer = new PssmShadowRenderer(assetManager, 10241,1);

pssmRenderer.setDirection(new Vector3f(-1, -1, -1).normalizeLocal());

viewPort.addProcessor(pssmRenderer);

}

The problem laptop can display scene, albeit without shadow.



How to work around this?







Aug 1, 2011 11:56:43 AM com.jme3.renderer.lwjgl.LwjglRenderer updateUniformLocation

INFO: Uniform g_CameraPosition is not declared in shader.

Aug 1, 2011 11:56:43 AM com.jme3.renderer.lwjgl.LwjglRenderer updateUniformLocation

INFO: Uniform g_WorldMatrix is not declared in shader.

Aug 1, 2011 11:56:43 AM com.jme3.renderer.lwjgl.LwjglRenderer updateUniformLocation

INFO: Uniform m_UseMaterialColors is not declared in shader.

Aug 1, 2011 11:56:43 AM com.jme3.renderer.lwjgl.LwjglRenderer updateUniformLocation

INFO: Uniform m_UseAlpha is not declared in shader.

Aug 1, 2011 11:56:43 AM com.jme3.renderer.lwjgl.LwjglRenderer updateShaderSourceData

WARNING: Bad compile of:

#define FILTER_MODE 1

#define HARDWARE_SHADOWS 1

#define PCFEDGE 5.0

#extension GL_ARB_texture_gather : enable



#ifdef HARDWARE_SHADOWS

#define SHADOWMAP sampler2DShadow

#define SHADOWCOMPAREOFFSET(tex,coord,offset) textureProjOffset(tex, coord, offset)

#define SHADOWCOMPARE(tex,coord) textureProj(tex, coord)

#define SHADOWGATHER(tex,coord) textureGather(tex, coord.xy, coord.z)

#else

#define SHADOWMAP sampler2D

#define SHADOWCOMPAREOFFSET(tex,coord,offset) step(coord.z, textureProjOffset(tex, coord, offset).r)

#define SHADOWCOMPARE(tex,coord) step(coord.z, textureProj(tex, coord).r)

#define SHADOWGATHER(tex,coord) step(coord.z, textureGather(tex, coord.xy))

#endif





#if FILTER_MODE == 0

#define GETSHADOW SHADOWCOMPARE

#define KERNEL 1

#elif FILTER_MODE == 1

#ifdef HARDWARE_SHADOWS

#define GETSHADOW SHADOWCOMPARE

#else

#define GETSHADOW Shadow_DoBilinear_2x2

#endif

#define KERNEL 1

#elif FILTER_MODE == 2

#define GETSHADOW Shadow_DoDither_2x2

#define KERNEL 1

#elif FILTER_MODE == 3

#define GETSHADOW Shadow_DoPCF

#define KERNEL 4

#elif FILTER_MODE == 4

#define GETSHADOW Shadow_DoPCF

#define KERNEL 8

#endif



out vec4 outFragColor;



uniform SHADOWMAP m_ShadowMap0;

uniform SHADOWMAP m_ShadowMap1;

uniform SHADOWMAP m_ShadowMap2;

uniform SHADOWMAP m_ShadowMap3;



uniform vec4 m_Splits;

uniform float m_ShadowIntensity;



in vec4 projCoord0;

in vec4 projCoord1;

in vec4 projCoord2;

in vec4 projCoord3;

in float shadowPosition;



float Shadow_BorderCheck(in vec2 coord){

// Fastest, “hack” method (uses 4-5 instructions)

vec4 t = vec4(coord.xy, 0.0, 1.0);

t = step(t.wwxy, t.xyzz);

return dot(t,t);

}



float Shadow_DoDither_2x2(in SHADOWMAP tex, in vec4 projCoord){

float border = Shadow_BorderCheck(projCoord.xy);

if (border > 0.0)

return 1.0;



ivec2 texSize = textureSize(tex, 0);

vec2 pixSize = 1.0 / vec2(texSize);



float shadow = 0.0;

ivec2 o = ivec2(mod(floor(gl_FragCoord.xy), 2.0));

shadow += SHADOWCOMPARE(tex, vec4(projCoord.xy+pixSize
(vec2(-1.5, 1.5)+o), projCoord.zw));

shadow += SHADOWCOMPARE(tex, vec4(projCoord.xy+pixSize*(vec2( 0.5, 1.5)+o), projCoord.zw));

shadow += SHADOWCOMPARE(tex, vec4(projCoord.xy+pixSize*(vec2(-1.5, -0.5)+o), projCoord.zw));

shadow += SHADOWCOMPARE(tex, vec4(projCoord.xy+pixSize*(vec2( 0.5, -0.5)+o), projCoord.zw));

shadow *= 0.25;

return shadow;

}



float Shadow_DoBilinear_2x2(in SHADOWMAP tex, in vec4 projCoord){

float border = Shadow_BorderCheck(projCoord.xy);

if (border > 0.0)

return 1.0;



ivec2 texSize = textureSize(tex, 0);

#ifdef GL_ARB_texture_gather

vec4 coord = vec4(projCoord.xyz / projCoord.w,0.0);

vec4 gather = SHADOWGATHER(tex, coord);

#else

vec4 gather = vec4(0.0);

gather.x = SHADOWCOMPAREOFFSET(tex, projCoord, ivec2(0, 0));

gather.y = SHADOWCOMPAREOFFSET(tex, projCoord, ivec2(1, 0));

gather.z = SHADOWCOMPAREOFFSET(tex, projCoord, ivec2(0, 1));

gather.w = SHADOWCOMPAREOFFSET(tex, projCoord, ivec2(1, 1));

#endif



vec2 f = fract( projCoord.xy * texSize );

vec2 mx = mix( gather.xz, gather.yw, f.x );

return mix( mx.x, mx.y, f.y );

}



float Shadow_DoPCF(in SHADOWMAP tex, in vec4 projCoord){

float pixSize = 1.0 / textureSize(tex,0).x;



float shadow = 0.0;

float border = Shadow_BorderCheck(projCoord.xy);

if (border > 0.0)

return 1.0;



float bound = KERNEL * 0.5 - 0.5;

bound *= PCFEDGE;

for (float y = -bound; y <= bound; y += PCFEDGE){

for (float x = -bound; x <= bound; x += PCFEDGE){

vec4 coord = vec4(projCoord.xy + vec2(x,y) * pixSize, projCoord.zw);

shadow += SHADOWCOMPARE(tex, coord);

}

}



shadow = shadow / (KERNEL * KERNEL);

return shadow;

}



void main(){

float shadow = 0.0;



if(shadowPosition < m_Splits.x){

shadow = GETSHADOW(m_ShadowMap0, projCoord0);

}else if( shadowPosition < m_Splits.y){

shadow = GETSHADOW(m_ShadowMap1, projCoord1);

}else if( shadowPosition < m_Splits.z){

shadow = GETSHADOW(m_ShadowMap2, projCoord2);

}else if( shadowPosition < m_Splits.w){

shadow = GETSHADOW(m_ShadowMap3, projCoord3);

}



shadow = shadow * m_ShadowIntensity + (1.0 - m_ShadowIntensity);

outFragColor = vec4(shadow, shadow, shadow, 1.0);

}







Aug 1, 2011 11:56:43 AM com.jme3.app.Application handleError

SEVERE: Uncaught exception thrown in Thread[LWJGL Renderer Thread,5,main]

com.jme3.renderer.RendererException: compile error in:ShaderSource[name=Common/MatDefs/Shadow/PostShadowPSSM15.frag, defines, type=Fragment] error:0(6) : warning C7547: extension GL_ARB_texture_gather not supported in profile fp40

0(69) : error C1115: unable to find compatible overloaded function “textureSize(sampler2DShadow, int)”

0(87) : error C1115: unable to find compatible overloaded function “textureSize(sampler2DShadow, int)”

0(93) : error C1115: unable to find compatible overloaded function “textureProjOffset(sampler2DShadow, vec4, ivec2)”

0(94) : error C1115: unable to find compatible overloaded function “textureProjOffset(sampler2DShadow, vec4, ivec2)”

0(95) : error C1115: unable to find compatible overloaded function “textureProjOffset(sampler2DShadow, vec4, ivec2)”

0(96) : error C1115: unable to find compatible overloaded function “textureProjOffset(sampler2DShadow, vec4, ivec2)”

0(105) : error C1115: unable to find compatible overloaded function “textureSize(sampler2DShadow, int)”

Try adding following



[java]

pssmRenderer.setFilterMode(PssmShadowRenderer.FilterMode.Bilinear);

pssmRenderer.setCompareMode(CompareMode.Software);

[/java]



and see if it helps.