Skip to content

Commit

Permalink
ModelLibrary : - Fix dynamic shaders not being correctly applied
Browse files Browse the repository at this point in the history
  • Loading branch information
TothBenoit committed Jan 21, 2025
1 parent 3533b01 commit c8686f1
Showing 1 changed file with 15 additions and 12 deletions.
27 changes: 15 additions & 12 deletions hrt/prefab/l3d/ModelLibrary.hx
Original file line number Diff line number Diff line change
Expand Up @@ -219,25 +219,22 @@ class ModelLibraryInstance {
var materialClone = h3d.mat.MaterialSetup.current.createMaterial();
material.clone(materialClone);

var shaderKey = "";
var props = h3d.mat.MaterialSetup.current.loadMaterialProps(material);
var prefab = null;
if ( props != null ) {
var ref = (props:Dynamic).__ref;
if ( ref != null ) {
prefab = hxd.res.Loader.currentInstance.load(ref).toPrefab();
var prefab = hxd.res.Loader.currentInstance.load(ref).toPrefab();
hxd.fmt.hmd.Library.setupMaterialLibrary(path -> hxd.res.Loader.currentInstance.load(path).toTexture(),
materialClone, prefab, (props:Dynamic).name);
var libMat = prefab.load().getOpt(hrt.prefab.Material, (props:Dynamic).name);
for ( c in libMat.children )
shaderKey += haxe.Json.stringify(@:privateAccess c.serialize());
}
}

var shaderKey = "";
var props = (material.props : PbrProps);
var libMat = prefab != null ? prefab.load().getOpt(hrt.prefab.Material, (props:Dynamic).name) : null;
if ( libMat != null )
for ( c in libMat.children )
shaderKey += haxe.Json.stringify(@:privateAccess c.serialize());
var key = haxe.Json.stringify(props) + shaderKey + appendToKey;

var batchID = batchLookup.get(key);
if ( batchID == null ) {
batchID = batchCache.length;
Expand Down Expand Up @@ -1045,11 +1042,17 @@ class ModelLibrary extends Prefab {

if ( material != null ) {
for ( s in material.mainPass.getShaders())
if ( !isForbiddenShader(s) && batch.material.mainPass.getShader(Type.getClass(s)) == null )
batch.material.mainPass.addShader(s.clone());
if ( !isForbiddenShader(s) ) {
var shader = batch.material.mainPass.getShader(Type.getClass(s));
if ( shader == null || (s.toString() != shader.toString()))
batch.material.mainPass.addShader(s.clone());
}
for ( s in @:privateAccess material.mainPass.selfShaders )
if ( !isForbiddenShader(s) && batch.material.mainPass.getShader(Type.getClass(s)) == null )
@:privateAccess batch.material.mainPass.addSelfShader(s.clone());
if ( !isForbiddenShader(s) ) {
var shader = batch.material.mainPass.getShader(Type.getClass(s));
if ( shader == null || (s.toString() != shader.toString()))
@:privateAccess batch.material.mainPass.addSelfShader(s.clone());
}
}

if ( isStatic ) {
Expand Down

0 comments on commit c8686f1

Please sign in to comment.