[Solved] PssmShadowRenderer fails with shader compile error (3 posts)

Topic tags: shadow pssm compile error
  • Profile picture of kemi kemi1p said 3 months, 2 weeks ago:

    If I run this code in a basic SimpleApp:

        public void simpleInitApp() {
            PssmShadowRenderer pssmRenderer = new PssmShadowRenderer(assetManager, 1024, 3);
            pssmRenderer.setDirection(new Vector3f(-1, -1, -1).normalizeLocal());
            viewPort.addProcessor(pssmRenderer);
    
            Geometry box = new Geometry("Box", new Box(Vector3f.ZERO, 1, 1, 1));
    
            final Material material = assetManager.loadMaterial("Material/cube.j3m");
            box.setMaterial(material);
            box.setShadowMode(RenderQueue.ShadowMode.Receive);
            rootNode.attachChild(box);
        }
    

    I get this error:

    Bad compile of:
    #define FILTER_MODE 1
    #define HARDWARE_SHADOWS 1
    #define PCFEDGE 1.0
    // Because gpu_shader5 is actually where those
    // gather functions are declared to work on shadowmaps
    #extension GL_ARB_gpu_shader5 : 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_gpu_shader5
    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);
    }

    com.jme3.renderer.RendererException: compile error in:ShaderSource[name=Common/MatDefs/Shadow/PostShadowPSSM15.frag, defines, type=Fragment] error:0(92) : error C7011: implicit cast from "float" to "vec4"

    Any ideas? I'm not familiar with shader code yet so I have no idea. Just thought I'd report it.

    I get this error using the 2012-02-03 Nightly as well as with JMonkey SDK Beta 3

    the cube material is just this:

    Material jME Logo : Common/MatDefs/Light/Lighting.j3md {
    MaterialParameters {
    DiffuseMap : Material/cube.jpg
    }
    }

  • Profile picture of Momoko_Fan Momoko_Fan366p said 3 months, 2 weeks ago:

    Should be fixed now, thanks.

  • Profile picture of kemi kemi1p said 3 months, 1 week ago:

    Hi.
    Thanks, that fixed it.

    Sorry for the late answer, wanted to thank you earlier but got busy.