Sfoglia il codice sorgente

added GpuParticles sample, JS fixes when bufPos != 0

Nicolas Cannasse 8 anni fa
parent
commit
a068e94b10
3 ha cambiato i file con 54 aggiunte e 3 eliminazioni
  1. 2 2
      h3d/impl/GlDriver.hx
  2. 1 1
      h3d/parts/GpuParticles.hx
  3. 51 0
      samples/GpuParticles.hx

+ 2 - 2
h3d/impl/GlDriver.hx

@@ -813,7 +813,7 @@ class GlDriver extends Driver {
 		gl.bufferSubData(GL.ARRAY_BUFFER, startVertex * stride * 4, streamData(data,bufPos * 4,vertexCount * stride * 4), bufPos * 4 * STREAM_POS, vertexCount * stride * 4);
 		#else
 		var buf = new Float32Array(buf.getNative());
-		var sub = new Float32Array(buf.buffer, bufPos, vertexCount * stride);
+		var sub = new Float32Array(buf.buffer, bufPos * 4, vertexCount * stride);
 		gl.bufferSubData(GL.ARRAY_BUFFER, startVertex * stride * 4, sub);
 		#end
 		gl.bindBuffer(GL.ARRAY_BUFFER, null);
@@ -839,7 +839,7 @@ class GlDriver extends Driver {
 		gl.bufferSubData(GL.ELEMENT_ARRAY_BUFFER, startIndice * 2, streamData(data,bufPos*2,indiceCount*2), bufPos * 2 * STREAM_POS, indiceCount * 2);
 		#else
 		var buf = new Uint16Array(buf.getNative());
-		var sub = new Uint16Array(buf.buffer, bufPos, indiceCount);
+		var sub = new Uint16Array(buf.buffer, bufPos * 2, indiceCount);
 		gl.bufferSubData(GL.ELEMENT_ARRAY_BUFFER, startIndice * 2, sub);
 		#end
 		gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, null);

+ 1 - 1
h3d/parts/GpuParticles.hx

@@ -608,7 +608,7 @@ class GpuParticles extends h3d.scene.MultiMaterial {
 			p = p.next;
 		}
 		if( firstPart <= lastPart )
-			primitive.buffer.uploadVector(vbuf, (g.partIndex + firstPart) * STRIDE * 4, (lastPart - firstPart + 1) * 4, (g.partIndex + firstPart) * 4);
+			primitive.buffer.uploadVector(vbuf, (g.partIndex + firstPart) * 4 * STRIDE, (lastPart - firstPart + 1) * 4, (g.partIndex + firstPart) * 4);
 	}
 
 	override function emit( ctx : h3d.scene.RenderContext ) {

+ 51 - 0
samples/GpuParticles.hx

@@ -0,0 +1,51 @@
+class GpuParticles extends SampleApp {
+
+	var parts : h3d.parts.GpuParticles;
+
+	override function init() {
+		super.init();
+		parts = new h3d.parts.GpuParticles(s3d);
+
+		var g = new h3d.parts.GpuParticles.GpuPartGroup();
+
+		g.emitMode = Cone;
+		g.emitAngle = 0.5;
+
+		g.fadeIn = 0.1;
+		g.fadeOut = 0.2;
+		g.gravity = 1;
+		g.size = 0.1;
+		g.sizeRand = 0.5;
+
+		g.rotSpeed = 10;
+
+		g.speed = 2;
+		g.speedRand = 0.5;
+
+		g.life = 2;
+		g.lifeRand = 0.5;
+		//g.sortMode = Dynamic;
+		g.nparts = 10000;
+		g.displayedParts = g.nparts;
+
+		addSlider("Parts", 0, 10000, function() return g.displayedParts, function(v) g.displayedParts = Std.int(v));
+
+		parts.addGroup(g);
+		new h3d.scene.CameraController(20, s3d);
+
+	}
+
+	/*
+	var time = 0.;
+
+	override function update(dt:Float) {
+		time += dt;
+		parts.x = Math.cos(time) * 2;
+		parts.y = Math.sin(time) * 2;
+	}*/
+
+	static function main() {
+		new GpuParticles();
+	}
+
+}