Browse Source

added addAlias

bstouls 9 năm trước cách đây
mục cha
commit
b44c7375b0
1 tập tin đã thay đổi với 13 bổ sung0 xóa
  1. 13 0
      h3d/prim/HMDModel.hx

+ 13 - 0
h3d/prim/HMDModel.hx

@@ -10,6 +10,7 @@ class HMDModel extends MeshPrimitive {
 	var curMaterial : Int;
 	var collider : h3d.col.Collider;
 	var normalsRecomputed : String;
+	var bufferAliases : Map<String,{ realName : String, offset : Int }> = new Map();
 
 	public function new(data, dataPos, lib) {
 		this.data = data;
@@ -37,6 +38,10 @@ class HMDModel extends MeshPrimitive {
 		return lib.getBuffers(data, fmt, defaults, material);
 	}
 
+	public function addAlias( name : String, realName : String, offset = 0 ) {
+		bufferAliases.set(name, {realName : realName, offset : offset });
+	}
+
 	override function alloc(engine:h3d.Engine) {
 		dispose();
 		buffer = new h3d.Buffer(data.vertexCount, data.vertexStride);
@@ -75,6 +80,14 @@ 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);
+		}
 	}
 
 	public function recomputeNormals( ?name : String ) {