Android shader renderer exception

My problem device ‘s CPU is Marvell PXA920,GPU is VIVANTE GC530,other device haven’t this problem.But my device is not more ,Maybe this problem will appear in other android devices

after logcat:

E/OGLESShaderRenderer( 3936): Errooooooooooot(9)

W/OGLESShaderRenderer( 3936): WARNING OGLESShaderRenderer 11:52:23 Bad compile of:

W/OGLESShaderRenderer( 3936): #define DIFFUSEMAP 1

W/OGLESShaderRenderer( 3936): #define MATERIAL_COLORS 1

W/OGLESShaderRenderer( 3936): #ifdef SPHERE_MAP

W/OGLESShaderRenderer( 3936): #define ENVMAP sampler2D

W/OGLESShaderRenderer( 3936): #define TEXENV texture2D

W/OGLESShaderRenderer( 3936): #else

W/OGLESShaderRenderer( 3936): #define ENVMAP samplerCube

W/OGLESShaderRenderer( 3936): #define TEXENV textureCube

W/OGLESShaderRenderer( 3936): #endif

W/OGLESShaderRenderer( 3936):

W/OGLESShaderRenderer( 3936): // converts a normalized direction vector

W/OGLESShaderRenderer( 3936): // into a texture coordinate for fetching

W/OGLESShaderRenderer( 3936): // texel from a sphere map

W/OGLESShaderRenderer( 3936): vec2 Optics_SphereCoord(in vec3 dir){

W/OGLESShaderRenderer( 3936): float dzplus1 = dir.z + 1.0;

W/OGLESShaderRenderer( 3936):

W/OGLESShaderRenderer( 3936): // compute 1/2p

W/OGLESShaderRenderer( 3936): // NOTE: this simplification only works if dir is normalized.

W/OGLESShaderRenderer( 3936): float inv_two_p = 1.414 * sqrt(dzplus1);

W/OGLESShaderRenderer( 3936): //float inv_two_p = sqrt(dir.x * dir.x + dir.y * dir.y + dzplus1 *

dzplus1);

W/OGLESShaderRenderer( 3936): inv_two_p *= 2.0;

W/OGLESShaderRenderer( 3936): inv_two_p = 1.0 / inv_two_p;

W/OGLESShaderRenderer( 3936):

W/OGLESShaderRenderer( 3936): // compute texcoord

W/OGLESShaderRenderer( 3936): return (dir.xy * vec2(inv_two_p)) + vec2(0.5);

W/OGLESShaderRenderer( 3936): }

W/OGLESShaderRenderer( 3936):

W/OGLESShaderRenderer( 3936): vec4 Optics_GetEnvColor(in ENVMAP envMap, in vec3 dir){

W/OGLESShaderRenderer( 3936): #ifdef SPHERE_MAP

W/OGLESShaderRenderer( 3936): return texture2D(envMap, Optics_SphereCoord(dir));

W/OGLESShaderRenderer( 3936): #else

W/OGLESShaderRenderer( 3936): return textureCube(envMap, dir);

W/OGLESShaderRenderer( 3936): #endif

W/OGLESShaderRenderer( 3936): }

W/OGLESShaderRenderer( 3936):

W/OGLESShaderRenderer( 3936): #if (defined(PARALLAXMAP) || (defined(NORMALMAP_PARALLAX) && defined(N

ORMALMAP))) && !defined(VERTEX_LIGHTING)

W/OGLESShaderRenderer( 3936): vec2 steepParallaxOffset(sampler2D parallaxMap, vec3 vViewDir,vec2

texCoord,float parallaxScale){

W/OGLESShaderRenderer( 3936): vec2 vParallaxDirection = normalize( vViewDir.xy );

W/OGLESShaderRenderer( 3936):

W/OGLESShaderRenderer( 3936): // The length of this vector determines the furthest amount of

displacement: (Ati’s comment)

W/OGLESShaderRenderer( 3936): float fLength = length( vViewDir );

W/OGLESShaderRenderer( 3936): float fParallaxLength = sqrt( fLength * fLength - vViewDir.z *

vViewDir.z ) / vViewDir.z;

W/OGLESShaderRenderer( 3936):

W/OGLESShaderRenderer( 3936): // Compute the actual reverse parallax displacement vector: (A

ti’s comment)

W/OGLESShaderRenderer( 3936): vec2 vParallaxOffsetTS = vParallaxDirection * fParallaxLength;



W/OGLESShaderRenderer( 3936):

W/OGLESShaderRenderer( 3936): // Need to scale the amount of displacement to account for dif

ferent height ranges

