|
@@ -14,6 +14,8 @@ import { Material } from "./material";
|
|
import { _TypeStore } from '../Misc/typeStore';
|
|
import { _TypeStore } from '../Misc/typeStore';
|
|
import { Color3, Color4 } from '../Maths/math.color';
|
|
import { Color3, Color4 } from '../Maths/math.color';
|
|
import { EffectFallbacks } from './effectFallbacks';
|
|
import { EffectFallbacks } from './effectFallbacks';
|
|
|
|
+import { WebRequest } from '../Misc/webRequest';
|
|
|
|
+import { Engine } from '../Engines/engine';
|
|
|
|
|
|
const onCreatedEffectParameters = { effect: null as unknown as Effect, subMesh: null as unknown as Nullable<SubMesh> };
|
|
const onCreatedEffectParameters = { effect: null as unknown as Effect, subMesh: null as unknown as Nullable<SubMesh> };
|
|
|
|
|
|
@@ -92,6 +94,12 @@ export class ShaderMaterial extends Material {
|
|
private _multiview: boolean = false;
|
|
private _multiview: boolean = false;
|
|
private _cachedDefines: string;
|
|
private _cachedDefines: string;
|
|
|
|
|
|
|
|
+ /** Define the Url to load snippets */
|
|
|
|
+ public static SnippetUrl = "https://snippet.babylonjs.com";
|
|
|
|
+
|
|
|
|
+ /** Snippet ID if the manager was created from the snippet server */
|
|
|
|
+ public snippetId: string;
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* Instantiate a new shader material.
|
|
* Instantiate a new shader material.
|
|
* The ShaderMaterial object has the necessary methods to pass data from your scene to the Vertex and Fragment Shaders and returns a material that can be applied to any mesh.
|
|
* The ShaderMaterial object has the necessary methods to pass data from your scene to the Vertex and Fragment Shaders and returns a material that can be applied to any mesh.
|
|
@@ -1230,6 +1238,71 @@ export class ShaderMaterial extends Material {
|
|
|
|
|
|
return material;
|
|
return material;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Creates a new ShaderMaterial from a snippet saved in a remote file
|
|
|
|
+ * @param name defines the name of the ShaderMaterial to create (can be null or empty to use the one from the json data)
|
|
|
|
+ * @param url defines the url to load from
|
|
|
|
+ * @param scene defines the hosting scene
|
|
|
|
+ * @param rootUrl defines the root URL to use to load textures and relative dependencies
|
|
|
|
+ * @returns a promise that will resolve to the new ShaderMaterial
|
|
|
|
+ */
|
|
|
|
+ public static ParseFromFileAsync(name: Nullable<string>, url: string, scene: Scene, rootUrl: string = ""): Promise<ShaderMaterial> {
|
|
|
|
+
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ var request = new WebRequest();
|
|
|
|
+ request.addEventListener("readystatechange", () => {
|
|
|
|
+ if (request.readyState == 4) {
|
|
|
|
+ if (request.status == 200) {
|
|
|
|
+ let serializationObject = JSON.parse(request.responseText);
|
|
|
|
+ let output = this.Parse(serializationObject, scene || Engine.LastCreatedScene, rootUrl);
|
|
|
|
+
|
|
|
|
+ if (name) {
|
|
|
|
+ output.name = name;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ resolve(output);
|
|
|
|
+ } else {
|
|
|
|
+ reject("Unable to load the ShaderMaterial");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ request.open("GET", url);
|
|
|
|
+ request.send();
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Creates a ShaderMaterial from a snippet saved by the Inspector
|
|
|
|
+ * @param snippetId defines the snippet to load
|
|
|
|
+ * @param scene defines the hosting scene
|
|
|
|
+ * @param rootUrl defines the root URL to use to load textures and relative dependencies
|
|
|
|
+ * @returns a promise that will resolve to the new ShaderMaterial
|
|
|
|
+ */
|
|
|
|
+ public static CreateFromSnippetAsync(snippetId: string, scene: Scene, rootUrl: string = ""): Promise<ShaderMaterial> {
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ var request = new WebRequest();
|
|
|
|
+ request.addEventListener("readystatechange", () => {
|
|
|
|
+ if (request.readyState == 4) {
|
|
|
|
+ if (request.status == 200) {
|
|
|
|
+ var snippet = JSON.parse(JSON.parse(request.responseText).jsonPayload);
|
|
|
|
+ let serializationObject = JSON.parse(snippet.shaderMaterial);
|
|
|
|
+ let output = this.Parse(serializationObject, scene || Engine.LastCreatedScene, rootUrl);
|
|
|
|
+
|
|
|
|
+ output.snippetId = snippetId;
|
|
|
|
+
|
|
|
|
+ resolve(output);
|
|
|
|
+ } else {
|
|
|
|
+ reject("Unable to load the snippet " + snippetId);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ request.open("GET", this.SnippetUrl + "/" + snippetId.replace(/#/g, "/"));
|
|
|
|
+ request.send();
|
|
|
|
+ });
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
_TypeStore.RegisteredTypes["BABYLON.ShaderMaterial"] = ShaderMaterial;
|
|
_TypeStore.RegisteredTypes["BABYLON.ShaderMaterial"] = ShaderMaterial;
|