Jelajahi Sumber

fixed missing popTarget() in unpackWeights, added Tile reference to index/weight resources

Nicolas Cannasse 5 tahun lalu
induk
melakukan
4f7adc323b
2 mengubah file dengan 9 tambahan dan 1 penghapusan
  1. 5 1
      hrt/prefab/terrain/Terrain.hx
  2. 4 0
      hrt/prefab/terrain/Tile.hx

+ 5 - 1
hrt/prefab/terrain/Terrain.hx

@@ -162,20 +162,24 @@ class Terrain extends Object3D {
 				}
 				case "w":
 				if( weight ) {
+					tile.weightMapResource = res;
 					var tex = res.toTexture();
 					if( tile.surfaceWeights.length == 0 ) @:privateAccess tile.refreshSurfaceWeights();
+					var engine = h3d.Engine.getCurrent();
 					for(i in 0 ... tile.surfaceWeights.length){
-						h3d.Engine.getCurrent().pushTarget(tile.surfaceWeights[i]);
+						engine.pushTarget(tile.surfaceWeights[i]);
 						unpackWeight.shader.indexMap = tile.surfaceIndexMap;
 						unpackWeight.shader.packedWeightTexture = tex;
 						unpackWeight.shader.index = i;
 						unpackWeight.render();
+						engine.popTarget();
 					}
 					tile.generateWeightArray();
 					tex.dispose();
 				}
 				case"i":
 				if( index ) {
+					tile.indexMapResource = res;
 					var tex = res.toTexture();
 					if( tile.surfaceIndexMap == null ) @:privateAccess tile.refreshIndexMap();
 					h3d.pass.Copy.run(tex, tile.surfaceIndexMap);

+ 4 - 0
hrt/prefab/terrain/Tile.hx

@@ -18,6 +18,10 @@ class Tile extends h3d.scene.Mesh {
 	public var needNewPixelCapture = false;
 	public var insideFrustrum(default, null) = false;
 
+	// set by prefab loader for CPU access ingame
+	public var weightMapResource : hxd.res.Resource;
+	public var indexMapResource : hxd.res.Resource;
+
 	var heightmapPixels : hxd.Pixels.PixelsFloat;
 	var shader : hrt.shader.Terrain;
 	var terrain : TerrainMesh;