W/OGLESShaderRenderer( 3936): // in height maps. This is controlled by an artist-editable pa

rameter: (Ati’s comment)

W/OGLESShaderRenderer( 3936): parallaxScale *=0.3;

W/OGLESShaderRenderer( 3936): vParallaxOffsetTS *= parallaxScale;

W/OGLESShaderRenderer( 3936):

W/OGLESShaderRenderer( 3936): vec3 eyeDir = normalize(vViewDir).xyz;

W/OGLESShaderRenderer( 3936):

W/OGLESShaderRenderer( 3936): float nMinSamples = 6.0;

W/OGLESShaderRenderer( 3936): float nMaxSamples = 1000.0 * parallaxScale;

W/OGLESShaderRenderer( 3936): float nNumSamples = mix( nMinSamples, nMaxSamples, 1.0 - eyeDi

r.z ); //In reference shader: int nNumSamples = (int)(lerp( nMinSamples, nMaxSamples, dot( eyeDirW

S, N ) ));

W/OGLESShaderRenderer( 3936): float fStepSize = 1.0 / nNumSamples;

W/OGLESShaderRenderer( 3936): float fCurrHeight = 0.0;

W/OGLESShaderRenderer( 3936): float fPrevHeight = 1.0;

W/OGLESShaderRenderer( 3936): float fNextHeight = 0.0;

W/OGLESShaderRenderer( 3936): float nStepIndex = 0.0;

W/OGLESShaderRenderer( 3936): vec2 vTexOffsetPerStep = fStepSize * vParallaxOffsetTS;

W/OGLESShaderRenderer( 3936): vec2 vTexCurrentOffset = texCoord;

W/OGLESShaderRenderer( 3936): float fCurrentBound = 1.0;

W/OGLESShaderRenderer( 3936): float fParallaxAmount = 0.0;

W/OGLESShaderRenderer( 3936):

W/OGLESShaderRenderer( 3936): while ( nStepIndex < nNumSamples && fCurrHeight <= fCurrentBou

nd ) {

W/OGLESShaderRenderer( 3936): vTexCurrentOffset -= vTexOffsetPerStep;

W/OGLESShaderRenderer( 3936): fPrevHeight = fCurrHeight;

W/OGLESShaderRenderer( 3936):

W/OGLESShaderRenderer( 3936):

W/OGLESShaderRenderer( 3936): #ifdef NORMALMAP_PARALLAX

W/OGLESShaderRenderer( 3936): //parallax map is stored in the alpha channel of the no

rmal map

W/OGLESShaderRenderer( 3936): fCurrHeight = texture2DLod( parallaxMap, vTexCurrentOff

set,1.0).a;

W/OGLESShaderRenderer( 3936): #else

W/OGLESShaderRenderer( 3936): //parallax map is a texture

W/OGLESShaderRenderer( 3936): fCurrHeight = texture2DLod( parallaxMap, vTexCurrentOff

set,1.0).r;

W/OGLESShaderRenderer( 3936): #endif

W/OGLESShaderRenderer( 3936):

W/OGLESShaderRenderer( 3936): fCurrentBound -= fStepSize;

W/OGLESShaderRenderer( 3936): nStepIndex+=1.0;

W/OGLESShaderRenderer( 3936): }

W/OGLESShaderRenderer( 3936): vec2 pt1 = vec2( fCurrentBound, fCurrHeight );

W/OGLESShaderRenderer( 3936): vec2 pt2 = vec2( fCurrentBound + fStepSize, fPrevHeight );

W/OGLESShaderRenderer( 3936):

W/OGLESShaderRenderer( 3936): float fDelta2 = pt2.x - pt2.y;

W/OGLESShaderRenderer( 3936): float fDelta1 = pt1.x - pt1.y;

W/OGLESShaderRenderer( 3936):

W/OGLESShaderRenderer( 3936): float fDenominator = fDelta2 - fDelta1;

W/OGLESShaderRenderer( 3936):

W/OGLESShaderRenderer( 3936): fParallaxAmount = (pt1.x * fDelta2 - pt2.x * fDelta1 ) / fDeno

minator;

W/OGLESShaderRenderer( 3936):

W/OGLESShaderRenderer( 3936): vec2 vParallaxOffset = vParallaxOffsetTS * (1.0 - fParallaxAmo

unt );

W/OGLESShaderRenderer( 3936): return texCoord - vParallaxOffset;

W/OGLESShaderRenderer( 3936): }

W/OGLESShaderRenderer( 3936):

