Browse Source

Merge branch 'master' of https://github.com/BabylonJS/Babylon.js

David Catuhe 5 years ago
parent
commit
ebbe0a3beb
2 changed files with 19 additions and 7 deletions
  1. 7 6
      src/Shaders/spriteMap.fragment.fx
  2. 12 1
      src/Sprites/spriteMap.ts

+ 7 - 6
src/Shaders/spriteMap.fragment.fx

@@ -37,7 +37,6 @@ mat4 getFrameData(float frameID){
 void main(){
     vec4 color = vec4(0.);    
     vec2 tileUV = fract(tUV);
-
     #ifdef FLIPU
         tileUV.y = 1.0 - tileUV.y;
     #endif
@@ -45,12 +44,14 @@ void main(){
     vec2 tileID = floor(tUV);	
     vec2 sheetUnits = 1. / spriteMapSize;
     float spriteUnits = 1. / spriteCount;
-    vec2 stageUnits = 1. / stageSize;	
-
-    for(int i = 0; i < LAYERS; i++){	
+    vec2 stageUnits = 1. / stageSize;        
     
-        float frameID = texture(tileMaps[i], (tileID + 0.5) / stageSize, 0.).x;		
-
+    for(int i = 0; i < LAYERS; i++){
+        float frameID;
+            switch(i){
+                #define LAYER_ID_SWITCH      
+            }        
+        
         vec4 animationData = texture(animationMap, vec2((frameID + 0.5) / spriteCount, 0.), 0.); 
         
         if(animationData.y > 0.){

+ 12 - 1
src/Sprites/spriteMap.ts

@@ -8,6 +8,7 @@ import { ShaderMaterial } from "../Materials/shaderMaterial";
 import { Mesh } from "../Meshes/mesh";
 import { PickingInfo } from "../Collisions/pickingInfo";
 import { ISpriteJSONSprite, ISpriteJSONAtlas } from "./ISprites";
+import { Effect } from "../Materials/effect";
 
 import "../Meshes/Builders/planeBuilder";
 import "../Shaders/spriteMap.fragment";
@@ -220,9 +221,19 @@ export class SpriteMap implements ISpriteMap {
         defines.push("#define FLIPU");
     }
 
+    let shaderString: string = Effect.ShadersStore['spriteMapPixelShader'];
+    let layerSampleString: string = '';
+
+    for (let i = 0; i < this.options.layerCount; i++) {
+        layerSampleString += 'case ' + i + ' : frameID = texture(tileMaps[' + i + '], (tileID + 0.5) / stageSize, 0.).x;';
+        layerSampleString += 'break;';
+    }
+
+    Effect.ShadersStore['spriteMap' + this.name + 'PixelShader'] = shaderString.replace('#define LAYER_ID_SWITCH',  layerSampleString);
+
     this._material = new ShaderMaterial("spriteMap:" + this.name, this._scene, {
         vertex: "spriteMap",
-        fragment: "spriteMap",
+        fragment: "spriteMap" + this.name,
     }, {
         defines,
         attributes: ["position", "normal", "uv"],