Przeglądaj źródła

New ```fragmentElement``` parameter to define custom shader for ```BABYLON.ParticleSystem``` constructor

David Catuhe 11 lat temu
rodzic
commit
bffe8deb1f

+ 6 - 2
Babylon/Materials/babylon.effect.js

@@ -21,10 +21,14 @@
 
             if (baseName.vertexElement) {
                 vertexSource = document.getElementById(baseName.vertexElement);
+            } else {
+                vertexSource = baseName.vertex || baseName;
+            }
+
+            if (baseName.fragmentElement) {
                 fragmentSource = document.getElementById(baseName.fragmentElement);
             } else {
-                vertexSource = baseName.vertexElement || baseName.vertex || baseName;
-                fragmentSource = baseName.fragmentElement || baseName.fragment || baseName;
+                fragmentSource = baseName.fragment || baseName;
             }
 
             this._loadVertexShader(vertexSource, function (vertexCode) {

+ 6 - 2
Babylon/Materials/babylon.effect.ts

@@ -34,10 +34,14 @@
 
             if (baseName.vertexElement) {
                 vertexSource = document.getElementById(baseName.vertexElement);
+            } else {
+                vertexSource = baseName.vertex || baseName;
+            }
+
+            if (baseName.fragmentElement) {
                 fragmentSource = document.getElementById(baseName.fragmentElement);
             } else {
-                vertexSource = baseName.vertexElement || baseName.vertex || baseName;
-                fragmentSource = baseName.fragmentElement || baseName.fragment || baseName;
+                fragmentSource = baseName.fragment || baseName;
             }
 
             this._loadVertexShader(vertexSource, vertexCode => {

+ 14 - 2
Babylon/Particles/babylon.particleSystem.js

@@ -11,9 +11,10 @@
     };
 
     var ParticleSystem = (function () {
-        function ParticleSystem(name, capacity, scene) {
+        function ParticleSystem(name, capacity, scene, fragmentElement) {
             var _this = this;
             this.name = name;
+            this.fragmentElement = fragmentElement;
             this.renderingGroupId = 0;
             this.emitter = null;
             this.emitRate = 10;
@@ -214,7 +215,18 @@
             var join = defines.join("\n");
             if (this._cachedDefines != join) {
                 this._cachedDefines = join;
-                this._effect = this._scene.getEngine().createEffect("particles", ["position", "color", "options"], ["invView", "view", "projection", "vClipPlane", "textureMask"], ["diffuseSampler"], join);
+                var baseName;
+
+                if (this.fragmentElement) {
+                    baseName = {
+                        vertex: "particles",
+                        fragmentElement: this.fragmentElement
+                    };
+                } else {
+                    baseName = "particles";
+                }
+
+                this._effect = this._scene.getEngine().createEffect(baseName, ["position", "color", "options"], ["invView", "view", "projection", "vClipPlane", "textureMask"], ["diffuseSampler"], join);
             }
 
             return this._effect;

+ 15 - 2
Babylon/Particles/babylon.particleSystem.ts

@@ -81,7 +81,7 @@
         private _actualFrame = 0;
         private _scaledUpdateSpeed: number;
 
-        constructor(public name: string, capacity: number, scene: Scene) {
+        constructor(public name: string, capacity: number, scene: Scene, public fragmentElement?: string) {
             this.id = name;
             this._capacity = capacity;
 
@@ -245,7 +245,20 @@
             var join = defines.join("\n");
             if (this._cachedDefines != join) {
                 this._cachedDefines = join;
-                this._effect = this._scene.getEngine().createEffect("particles",
+                var baseName;
+
+                if (this.fragmentElement) {
+                    baseName = {
+                        vertex: "particles",
+                        fragmentElement: this.fragmentElement
+                    }
+                } else {
+                    baseName = "particles";
+                }
+
+
+                this._effect = this._scene.getEngine().createEffect(
+                    baseName,
                     ["position", "color", "options"],
                     ["invView", "view", "projection", "vClipPlane", "textureMask"],
                     ["diffuseSampler"], join);

Plik diff jest za duży
+ 2 - 2
babylon.1.13-beta-debug.js


Plik diff jest za duży
+ 4 - 4
babylon.1.13-beta.js