engine: 'occludeSpecular' : no matching overloaded function found

I am still using playcanvas-gltf (or rather a modified version of that), but with the latest rewrites in the engine some shaders fail to compile:

One full error:

Failed to compile fragment shader:
ERROR: 0:486: 'occludeSpecular' : no matching overloaded function found
481:	    dAtten *= getLightDiffuse();
482:	    dDiffuseLight += dAtten * light0_color;
483:	    dSpecularLight += getLightSpecular() * dAtten * light0_color;
484:	
485:	
486:	    occludeSpecular();
487:	
488:	    gl_FragColor.rgb = combineColor();
489:	
490:	    gl_FragColor.rgb += dEmission;
491:	    gl_FragColor.rgb = addFog(gl_FragColor.rgb);

Different glTF models produce different errors:

image

Now I wonder if backwards-compatibility is abandoned or should the engine still support these shaders?

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Comments: 15 (11 by maintainers)

Most upvoted comments

playcanvas-gltf e.g. has no typing/Intellisense enabled, but then again, it is also obsolete.

But perhaps you were thinking more that we should be more strict in asserting the types?

Right, my idea was just that once we know a property is a string for example, it shouldn’t be allowed to assign a number / bool anymore?

It could be just in a Debug.call(() => { ... });

Right now this is just a could-be-nice-to-have-in-few-situations-that-may-or-may-not-occur for me, otherwise @slimbuck fixed the issue 💯 👍 Right now I don’t have such situations luckily 😅

Ahh interesting. A week ago I found and fixed a bug in glb-parser.js which was setting occludeSpecular flag incorrectly here.

Looks like the bug originated in playcanvas-gltf.

In general I wonder how how the chunk system should handle invalid parameters like this…

Looks like this is triggered from adding a height map to a standard material (for parallax mapping)?

Which version of the engine are you using? 1.54.1? What was the last version of the engine that the shader worked on?