I don’t know if it’s relevant for Babylon, but I have a use case where I need to update the vertex/fragment shaders without recreating a ShaderMaterial object from scratch.
There’s no method for this on the ShaderMaterial class.
I currently do this:
(mat as any)._shaderPath.vertex = newVertexCode;
(mat as any)._shaderPath.fragment = newFragmentCode;
Updating _shaderPath do the job because it is used as a parameter in the engine.createEffect(...) call, and so it will return a new effect if something has changed in _shaderPath since the last time it was called.
As _shaderPath is not visible from the outside I need to cast my material to any to access it: would it make sense to have a getter for it, as we have for options?
Then, I could do:
mat.shaderPath.vertex = newVertexCode;
mat.shaderPath.fragment = newFragmentCode;
Also, maybe it was what was asking @wwwonka in Live-reloading of shaderMaterial?