Browse Source

allow to call addAlias after buffers allocated

Nicolas Cannasse 5 years ago
parent
commit
d74b7c6abb
1 changed files with 12 additions and 7 deletions
  1. 12 7
      h3d/prim/HMDModel.hx

+ 12 - 7
h3d/prim/HMDModel.hx

@@ -44,6 +44,8 @@ class HMDModel extends MeshPrimitive {
 
 	public function addAlias( name : String, realName : String, offset = 0 ) {
 		bufferAliases.set(name, {realName : realName, offset : offset });
+		// already allocated !
+		if( bufferCache != null ) allocAlias(name);
 	}
 
 	override function alloc(engine:h3d.Engine) {
@@ -83,13 +85,16 @@ class HMDModel extends MeshPrimitive {
 		if( normalsRecomputed != null )
 			recomputeNormals(normalsRecomputed);
 
-		for( name in bufferAliases.keys() ) {
-			var alias = bufferAliases.get(name);
-			var buffer = bufferCache.get(hxsl.Globals.allocID(alias.realName));
-			if( buffer == null ) throw "Buffer " + alias.realName+" not found for alias " + name;
-			if( buffer.offset + alias.offset > buffer.buffer.buffer.stride ) throw "Alias " + name+" for buffer " + alias.realName+" outside stride";
-			addBuffer(name, buffer.buffer, buffer.offset + alias.offset);
-		}
+		for( name in bufferAliases.keys() )
+			allocAlias(name);
+	}
+
+	function allocAlias( name : String ) {
+		var alias = bufferAliases.get(name);
+		var buffer = bufferCache.get(hxsl.Globals.allocID(alias.realName));
+		if( buffer == null ) throw "Buffer " + alias.realName+" not found for alias " + name;
+		if( buffer.offset + alias.offset > buffer.buffer.buffer.stride ) throw "Alias " + name+" for buffer " + alias.realName+" outside stride";
+		addBuffer(name, buffer.buffer, buffer.offset + alias.offset);
 	}
 
 	public function recomputeNormals( ?name : String ) {