None of the base properties of Material
are cloned when cloning a ShaderMaterial
: is it intended?
I had a bug because I cloned a ShaderMaterial
with alphaMode=12
but got alphaMode=2
in the cloned material (2=default value).
By the way, clone()
is not implemented in Material
(it returns null
) contrary to what the doc is saying.
Yes shaderMaterial cloning is not good at all
Please provide a pg that highlights the issue and I will fix the clone function
Here it is:
https://www.babylonjs-playground.com/#1OH09K#132
alphaMode
/ backFaceCulling
values are not cloned, so the front-most cube is not rendered like the other one. You have to uncomment the last two lines to achieve the same rendering.
ok will be fixed by next nightly
1 Like
I saw you did the changes, thanks!
However, I think you should also deep-copy _options
and _shaderPath
, else if we modify a property in these objects in one shader, all cloned instances will get the same change.
Fancy doing a PR? I can do it else
Never done it before, I will try!
1 Like
Just in case, as I saw a comment of you, tried to reply but could not validate: maybe you removed your comment in-between?
I had answered:
This create a shallow copy of _options
object (https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-1.html#object-spread-and-rest).
Then, in the next block of code, I clone the properties that are arrays (the other types of property - string
and boolean
- are already handled by the shallow copy).
lol yeah I found the answer by myself (it as a stupid question so I removed it)