2
0
Эх сурвалжийг харах

only upload in mesh batch if needed

Nicolas Cannasse 5 жил өмнө
parent
commit
a2d2236294

+ 7 - 1
h3d/scene/MeshBatch.hx

@@ -33,6 +33,7 @@ class MeshBatch extends Mesh {
 	var modelViewInverseID = hxsl.Globals.allocID("global.modelViewInverse");
 	var modelViewInverseID = hxsl.Globals.allocID("global.modelViewInverse");
 	var colorSave = new h3d.Vector();
 	var colorSave = new h3d.Vector();
 	var colorMult : h3d.shader.ColorMult;
 	var colorMult : h3d.shader.ColorMult;
+	var needUpload = false;
 
 
 	/**
 	/**
 		Tells if we can use material.color as a global multiply over each instance color (default: true)
 		Tells if we can use material.color as a global multiply over each instance color (default: true)
@@ -242,6 +243,7 @@ class MeshBatch extends Mesh {
 			}
 			}
 			p = p.next;
 			p = p.next;
 		}
 		}
+		needUpload = true;
 	}
 	}
 
 
 	public function emitInstance() {
 	public function emitInstance() {
@@ -265,13 +267,17 @@ class MeshBatch extends Mesh {
 		if( curInstances == 0 ) return;
 		if( curInstances == 0 ) return;
 		var p = dataPasses;
 		var p = dataPasses;
 		while( p != null ) {
 		while( p != null ) {
+			var upload = needUpload;
 			if( p.buffer.isDisposed() ) {
 			if( p.buffer.isDisposed() ) {
 				p.buffer = hxd.impl.Allocator.get().allocBuffer(p.count * shaderInstances,4,UniformDynamic);
 				p.buffer = hxd.impl.Allocator.get().allocBuffer(p.count * shaderInstances,4,UniformDynamic);
 				p.shader.Batch_Buffer = p.buffer;
 				p.shader.Batch_Buffer = p.buffer;
+				upload = true;
 			}
 			}
-			p.buffer.uploadVector(p.data,0,curInstances * p.count);
+			if( upload )
+				p.buffer.uploadVector(p.data,0,curInstances * p.count);
 			p = p.next;
 			p = p.next;
 		}
 		}
+		needUpload = false;
 		instanced.commands.setCommand(curInstances,indexCount);
 		instanced.commands.setCommand(curInstances,indexCount);
 		if( colorMult != null ) colorMult.color.load(material.color);
 		if( colorMult != null ) colorMult.color.load(material.color);
 	}
 	}