W/OGLESShaderRenderer( 3936): vec2 classicParallaxOffset(sampler2D parallaxMap, vec3 vViewDir,ve

c2 texCoord,float parallaxScale){

W/OGLESShaderRenderer( 3936): float h;

W/OGLESShaderRenderer( 3936): h = texture2D(parallaxMap, texCoord).a;

W/OGLESShaderRenderer( 3936): #ifdef NORMALMAP_PARALLAX

W/OGLESShaderRenderer( 3936): //parallax map is stored in the alpha channel of the no

rmal map

W/OGLESShaderRenderer( 3936): h = te

D/KeyguardViewMediator( 1349): setHidden false

D/PowerManagerService( 1349): setScreenBrightnessOverride -1

D/PowerManagerService( 1349): setButtonBrightnessOverride -1

D/KeyguardViewMediator( 1349): setHidden false

D/KeyguardViewMediator( 1349): setHidden false

D/PowerManagerService( 1349): setScreenBrightnessOverride -1

D/PowerManagerService( 1349): setButtonBrightnessOverride -1

D/PowerManagerService( 1349): setScreenBrightnessOverride -1

D/PowerManagerService( 1349): setButtonBrightnessOverride -1

W/dalvikvm( 3936): threadid=7: thread exiting with uncaught exception (group=0x4001d830)

I/ActivityThread( 3936): enter process activity msg = 125

I/ActivityThread( 3936): exit process activity msg = 125

E/AndroidHarness( 3936): Exception thrown in Thread[GLThread 9,5,main]

E/AndroidHarness( 3936): com.jme3.renderer.RendererException: compile error in:ShaderSource[name=Com

mon/MatDefs/Light/Lighting.frag, defines, type=Fragment] error:(37:0) : error : Not expected token(’

&&’) in expression.

E/AndroidHarness( 3936): (149:0) : error : Not expected token(’&&’) in expression.

E/AndroidHarness( 3936): (255:0) : error : Not expected token(’&&’) in expression.

E/AndroidHarness( 3936):

E/AndroidHarness( 3936): at com.jme3.renderer.android.OGLESShaderRenderer.updateShaderSourceD

ata(OGLESShaderRenderer.java:1055)

E/AndroidHarness( 3936): at com.jme3.renderer.android.OGLESShaderRenderer.updateShaderData(OG

LESShaderRenderer.java:1100)

E/AndroidHarness( 3936): at com.jme3.renderer.android.OGLESShaderRenderer.setShader(OGLESShad

erRenderer.java:1205)

E/AndroidHarness( 3936): at com.jme3.material.Material.renderMultipassLighting(Material.java:

799)

E/AndroidHarness( 3936): at com.jme3.material.Material.render(Material.java:1028)

E/AndroidHarness( 3936): at com.jme3.renderer.RenderManager.renderGeometry(RenderManager.java

:658)

E/AndroidHarness( 3936): at com.jme3.renderer.queue.RenderQueue.renderGeometryList(RenderQueu

e.java:299)

E/AndroidHarness( 3936): at com.jme3.renderer.queue.RenderQueue.renderQueue(RenderQueue.java:

351)

E/AndroidHarness( 3936): at com.jme3.renderer.RenderManager.renderViewPortQueues(RenderManage

r.java:894)

E/AndroidHarness( 3936): at com.jme3.renderer.RenderManager.flushQueue(RenderManager.java:850

)

E/AndroidHarness( 3936): at com.jme3.renderer.RenderManager.renderViewPort(RenderManager.java

:1126)

E/AndroidHarness( 3936): at com.jme3.renderer.RenderManager.render(RenderManager.java:1168)

E/AndroidHarness( 3936): at com.jme3.app.SimpleApplication.update(SimpleApplication.java:246)



E/AndroidHarness( 3936): at com.jme3.system.android.OGLESContext.onDrawFrame(OGLESContext.jav

a:384)

E/AndroidHarness( 3936): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.ja

va:1332)

E/AndroidHarness( 3936): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1116

)

I/WindowManager( 1349): updateFocusedWindowLocked newFocus=Window{46218890 com.mycompany.mygame/com.

mycompany.mygame.MainActivity paused=false} mode=1 mCurrentFocus = Window{4615f370 com.mycompany.myg

ame/com.mycompany.mygame.MainActivity paused=false}

Your driver is broken, contact your GPU’s manufacturer to have it fixed.



The error:

[java]error:(37:0) : error : Not expected token(’&&’) in expression.[/java]

refers to this line in the shader:

[java]#if (defined(PARALLAXMAP) || (defined(NORMALMAP_PARALLAX) && defined(NORMALMAP))) && !defined(VERTEX_LIGHTING)[/java]

This is proper usage of the GLSL preprocessor as defined in the GLSL spec.