Pārlūkot izejas kodu

Merge pull request #6350 from BabylonJS/master

Nightly
David Catuhe 6 gadi atpakaļ
vecāks
revīzija
82beb5912c
54 mainītis faili ar 2266 papildinājumiem un 879 dzēšanām
  1. 12 4
      Playground/babylon.d.txt
  2. 11 3
      dist/preview release/babylon.d.ts
  3. 1 1
      dist/preview release/babylon.js
  4. 151 128
      dist/preview release/babylon.max.js
  5. 1 1
      dist/preview release/babylon.max.js.map
  6. 22 6
      dist/preview release/babylon.module.d.ts
  7. 12 4
      dist/preview release/documentation.d.ts
  8. 7 7
      dist/preview release/inspector/babylon.inspector.bundle.max.js
  9. 1 1
      dist/preview release/inspector/babylon.inspector.bundle.max.js.map
  10. 209 75
      dist/preview release/nodeEditor/babylon.nodeEditor.d.ts
  11. 7 7
      dist/preview release/nodeEditor/babylon.nodeEditor.js
  12. 672 193
      dist/preview release/nodeEditor/babylon.nodeEditor.max.js
  13. 1 1
      dist/preview release/nodeEditor/babylon.nodeEditor.max.js.map
  14. 457 171
      dist/preview release/nodeEditor/babylon.nodeEditor.module.d.ts
  15. 5 5
      dist/preview release/postProcessesLibrary/babylon.asciiArtPostProcess.js
  16. 1 1
      dist/preview release/postProcessesLibrary/babylon.asciiArtPostProcess.js.map
  17. 5 5
      dist/preview release/postProcessesLibrary/babylon.digitalRainPostProcess.js
  18. 1 1
      dist/preview release/postProcessesLibrary/babylon.digitalRainPostProcess.js.map
  19. 5 5
      dist/preview release/postProcessesLibrary/babylon.oceanPostProcess.js
  20. 1 1
      dist/preview release/postProcessesLibrary/babylon.oceanPostProcess.js.map
  21. 9 9
      dist/preview release/postProcessesLibrary/babylonjs.postProcess.js
  22. 1 1
      dist/preview release/postProcessesLibrary/babylonjs.postProcess.js.map
  23. 14 19
      dist/preview release/serializers/babylon.glTF2Serializer.js
  24. 1 1
      dist/preview release/serializers/babylon.glTF2Serializer.js.map
  25. 1 1
      dist/preview release/serializers/babylon.glTF2Serializer.min.js
  26. 1 1
      dist/preview release/serializers/babylonjs.serializers.d.ts
  27. 14 19
      dist/preview release/serializers/babylonjs.serializers.js
  28. 1 1
      dist/preview release/serializers/babylonjs.serializers.js.map
  29. 1 1
      dist/preview release/serializers/babylonjs.serializers.min.js
  30. 2 5
      dist/preview release/serializers/babylonjs.serializers.module.d.ts
  31. 22 6
      dist/preview release/viewer/babylon.module.d.ts
  32. 13 13
      dist/preview release/viewer/babylon.viewer.js
  33. 1 1
      dist/preview release/viewer/babylon.viewer.max.js
  34. 0 8
      nodeEditor/src/components/diagram/defaultNodeModel.ts
  35. 11 0
      nodeEditor/src/components/diagram/diagram.scss
  36. 6 60
      nodeEditor/src/components/diagram/generic/genericNodeModel.tsx
  37. 2 4
      nodeEditor/src/components/diagram/generic/genericNodeWidget.tsx
  38. 6 54
      nodeEditor/src/components/diagram/input/inputNodeModel.tsx
  39. 106 0
      nodeEditor/src/components/diagram/input/inputNodePropertyComponent.tsx
  40. 37 1
      nodeEditor/src/components/diagram/input/inputNodeWidget.tsx
  41. 4 9
      nodeEditor/src/components/diagram/texture/textureNodeWidget.tsx
  42. 6 5
      nodeEditor/src/components/nodeList/nodeListComponent.tsx
  43. 3 4
      nodeEditor/src/components/propertyTab/properties/vector2PropertyTabComponent.tsx
  44. 3 4
      nodeEditor/src/components/propertyTab/properties/vector3PropertyTabComponent.tsx
  45. 141 0
      nodeEditor/src/components/propertyTab/propertyTab.scss
  46. 1 0
      nodeEditor/src/globalState.ts
  47. 11 9
      nodeEditor/src/graphEditor.tsx
  48. 85 0
      nodeEditor/src/sharedComponents/checkBoxLineComponent.tsx
  49. 95 0
      nodeEditor/src/sharedComponents/optionsLineComponent.tsx
  50. 49 0
      nodeEditor/src/sharedComponents/textLineComponent.tsx
  51. 13 17
      serializers/src/glTF/2.0/Extensions/KHR_texture_transform.ts
  52. 2 2
      src/Materials/Node/Blocks/Dual/fogBlock.ts
  53. 21 3
      src/Materials/Node/nodeMaterialBlockConnectionPoint.ts
  54. 1 1
      src/Materials/Node/nodeMaterialWellKnownValues.ts

+ 12 - 4
Playground/babylon.d.txt

@@ -49259,7 +49259,7 @@ declare module BABYLON {
         /** WorldViewProjection */
         WorldViewProjection = 6,
         /** Will be filled by the block itself */
-        BlockBased = 7
+        Automatic = 7
     }
 }
 declare module BABYLON {
@@ -49890,10 +49890,18 @@ declare module BABYLON {
         setAsAttribute(attributeName?: string): NodeMaterialConnectionPoint;
         /**
          * Set the source of this connection point to a well known value
-         * @param value define the well known value to use (world, view, etc...)
+         * @param value define the well known value to use (world, view, etc...) or null to switch to manual value
          * @returns the current connection point
          */
-        setAsWellKnownValue(value: NodeMaterialWellKnownValues): NodeMaterialConnectionPoint;
+        setAsWellKnownValue(value: Nullable<NodeMaterialWellKnownValues>): NodeMaterialConnectionPoint;
+        /**
+         * Gets a boolean indicating that the current connection point is a well known value
+         */
+        readonly isWellKnownValue: boolean;
+        /**
+         * Gets or sets the current well known value or null if not defined as well know value
+         */
+        wellKnownValue: Nullable<NodeMaterialWellKnownValues>;
         private _getTypeLength;
         /**
          * Connect this point to another connection point
@@ -64539,7 +64547,7 @@ declare module BABYLON.GLTF2.Exporter.Extensions {
          * @param scale
          * @param scene
          */
-        textureTransformTextureAsync(babylonTexture: Texture, offset: Vector2, rotation: number, scale: Vector2, scene: Scene): Promise<BaseTexture>;
+        private _textureTransformTextureAsync;
     }
 }
 declare module BABYLON.GLTF2.Exporter.Extensions {

+ 11 - 3
dist/preview release/babylon.d.ts

@@ -50028,7 +50028,7 @@ declare module BABYLON {
         /** WorldViewProjection */
         WorldViewProjection = 6,
         /** Will be filled by the block itself */
-        BlockBased = 7
+        Automatic = 7
     }
 }
 declare module BABYLON {
@@ -50678,10 +50678,18 @@ declare module BABYLON {
         setAsAttribute(attributeName?: string): NodeMaterialConnectionPoint;
         /**
          * Set the source of this connection point to a well known value
-         * @param value define the well known value to use (world, view, etc...)
+         * @param value define the well known value to use (world, view, etc...) or null to switch to manual value
          * @returns the current connection point
          */
-        setAsWellKnownValue(value: NodeMaterialWellKnownValues): NodeMaterialConnectionPoint;
+        setAsWellKnownValue(value: Nullable<NodeMaterialWellKnownValues>): NodeMaterialConnectionPoint;
+        /**
+         * Gets a boolean indicating that the current connection point is a well known value
+         */
+        readonly isWellKnownValue: boolean;
+        /**
+         * Gets or sets the current well known value or null if not defined as well know value
+         */
+        wellKnownValue: Nullable<NodeMaterialWellKnownValues>;
         private _getTypeLength;
         /**
          * Connect this point to another connection point

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 1
dist/preview release/babylon.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 151 - 128
dist/preview release/babylon.max.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 1
dist/preview release/babylon.max.js.map


+ 22 - 6
dist/preview release/babylon.module.d.ts

@@ -52242,7 +52242,7 @@ declare module "babylonjs/Materials/Node/nodeMaterialWellKnownValues" {
         /** WorldViewProjection */
         WorldViewProjection = 6,
         /** Will be filled by the block itself */
-        BlockBased = 7
+        Automatic = 7
     }
 }
 declare module "babylonjs/Materials/Node/nodeMaterialBuildStateSharedData" {
@@ -52929,10 +52929,18 @@ declare module "babylonjs/Materials/Node/nodeMaterialBlockConnectionPoint" {
         setAsAttribute(attributeName?: string): NodeMaterialConnectionPoint;
         /**
          * Set the source of this connection point to a well known value
-         * @param value define the well known value to use (world, view, etc...)
+         * @param value define the well known value to use (world, view, etc...) or null to switch to manual value
          * @returns the current connection point
          */
-        setAsWellKnownValue(value: NodeMaterialWellKnownValues): NodeMaterialConnectionPoint;
+        setAsWellKnownValue(value: Nullable<NodeMaterialWellKnownValues>): NodeMaterialConnectionPoint;
+        /**
+         * Gets a boolean indicating that the current connection point is a well known value
+         */
+        readonly isWellKnownValue: boolean;
+        /**
+         * Gets or sets the current well known value or null if not defined as well know value
+         */
+        wellKnownValue: Nullable<NodeMaterialWellKnownValues>;
         private _getTypeLength;
         /**
          * Connect this point to another connection point
@@ -112049,7 +112057,7 @@ declare module BABYLON {
         /** WorldViewProjection */
         WorldViewProjection = 6,
         /** Will be filled by the block itself */
-        BlockBased = 7
+        Automatic = 7
     }
 }
 declare module BABYLON {
@@ -112699,10 +112707,18 @@ declare module BABYLON {
         setAsAttribute(attributeName?: string): NodeMaterialConnectionPoint;
         /**
          * Set the source of this connection point to a well known value
-         * @param value define the well known value to use (world, view, etc...)
+         * @param value define the well known value to use (world, view, etc...) or null to switch to manual value
          * @returns the current connection point
          */
-        setAsWellKnownValue(value: NodeMaterialWellKnownValues): NodeMaterialConnectionPoint;
+        setAsWellKnownValue(value: Nullable<NodeMaterialWellKnownValues>): NodeMaterialConnectionPoint;
+        /**
+         * Gets a boolean indicating that the current connection point is a well known value
+         */
+        readonly isWellKnownValue: boolean;
+        /**
+         * Gets or sets the current well known value or null if not defined as well know value
+         */
+        wellKnownValue: Nullable<NodeMaterialWellKnownValues>;
         private _getTypeLength;
         /**
          * Connect this point to another connection point

+ 12 - 4
dist/preview release/documentation.d.ts

@@ -50028,7 +50028,7 @@ declare module BABYLON {
         /** WorldViewProjection */
         WorldViewProjection = 6,
         /** Will be filled by the block itself */
-        BlockBased = 7
+        Automatic = 7
     }
 }
 declare module BABYLON {
@@ -50678,10 +50678,18 @@ declare module BABYLON {
         setAsAttribute(attributeName?: string): NodeMaterialConnectionPoint;
         /**
          * Set the source of this connection point to a well known value
-         * @param value define the well known value to use (world, view, etc...)
+         * @param value define the well known value to use (world, view, etc...) or null to switch to manual value
          * @returns the current connection point
          */
-        setAsWellKnownValue(value: NodeMaterialWellKnownValues): NodeMaterialConnectionPoint;
+        setAsWellKnownValue(value: Nullable<NodeMaterialWellKnownValues>): NodeMaterialConnectionPoint;
+        /**
+         * Gets a boolean indicating that the current connection point is a well known value
+         */
+        readonly isWellKnownValue: boolean;
+        /**
+         * Gets or sets the current well known value or null if not defined as well know value
+         */
+        wellKnownValue: Nullable<NodeMaterialWellKnownValues>;
         private _getTypeLength;
         /**
          * Connect this point to another connection point
@@ -65595,7 +65603,7 @@ declare module BABYLON.GLTF2.Exporter.Extensions {
          * @param scale
          * @param scene
          */
-        textureTransformTextureAsync(babylonTexture: Texture, offset: Vector2, rotation: number, scale: Vector2, scene: Scene): Promise<BaseTexture>;
+        private _textureTransformTextureAsync;
     }
 }
 declare module BABYLON.GLTF2.Exporter.Extensions {

+ 7 - 7
dist/preview release/inspector/babylon.inspector.bundle.max.js

@@ -7,7 +7,7 @@
 		exports["babylonjs-inspector"] = factory(require("babylonjs-gui"), require("babylonjs-loaders"), require("babylonjs-serializers"), require("babylonjs"));
 	else
 		root["INSPECTOR"] = factory(root["BABYLON"]["GUI"], root["BABYLON"], root["BABYLON"], root["BABYLON"]);
-})((typeof self !== "undefined" ? self : typeof global !== "undefined" ? global : this), function(__WEBPACK_EXTERNAL_MODULE_babylonjs_gui_2D_adtInstrumentation__, __WEBPACK_EXTERNAL_MODULE_babylonjs_loaders_glTF_index__, __WEBPACK_EXTERNAL_MODULE_babylonjs_serializers_glTF_2_0_index__, __WEBPACK_EXTERNAL_MODULE_babylonjs_Misc_observable__) {
+})((typeof self !== "undefined" ? self : typeof global !== "undefined" ? global : this), function(__WEBPACK_EXTERNAL_MODULE_babylonjs_gui_2D_controls_image__, __WEBPACK_EXTERNAL_MODULE_babylonjs_loaders_glTF_index__, __WEBPACK_EXTERNAL_MODULE_babylonjs_serializers_glTF_2_0_index__, __WEBPACK_EXTERNAL_MODULE_babylonjs_Misc_observable__) {
 return /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -36045,7 +36045,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _lineContainerComponent__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../lineContainerComponent */ "./components/actionTabs/lineContainerComponent.tsx");
 /* harmony import */ var _lines_textLineComponent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../lines/textLineComponent */ "./components/actionTabs/lines/textLineComponent.tsx");
-/* harmony import */ var babylonjs_gui_2D_controls_control__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! babylonjs-gui/2D/controls/control */ "babylonjs-gui/2D/adtInstrumentation");
+/* harmony import */ var babylonjs_gui_2D_controls_control__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! babylonjs-gui/2D/controls/control */ "babylonjs-gui/2D/controls/image");
 /* harmony import */ var babylonjs_gui_2D_controls_control__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(babylonjs_gui_2D_controls_control__WEBPACK_IMPORTED_MODULE_4__);
 /* harmony import */ var _lines_sliderLineComponent__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../lines/sliderLineComponent */ "./components/actionTabs/lines/sliderLineComponent.tsx");
 /* harmony import */ var _lines_floatLineComponent__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../lines/floatLineComponent */ "./components/actionTabs/lines/floatLineComponent.tsx");
@@ -36346,7 +36346,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _commonControlPropertyGridComponent__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./commonControlPropertyGridComponent */ "./components/actionTabs/tabs/propertyGrids/gui/commonControlPropertyGridComponent.tsx");
 /* harmony import */ var _lineContainerComponent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../lineContainerComponent */ "./components/actionTabs/lineContainerComponent.tsx");
-/* harmony import */ var babylonjs_gui_2D_controls_image__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! babylonjs-gui/2D/controls/image */ "babylonjs-gui/2D/adtInstrumentation");
+/* harmony import */ var babylonjs_gui_2D_controls_image__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! babylonjs-gui/2D/controls/image */ "babylonjs-gui/2D/controls/image");
 /* harmony import */ var babylonjs_gui_2D_controls_image__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(babylonjs_gui_2D_controls_image__WEBPACK_IMPORTED_MODULE_4__);
 /* harmony import */ var _lines_floatLineComponent__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../lines/floatLineComponent */ "./components/actionTabs/lines/floatLineComponent.tsx");
 /* harmony import */ var _lines_checkBoxLineComponent__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../lines/checkBoxLineComponent */ "./components/actionTabs/lines/checkBoxLineComponent.tsx");
@@ -36760,7 +36760,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../node_modules/react/index.js");
 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _commonControlPropertyGridComponent__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./commonControlPropertyGridComponent */ "./components/actionTabs/tabs/propertyGrids/gui/commonControlPropertyGridComponent.tsx");
-/* harmony import */ var babylonjs_gui_2D_controls_textBlock__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! babylonjs-gui/2D/controls/textBlock */ "babylonjs-gui/2D/adtInstrumentation");
+/* harmony import */ var babylonjs_gui_2D_controls_textBlock__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! babylonjs-gui/2D/controls/textBlock */ "babylonjs-gui/2D/controls/image");
 /* harmony import */ var babylonjs_gui_2D_controls_textBlock__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(babylonjs_gui_2D_controls_textBlock__WEBPACK_IMPORTED_MODULE_3__);
 /* harmony import */ var _lineContainerComponent__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../lineContainerComponent */ "./components/actionTabs/lineContainerComponent.tsx");
 /* harmony import */ var _lines_textInputLineComponent__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../lines/textInputLineComponent */ "./components/actionTabs/lines/textInputLineComponent.tsx");
@@ -37884,7 +37884,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony import */ var _lines_optionsLineComponent__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../lines/optionsLineComponent */ "./components/actionTabs/lines/optionsLineComponent.tsx");
 /* harmony import */ var _lines_fileButtonLineComponent__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../lines/fileButtonLineComponent */ "./components/actionTabs/lines/fileButtonLineComponent.tsx");
 /* harmony import */ var _lines_valueLineComponent__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../../lines/valueLineComponent */ "./components/actionTabs/lines/valueLineComponent.tsx");
-/* harmony import */ var babylonjs_gui_2D_adtInstrumentation__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! babylonjs-gui/2D/adtInstrumentation */ "babylonjs-gui/2D/adtInstrumentation");
+/* harmony import */ var babylonjs_gui_2D_adtInstrumentation__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! babylonjs-gui/2D/adtInstrumentation */ "babylonjs-gui/2D/controls/image");
 /* harmony import */ var babylonjs_gui_2D_adtInstrumentation__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(babylonjs_gui_2D_adtInstrumentation__WEBPACK_IMPORTED_MODULE_12__);
 /* harmony import */ var _customPropertyGridComponent__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../customPropertyGridComponent */ "./components/actionTabs/tabs/propertyGrids/customPropertyGridComponent.tsx");
 
@@ -42427,14 +42427,14 @@ var Tools = /** @class */ (function () {
 
 /***/ }),
 
-/***/ "babylonjs-gui/2D/adtInstrumentation":
+/***/ "babylonjs-gui/2D/controls/image":
 /*!************************************************************************************************************************!*\
   !*** external {"root":["BABYLON","GUI"],"commonjs":"babylonjs-gui","commonjs2":"babylonjs-gui","amd":"babylonjs-gui"} ***!
   \************************************************************************************************************************/
 /*! no static exports found */
 /***/ (function(module, exports) {
 
-module.exports = __WEBPACK_EXTERNAL_MODULE_babylonjs_gui_2D_adtInstrumentation__;
+module.exports = __WEBPACK_EXTERNAL_MODULE_babylonjs_gui_2D_controls_image__;
 
 /***/ }),
 

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 1
dist/preview release/inspector/babylon.inspector.bundle.max.js.map


+ 209 - 75
dist/preview release/nodeEditor/babylon.nodeEditor.d.ts

@@ -1,6 +1,81 @@
 /// <reference types="react" />
 declare module NODEEDITOR {
     /**
+     * Port model
+     */
+    export class DefaultPortModel extends PortModel {
+        /**
+         * If the port is input or output
+         */
+        position: string | "input" | "output";
+        /**
+         * What the port is connected to
+         */
+        connection: BABYLON.Nullable<BABYLON.NodeMaterialConnectionPoint>;
+        static idCounter: number;
+        constructor(name: string, type?: string);
+        syncWithNodeMaterialConnectionPoint(connection: BABYLON.NodeMaterialConnectionPoint): void;
+        getNodeModel(): DefaultNodeModel;
+        link(outPort: DefaultPortModel): LinkModel<import("storm-react-diagrams").LinkModelListener>;
+        getInputFromBlock(): void;
+        createLinkModel(): LinkModel;
+        getValue: Function;
+        static SortInputOutput(a: BABYLON.Nullable<DefaultPortModel>, b: BABYLON.Nullable<DefaultPortModel>): {
+            input: DefaultPortModel;
+            output: DefaultPortModel;
+        } | null;
+    }
+}
+declare module NODEEDITOR {
+    interface ITextLineComponentProps {
+        label: string;
+        value: string;
+        color?: string;
+        underline?: boolean;
+        onLink?: () => void;
+    }
+    export class TextLineComponent extends React.Component<ITextLineComponentProps> {
+        constructor(props: ITextLineComponentProps);
+        onLink(): void;
+        renderContent(): JSX.Element;
+        render(): JSX.Element;
+    }
+}
+declare module NODEEDITOR {
+    /**
+     * Generic node model which stores information about a node editor block
+     */
+    export class GenericNodeModel extends DefaultNodeModel {
+        /**
+         * Labels for the block
+         */
+        header: string;
+        /**
+         * BABYLON.Vector2 for the node if it exists
+         */
+        vector2: BABYLON.Nullable<BABYLON.Vector2>;
+        /**
+         * BABYLON.Vector3 for the node if it exists
+         */
+        vector3: BABYLON.Nullable<BABYLON.Vector3>;
+        /**
+         * BABYLON.Vector4 for the node if it exists
+         */
+        vector4: BABYLON.Nullable<BABYLON.Vector4>;
+        /**
+         * BABYLON.Matrix for the node if it exists
+         */
+        matrix: BABYLON.Nullable<BABYLON.Matrix>;
+        /**
+         * Constructs the node model
+         */
+        constructor();
+        prepare(options: NodeCreationOptions, nodes: Array<DefaultNodeModel>, model: DiagramModel, graphEditor: GraphEditor, filterInputs: string[]): void;
+        renderProperties(globalState: GlobalState): JSX.Element;
+    }
+}
+declare module NODEEDITOR {
+    /**
      * GenericNodeWidgetProps
      */
     export interface GenericNodeWidgetProps {
@@ -144,6 +219,7 @@ declare module NODEEDITOR {
          */
         constructor();
         renderProperties(globalState: GlobalState): JSX.Element;
+        prepare(options: NodeCreationOptions, nodes: Array<DefaultNodeModel>, model: DiagramModel, graphEditor: GraphEditor, filterInputs: string[]): void;
     }
 }
 declare module NODEEDITOR {
@@ -220,36 +296,6 @@ declare module NODEEDITOR {
     }
 }
 declare module NODEEDITOR {
-    interface IGraphEditorProps {
-        globalState: GlobalState;
-    }
-    export class NodeCreationOptions {
-        column: number;
-        nodeMaterialBlock?: BABYLON.NodeMaterialBlock;
-        type?: string;
-    }
-    export class GraphEditor extends React.Component<IGraphEditorProps> {
-        private _engine;
-        private _model;
-        private _nodes;
-        /**
-         * Current row/column position used when adding new nodes
-         */
-        private _rowPos;
-        /**
-         * Creates a node and recursivly creates its parent nodes from it's input
-         * @param nodeMaterialBlock
-         */
-        createNodeFromObject(options: NodeCreationOptions): GenericNodeModel | TextureNodeModel;
-        componentDidMount(): void;
-        componentWillUnmount(): void;
-        constructor(props: IGraphEditorProps);
-        addNodeFromClass(ObjectClass: typeof BABYLON.NodeMaterialBlock): GenericNodeModel | TextureNodeModel;
-        addValueNode(type: string, column?: number, connection?: BABYLON.NodeMaterialConnectionPoint): GenericNodeModel | TextureNodeModel | null;
-        render(): JSX.Element;
-    }
-}
-declare module NODEEDITOR {
     interface INumericInputComponentProps {
         label: string;
         value: number;
@@ -311,7 +357,7 @@ declare module NODEEDITOR {
 declare module NODEEDITOR {
     interface IVector2PropertyTabComponentProps {
         globalState: GlobalState;
-        node: GenericNodeModel;
+        connection: BABYLON.NodeMaterialConnectionPoint;
     }
     export class Vector2PropertyTabComponent extends React.Component<IVector2PropertyTabComponentProps> {
         render(): JSX.Element;
@@ -351,73 +397,161 @@ declare module NODEEDITOR {
 declare module NODEEDITOR {
     interface IVector3PropertyTabComponentProps {
         globalState: GlobalState;
-        node: GenericNodeModel;
+        connection: BABYLON.NodeMaterialConnectionPoint;
     }
     export class Vector3PropertyTabComponent extends React.Component<IVector3PropertyTabComponentProps> {
         render(): JSX.Element;
     }
 }
 declare module NODEEDITOR {
+    export interface ICheckBoxLineComponentProps {
+        label: string;
+        target?: any;
+        propertyName?: string;
+        isSelected?: () => boolean;
+        onSelect?: (value: boolean) => void;
+        onValueChanged?: () => void;
+        onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
+    }
+    export class CheckBoxLineComponent extends React.Component<ICheckBoxLineComponentProps, {
+        isSelected: boolean;
+    }> {
+        private static _UniqueIdSeed;
+        private _uniqueId;
+        private _localChange;
+        constructor(props: ICheckBoxLineComponentProps);
+        shouldComponentUpdate(nextProps: ICheckBoxLineComponentProps, nextState: {
+            isSelected: boolean;
+        }): boolean;
+        onChange(): void;
+        render(): JSX.Element;
+    }
+}
+declare module NODEEDITOR {
+    class ListLineOption {
+        label: string;
+        value: number;
+    }
+    interface IOptionsLineComponentProps {
+        label: string;
+        target: any;
+        propertyName: string;
+        options: ListLineOption[];
+        noDirectUpdate?: boolean;
+        onSelect?: (value: number) => void;
+        onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
+    }
+    export class OptionsLineComponent extends React.Component<IOptionsLineComponentProps, {
+        value: number;
+    }> {
+        private _localChange;
+        constructor(props: IOptionsLineComponentProps);
+        shouldComponentUpdate(nextProps: IOptionsLineComponentProps, nextState: {
+            value: number;
+        }): boolean;
+        raiseOnPropertyChanged(newValue: number, previousValue: number): void;
+        updateValue(valueString: string): void;
+        render(): JSX.Element;
+    }
+}
+declare module NODEEDITOR {
+    interface IInputPropertyTabComponentProps {
+        globalState: GlobalState;
+        inputNode: InputNodeModel;
+    }
+    export class InputPropertyTabComponentProps extends React.Component<IInputPropertyTabComponentProps> {
+        constructor(props: IInputPropertyTabComponentProps);
+        renderValue(globalState: GlobalState): JSX.Element | null;
+        setDefaultValue(): void;
+        render(): JSX.Element;
+    }
+}
+declare module NODEEDITOR {
     /**
      * Generic node model which stores information about a node editor block
      */
-    export class GenericNodeModel extends DefaultNodeModel {
+    export class InputNodeModel extends DefaultNodeModel {
+        connection?: BABYLON.NodeMaterialConnectionPoint;
         /**
-         * Labels for the block
-         */
-        headerLabels: Array<{
-            text: string;
-        }>;
-        /**
-         * BABYLON.Vector2 for the node if it exists
+         * Constructs the node model
          */
-        vector2: BABYLON.Nullable<BABYLON.Vector2>;
+        constructor();
+        renderProperties(globalState: GlobalState): JSX.Element | null;
+    }
+}
+declare module NODEEDITOR {
+    /**
+     * GenericNodeWidgetProps
+     */
+    export interface InputNodeWidgetProps {
+        node: BABYLON.Nullable<InputNodeModel>;
+        globalState: GlobalState;
+    }
+    /**
+     * Used to display a node block for the node editor
+     */
+    export class InputNodeWidget extends React.Component<InputNodeWidgetProps> {
         /**
-         * BABYLON.Vector3 for the node if it exists
+         * Creates a GenericNodeWidget
+         * @param props
          */
-        vector3: BABYLON.Nullable<BABYLON.Vector3>;
+        constructor(props: InputNodeWidgetProps);
+        render(): JSX.Element;
+    }
+}
+declare module NODEEDITOR {
+    /**
+     * Node factory which creates editor nodes
+     */
+    export class InputNodeFactory extends SRD.AbstractNodeFactory {
+        private _globalState;
         /**
-         * BABYLON.Vector4 for the node if it exists
+         * Constructs a GenericNodeFactory
          */
-        vector4: BABYLON.Nullable<BABYLON.Vector4>;
+        constructor(globalState: GlobalState);
         /**
-         * BABYLON.Matrix for the node if it exists
+         * Generates a node widget
+         * @param diagramEngine diagram engine
+         * @param node node to generate
+         * @returns node widget jsx
          */
-        matrix: BABYLON.Nullable<BABYLON.Matrix>;
+        generateReactWidget(diagramEngine: SRD.DiagramEngine, node: InputNodeModel): JSX.Element;
         /**
-         * Constructs the node model
+         * Gets a new instance of a node model
+         * @returns input node model
          */
-        constructor();
-        prepareConnection(type: string, outPort: GenericPortModel, connection?: BABYLON.NodeMaterialConnectionPoint): void;
-        prepare(options: NodeCreationOptions, nodes: Array<DefaultNodeModel>, model: DiagramModel, graphEditor: GraphEditor): void;
-        renderProperties(globalState: GlobalState): JSX.Element | null;
+        getNewInstance(): InputNodeModel;
     }
 }
 declare module NODEEDITOR {
-    /**
-     * Port model for the generic node
-     */
-    export class GenericPortModel extends PortModel {
+    interface IGraphEditorProps {
+        globalState: GlobalState;
+    }
+    export class NodeCreationOptions {
+        column: number;
+        nodeMaterialBlock?: BABYLON.NodeMaterialBlock;
+        type?: string;
+        connection?: BABYLON.NodeMaterialConnectionPoint;
+    }
+    export class GraphEditor extends React.Component<IGraphEditorProps> {
+        private _engine;
+        private _model;
+        private _nodes;
         /**
-         * If the port is input or output
+         * Current row/column position used when adding new nodes
          */
-        position: string | "input" | "output";
+        private _rowPos;
         /**
-         * What the port is connected to
+         * Creates a node and recursivly creates its parent nodes from it's input
+         * @param nodeMaterialBlock
          */
-        connection: BABYLON.Nullable<BABYLON.NodeMaterialConnectionPoint>;
-        static idCounter: number;
-        constructor(name: string, type?: string);
-        syncWithNodeMaterialConnectionPoint(connection: BABYLON.NodeMaterialConnectionPoint): void;
-        getNodeModel(): GenericNodeModel;
-        link(outPort: GenericPortModel): LinkModel<import("storm-react-diagrams").LinkModelListener>;
-        getInputFromBlock(): void;
-        createLinkModel(): LinkModel;
-        getValue: Function;
-        static SortInputOutput(a: BABYLON.Nullable<GenericPortModel>, b: BABYLON.Nullable<GenericPortModel>): {
-            input: GenericPortModel;
-            output: GenericPortModel;
-        } | null;
+        createNodeFromObject(options: NodeCreationOptions): DefaultNodeModel;
+        componentDidMount(): void;
+        componentWillUnmount(): void;
+        constructor(props: IGraphEditorProps);
+        addNodeFromClass(ObjectClass: typeof BABYLON.NodeMaterialBlock): DefaultNodeModel;
+        addValueNode(type: string, column?: number, connection?: BABYLON.NodeMaterialConnectionPoint): DefaultNodeModel;
+        render(): JSX.Element;
     }
 }
 declare module NODEEDITOR {
@@ -430,14 +564,13 @@ declare module NODEEDITOR {
          */
         block: BABYLON.Nullable<BABYLON.NodeMaterialBlock>;
         ports: {
-            [s: string]: GenericPortModel;
+            [s: string]: DefaultPortModel;
         };
         /**
          * Constructs the node model
          */
         constructor(key: string);
-        prepareConnection(type: string, outPort: GenericPortModel, connection?: BABYLON.NodeMaterialConnectionPoint): void;
-        prepare(options: NodeCreationOptions, nodes: Array<DefaultNodeModel>, model: DiagramModel, graphEditor: GraphEditor): void;
+        prepare(options: NodeCreationOptions, nodes: Array<DefaultNodeModel>, model: DiagramModel, graphEditor: GraphEditor, filterInputs: string[]): void;
         renderProperties(globalState: GlobalState): JSX.Element | null;
     }
 }
@@ -447,6 +580,7 @@ declare module NODEEDITOR {
         hostElement: HTMLElement;
         hostDocument: HTMLDocument;
         onSelectionChangedObservable: BABYLON.Observable<BABYLON.Nullable<DefaultNodeModel>>;
+        onRebuildRequiredObservable: BABYLON.Observable<void>;
     }
 }
 declare module NODEEDITOR {

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 7 - 7
dist/preview release/nodeEditor/babylon.nodeEditor.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 672 - 193
dist/preview release/nodeEditor/babylon.nodeEditor.max.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 1
dist/preview release/nodeEditor/babylon.nodeEditor.max.js.map


+ 457 - 171
dist/preview release/nodeEditor/babylon.nodeEditor.module.d.ts

@@ -1,9 +1,95 @@
 /// <reference types="react" />
+declare module "babylonjs-node-editor/components/diagram/defaultPortModel" {
+    import { LinkModel, PortModel } from "storm-react-diagrams";
+    import { Nullable } from 'babylonjs/types';
+    import { NodeMaterialConnectionPoint } from 'babylonjs/Materials/Node/nodeMaterialBlockConnectionPoint';
+    import { DefaultNodeModel } from "babylonjs-node-editor/components/diagram/defaultNodeModel";
+    /**
+     * Port model
+     */
+    export class DefaultPortModel extends PortModel {
+        /**
+         * If the port is input or output
+         */
+        position: string | "input" | "output";
+        /**
+         * What the port is connected to
+         */
+        connection: Nullable<NodeMaterialConnectionPoint>;
+        static idCounter: number;
+        constructor(name: string, type?: string);
+        syncWithNodeMaterialConnectionPoint(connection: NodeMaterialConnectionPoint): void;
+        getNodeModel(): DefaultNodeModel;
+        link(outPort: DefaultPortModel): LinkModel<import("storm-react-diagrams").LinkModelListener>;
+        getInputFromBlock(): void;
+        createLinkModel(): LinkModel;
+        getValue: Function;
+        static SortInputOutput(a: Nullable<DefaultPortModel>, b: Nullable<DefaultPortModel>): {
+            input: DefaultPortModel;
+            output: DefaultPortModel;
+        } | null;
+    }
+}
+declare module "babylonjs-node-editor/sharedComponents/textLineComponent" {
+    import * as React from "react";
+    interface ITextLineComponentProps {
+        label: string;
+        value: string;
+        color?: string;
+        underline?: boolean;
+        onLink?: () => void;
+    }
+    export class TextLineComponent extends React.Component<ITextLineComponentProps> {
+        constructor(props: ITextLineComponentProps);
+        onLink(): void;
+        renderContent(): JSX.Element;
+        render(): JSX.Element;
+    }
+}
+declare module "babylonjs-node-editor/components/diagram/generic/genericNodeModel" {
+    import { Nullable } from 'babylonjs/types';
+    import { Vector2, Vector3, Vector4, Matrix } from 'babylonjs/Maths/math';
+    import { DefaultNodeModel } from "babylonjs-node-editor/components/diagram/defaultNodeModel";
+    import { DiagramModel } from 'storm-react-diagrams/dist/@types/src/models/DiagramModel';
+    import { GraphEditor, NodeCreationOptions } from "babylonjs-node-editor/graphEditor";
+    import { GlobalState } from "babylonjs-node-editor/globalState";
+    /**
+     * Generic node model which stores information about a node editor block
+     */
+    export class GenericNodeModel extends DefaultNodeModel {
+        /**
+         * Labels for the block
+         */
+        header: string;
+        /**
+         * Vector2 for the node if it exists
+         */
+        vector2: Nullable<Vector2>;
+        /**
+         * Vector3 for the node if it exists
+         */
+        vector3: Nullable<Vector3>;
+        /**
+         * Vector4 for the node if it exists
+         */
+        vector4: Nullable<Vector4>;
+        /**
+         * Matrix for the node if it exists
+         */
+        matrix: Nullable<Matrix>;
+        /**
+         * Constructs the node model
+         */
+        constructor();
+        prepare(options: NodeCreationOptions, nodes: Array<DefaultNodeModel>, model: DiagramModel, graphEditor: GraphEditor, filterInputs: string[]): void;
+        renderProperties(globalState: GlobalState): JSX.Element;
+    }
+}
 declare module "babylonjs-node-editor/components/diagram/generic/genericNodeWidget" {
     import * as React from "react";
-    import { GenericNodeModel } from "babylonjs-node-editor/components/diagram/generic/genericNodeModel";
     import { Nullable } from 'babylonjs/types';
     import { GlobalState } from "babylonjs-node-editor/globalState";
+    import { GenericNodeModel } from "babylonjs-node-editor/components/diagram/generic/genericNodeModel";
     /**
      * GenericNodeWidgetProps
      */
@@ -157,6 +243,8 @@ declare module "babylonjs-node-editor/components/diagram/texture/textureNodeMode
     import { Texture } from 'babylonjs/Materials/Textures/texture';
     import { DefaultNodeModel } from "babylonjs-node-editor/components/diagram/defaultNodeModel";
     import { GlobalState } from "babylonjs-node-editor/globalState";
+    import { NodeCreationOptions, GraphEditor } from "babylonjs-node-editor/graphEditor";
+    import { DiagramModel } from 'storm-react-diagrams/dist/@types/src/models/DiagramModel';
     /**
      * Texture node model which stores information about a node editor block
      */
@@ -170,6 +258,7 @@ declare module "babylonjs-node-editor/components/diagram/texture/textureNodeMode
          */
         constructor();
         renderProperties(globalState: GlobalState): JSX.Element;
+        prepare(options: NodeCreationOptions, nodes: Array<DefaultNodeModel>, model: DiagramModel, graphEditor: GraphEditor, filterInputs: string[]): void;
     }
 }
 declare module "babylonjs-node-editor/sharedComponents/textureLineComponent" {
@@ -254,42 +343,6 @@ declare module "babylonjs-node-editor/components/diagram/texture/textureNodeFact
         getNewInstance(): TextureNodeModel;
     }
 }
-declare module "babylonjs-node-editor/graphEditor" {
-    import * as React from "react";
-    import { GlobalState } from "babylonjs-node-editor/globalState";
-    import { GenericNodeModel } from "babylonjs-node-editor/components/diagram/generic/genericNodeModel";
-    import { NodeMaterialBlock } from 'babylonjs/Materials/Node/nodeMaterialBlock';
-    import { NodeMaterialConnectionPoint } from 'babylonjs/Materials/Node/nodeMaterialBlockConnectionPoint';
-    import { TextureNodeModel } from "babylonjs-node-editor/components/diagram/texture/textureNodeModel";
-    interface IGraphEditorProps {
-        globalState: GlobalState;
-    }
-    export class NodeCreationOptions {
-        column: number;
-        nodeMaterialBlock?: NodeMaterialBlock;
-        type?: string;
-    }
-    export class GraphEditor extends React.Component<IGraphEditorProps> {
-        private _engine;
-        private _model;
-        private _nodes;
-        /**
-         * Current row/column position used when adding new nodes
-         */
-        private _rowPos;
-        /**
-         * Creates a node and recursivly creates its parent nodes from it's input
-         * @param nodeMaterialBlock
-         */
-        createNodeFromObject(options: NodeCreationOptions): GenericNodeModel | TextureNodeModel;
-        componentDidMount(): void;
-        componentWillUnmount(): void;
-        constructor(props: IGraphEditorProps);
-        addNodeFromClass(ObjectClass: typeof NodeMaterialBlock): GenericNodeModel | TextureNodeModel;
-        addValueNode(type: string, column?: number, connection?: NodeMaterialConnectionPoint): GenericNodeModel | TextureNodeModel | null;
-        render(): JSX.Element;
-    }
-}
 declare module "babylonjs-node-editor/sharedComponents/numericInputComponent" {
     import * as React from "react";
     interface INumericInputComponentProps {
@@ -357,10 +410,10 @@ declare module "babylonjs-node-editor/sharedComponents/vector2LineComponent" {
 declare module "babylonjs-node-editor/components/propertyTab/properties/vector2PropertyTabComponent" {
     import * as React from "react";
     import { GlobalState } from "babylonjs-node-editor/globalState";
-    import { GenericNodeModel } from "babylonjs-node-editor/components/diagram/generic/genericNodeModel";
+    import { NodeMaterialConnectionPoint } from 'babylonjs/Materials/Node/nodeMaterialBlockConnectionPoint';
     interface IVector2PropertyTabComponentProps {
         globalState: GlobalState;
-        node: GenericNodeModel;
+        connection: NodeMaterialConnectionPoint;
     }
     export class Vector2PropertyTabComponent extends React.Component<IVector2PropertyTabComponentProps> {
         render(): JSX.Element;
@@ -404,98 +457,197 @@ declare module "babylonjs-node-editor/sharedComponents/vector3LineComponent" {
 declare module "babylonjs-node-editor/components/propertyTab/properties/vector3PropertyTabComponent" {
     import * as React from "react";
     import { GlobalState } from "babylonjs-node-editor/globalState";
-    import { GenericNodeModel } from "babylonjs-node-editor/components/diagram/generic/genericNodeModel";
+    import { NodeMaterialConnectionPoint } from 'babylonjs/Materials/Node/nodeMaterialBlockConnectionPoint';
     interface IVector3PropertyTabComponentProps {
         globalState: GlobalState;
-        node: GenericNodeModel;
+        connection: NodeMaterialConnectionPoint;
     }
     export class Vector3PropertyTabComponent extends React.Component<IVector3PropertyTabComponentProps> {
         render(): JSX.Element;
     }
 }
-declare module "babylonjs-node-editor/components/diagram/generic/genericNodeModel" {
-    import { Nullable } from 'babylonjs/types';
-    import { Vector2, Vector3, Vector4, Matrix } from 'babylonjs/Maths/math';
+declare module "babylonjs-node-editor/sharedComponents/checkBoxLineComponent" {
+    import * as React from "react";
+    import { Observable } from "babylonjs/Misc/observable";
+    import { PropertyChangedEvent } from "babylonjs-node-editor/sharedComponents/propertyChangedEvent";
+    export interface ICheckBoxLineComponentProps {
+        label: string;
+        target?: any;
+        propertyName?: string;
+        isSelected?: () => boolean;
+        onSelect?: (value: boolean) => void;
+        onValueChanged?: () => void;
+        onPropertyChangedObservable?: Observable<PropertyChangedEvent>;
+    }
+    export class CheckBoxLineComponent extends React.Component<ICheckBoxLineComponentProps, {
+        isSelected: boolean;
+    }> {
+        private static _UniqueIdSeed;
+        private _uniqueId;
+        private _localChange;
+        constructor(props: ICheckBoxLineComponentProps);
+        shouldComponentUpdate(nextProps: ICheckBoxLineComponentProps, nextState: {
+            isSelected: boolean;
+        }): boolean;
+        onChange(): void;
+        render(): JSX.Element;
+    }
+}
+declare module "babylonjs-node-editor/sharedComponents/optionsLineComponent" {
+    import * as React from "react";
+    import { Observable } from "babylonjs/Misc/observable";
+    import { PropertyChangedEvent } from "babylonjs-node-editor/sharedComponents/propertyChangedEvent";
+    class ListLineOption {
+        label: string;
+        value: number;
+    }
+    interface IOptionsLineComponentProps {
+        label: string;
+        target: any;
+        propertyName: string;
+        options: ListLineOption[];
+        noDirectUpdate?: boolean;
+        onSelect?: (value: number) => void;
+        onPropertyChangedObservable?: Observable<PropertyChangedEvent>;
+    }
+    export class OptionsLineComponent extends React.Component<IOptionsLineComponentProps, {
+        value: number;
+    }> {
+        private _localChange;
+        constructor(props: IOptionsLineComponentProps);
+        shouldComponentUpdate(nextProps: IOptionsLineComponentProps, nextState: {
+            value: number;
+        }): boolean;
+        raiseOnPropertyChanged(newValue: number, previousValue: number): void;
+        updateValue(valueString: string): void;
+        render(): JSX.Element;
+    }
+}
+declare module "babylonjs-node-editor/components/diagram/input/inputNodePropertyComponent" {
+    import * as React from "react";
+    import { GlobalState } from "babylonjs-node-editor/globalState";
+    import { InputNodeModel } from "babylonjs-node-editor/components/diagram/input/inputNodeModel";
+    interface IInputPropertyTabComponentProps {
+        globalState: GlobalState;
+        inputNode: InputNodeModel;
+    }
+    export class InputPropertyTabComponentProps extends React.Component<IInputPropertyTabComponentProps> {
+        constructor(props: IInputPropertyTabComponentProps);
+        renderValue(globalState: GlobalState): JSX.Element | null;
+        setDefaultValue(): void;
+        render(): JSX.Element;
+    }
+}
+declare module "babylonjs-node-editor/components/diagram/input/inputNodeModel" {
     import { DefaultNodeModel } from "babylonjs-node-editor/components/diagram/defaultNodeModel";
-    import { DiagramModel } from 'storm-react-diagrams/dist/@types/src/models/DiagramModel';
-    import { GraphEditor, NodeCreationOptions } from "babylonjs-node-editor/graphEditor";
-    import { GenericPortModel } from "babylonjs-node-editor/components/diagram/generic/genericPortModel";
     import { NodeMaterialConnectionPoint } from 'babylonjs/Materials/Node/nodeMaterialBlockConnectionPoint';
     import { GlobalState } from "babylonjs-node-editor/globalState";
     /**
      * Generic node model which stores information about a node editor block
      */
-    export class GenericNodeModel extends DefaultNodeModel {
+    export class InputNodeModel extends DefaultNodeModel {
+        connection?: NodeMaterialConnectionPoint;
         /**
-         * Labels for the block
-         */
-        headerLabels: Array<{
-            text: string;
-        }>;
-        /**
-         * Vector2 for the node if it exists
+         * Constructs the node model
          */
-        vector2: Nullable<Vector2>;
+        constructor();
+        renderProperties(globalState: GlobalState): JSX.Element | null;
+    }
+}
+declare module "babylonjs-node-editor/components/diagram/input/inputNodeWidget" {
+    import * as React from "react";
+    import { InputNodeModel } from "babylonjs-node-editor/components/diagram/input/inputNodeModel";
+    import { Nullable } from 'babylonjs/types';
+    import { GlobalState } from "babylonjs-node-editor/globalState";
+    /**
+     * GenericNodeWidgetProps
+     */
+    export interface InputNodeWidgetProps {
+        node: Nullable<InputNodeModel>;
+        globalState: GlobalState;
+    }
+    /**
+     * Used to display a node block for the node editor
+     */
+    export class InputNodeWidget extends React.Component<InputNodeWidgetProps> {
         /**
-         * Vector3 for the node if it exists
+         * Creates a GenericNodeWidget
+         * @param props
          */
-        vector3: Nullable<Vector3>;
+        constructor(props: InputNodeWidgetProps);
+        render(): JSX.Element;
+    }
+}
+declare module "babylonjs-node-editor/components/diagram/input/inputNodeFactory" {
+    import * as SRD from "storm-react-diagrams";
+    import { GlobalState } from "babylonjs-node-editor/globalState";
+    import { InputNodeModel } from "babylonjs-node-editor/components/diagram/input/inputNodeModel";
+    /**
+     * Node factory which creates editor nodes
+     */
+    export class InputNodeFactory extends SRD.AbstractNodeFactory {
+        private _globalState;
         /**
-         * Vector4 for the node if it exists
+         * Constructs a GenericNodeFactory
          */
-        vector4: Nullable<Vector4>;
+        constructor(globalState: GlobalState);
         /**
-         * Matrix for the node if it exists
+         * Generates a node widget
+         * @param diagramEngine diagram engine
+         * @param node node to generate
+         * @returns node widget jsx
          */
-        matrix: Nullable<Matrix>;
+        generateReactWidget(diagramEngine: SRD.DiagramEngine, node: InputNodeModel): JSX.Element;
         /**
-         * Constructs the node model
+         * Gets a new instance of a node model
+         * @returns input node model
          */
-        constructor();
-        prepareConnection(type: string, outPort: GenericPortModel, connection?: NodeMaterialConnectionPoint): void;
-        prepare(options: NodeCreationOptions, nodes: Array<DefaultNodeModel>, model: DiagramModel, graphEditor: GraphEditor): void;
-        renderProperties(globalState: GlobalState): JSX.Element | null;
+        getNewInstance(): InputNodeModel;
     }
 }
-declare module "babylonjs-node-editor/components/diagram/generic/genericPortModel" {
-    import { LinkModel, PortModel } from "storm-react-diagrams";
-    import { Nullable } from 'babylonjs/types';
+declare module "babylonjs-node-editor/graphEditor" {
+    import * as React from "react";
+    import { GlobalState } from "babylonjs-node-editor/globalState";
+    import { NodeMaterialBlock } from 'babylonjs/Materials/Node/nodeMaterialBlock';
     import { NodeMaterialConnectionPoint } from 'babylonjs/Materials/Node/nodeMaterialBlockConnectionPoint';
-    import { GenericNodeModel } from "babylonjs-node-editor/components/diagram/generic/genericNodeModel";
-    /**
-     * Port model for the generic node
-     */
-    export class GenericPortModel extends PortModel {
+    import { DefaultNodeModel } from "babylonjs-node-editor/components/diagram/defaultNodeModel";
+    interface IGraphEditorProps {
+        globalState: GlobalState;
+    }
+    export class NodeCreationOptions {
+        column: number;
+        nodeMaterialBlock?: NodeMaterialBlock;
+        type?: string;
+        connection?: NodeMaterialConnectionPoint;
+    }
+    export class GraphEditor extends React.Component<IGraphEditorProps> {
+        private _engine;
+        private _model;
+        private _nodes;
         /**
-         * If the port is input or output
+         * Current row/column position used when adding new nodes
          */
-        position: string | "input" | "output";
+        private _rowPos;
         /**
-         * What the port is connected to
+         * Creates a node and recursivly creates its parent nodes from it's input
+         * @param nodeMaterialBlock
          */
-        connection: Nullable<NodeMaterialConnectionPoint>;
-        static idCounter: number;
-        constructor(name: string, type?: string);
-        syncWithNodeMaterialConnectionPoint(connection: NodeMaterialConnectionPoint): void;
-        getNodeModel(): GenericNodeModel;
-        link(outPort: GenericPortModel): LinkModel<import("storm-react-diagrams").LinkModelListener>;
-        getInputFromBlock(): void;
-        createLinkModel(): LinkModel;
-        getValue: Function;
-        static SortInputOutput(a: Nullable<GenericPortModel>, b: Nullable<GenericPortModel>): {
-            input: GenericPortModel;
-            output: GenericPortModel;
-        } | null;
+        createNodeFromObject(options: NodeCreationOptions): DefaultNodeModel;
+        componentDidMount(): void;
+        componentWillUnmount(): void;
+        constructor(props: IGraphEditorProps);
+        addNodeFromClass(ObjectClass: typeof NodeMaterialBlock): DefaultNodeModel;
+        addValueNode(type: string, column?: number, connection?: NodeMaterialConnectionPoint): DefaultNodeModel;
+        render(): JSX.Element;
     }
 }
 declare module "babylonjs-node-editor/components/diagram/defaultNodeModel" {
     import { NodeModel, DiagramModel } from "storm-react-diagrams";
     import { Nullable } from 'babylonjs/types';
     import { NodeMaterialBlock } from 'babylonjs/Materials/Node/nodeMaterialBlock';
-    import { GenericPortModel } from "babylonjs-node-editor/components/diagram/generic/genericPortModel";
     import { GraphEditor, NodeCreationOptions } from "babylonjs-node-editor/graphEditor";
-    import { NodeMaterialConnectionPoint } from 'babylonjs/Materials/Node/nodeMaterialBlockConnectionPoint';
     import { GlobalState } from "babylonjs-node-editor/globalState";
+    import { DefaultPortModel } from "babylonjs-node-editor/components/diagram/defaultPortModel";
     /**
      * Generic node model which stores information about a node editor block
      */
@@ -505,14 +657,13 @@ declare module "babylonjs-node-editor/components/diagram/defaultNodeModel" {
          */
         block: Nullable<NodeMaterialBlock>;
         ports: {
-            [s: string]: GenericPortModel;
+            [s: string]: DefaultPortModel;
         };
         /**
          * Constructs the node model
          */
         constructor(key: string);
-        prepareConnection(type: string, outPort: GenericPortModel, connection?: NodeMaterialConnectionPoint): void;
-        prepare(options: NodeCreationOptions, nodes: Array<DefaultNodeModel>, model: DiagramModel, graphEditor: GraphEditor): void;
+        prepare(options: NodeCreationOptions, nodes: Array<DefaultNodeModel>, model: DiagramModel, graphEditor: GraphEditor, filterInputs: string[]): void;
         renderProperties(globalState: GlobalState): JSX.Element | null;
     }
 }
@@ -526,6 +677,7 @@ declare module "babylonjs-node-editor/globalState" {
         hostElement: HTMLElement;
         hostDocument: HTMLDocument;
         onSelectionChangedObservable: Observable<Nullable<DefaultNodeModel>>;
+        onRebuildRequiredObservable: Observable<void>;
     }
 }
 declare module "babylonjs-node-editor/sharedComponents/popup" {
@@ -565,6 +717,81 @@ declare module "babylonjs-node-editor" {
 /// <reference types="react" />
 declare module NODEEDITOR {
     /**
+     * Port model
+     */
+    export class DefaultPortModel extends PortModel {
+        /**
+         * If the port is input or output
+         */
+        position: string | "input" | "output";
+        /**
+         * What the port is connected to
+         */
+        connection: BABYLON.Nullable<BABYLON.NodeMaterialConnectionPoint>;
+        static idCounter: number;
+        constructor(name: string, type?: string);
+        syncWithNodeMaterialConnectionPoint(connection: BABYLON.NodeMaterialConnectionPoint): void;
+        getNodeModel(): DefaultNodeModel;
+        link(outPort: DefaultPortModel): LinkModel<import("storm-react-diagrams").LinkModelListener>;
+        getInputFromBlock(): void;
+        createLinkModel(): LinkModel;
+        getValue: Function;
+        static SortInputOutput(a: BABYLON.Nullable<DefaultPortModel>, b: BABYLON.Nullable<DefaultPortModel>): {
+            input: DefaultPortModel;
+            output: DefaultPortModel;
+        } | null;
+    }
+}
+declare module NODEEDITOR {
+    interface ITextLineComponentProps {
+        label: string;
+        value: string;
+        color?: string;
+        underline?: boolean;
+        onLink?: () => void;
+    }
+    export class TextLineComponent extends React.Component<ITextLineComponentProps> {
+        constructor(props: ITextLineComponentProps);
+        onLink(): void;
+        renderContent(): JSX.Element;
+        render(): JSX.Element;
+    }
+}
+declare module NODEEDITOR {
+    /**
+     * Generic node model which stores information about a node editor block
+     */
+    export class GenericNodeModel extends DefaultNodeModel {
+        /**
+         * Labels for the block
+         */
+        header: string;
+        /**
+         * BABYLON.Vector2 for the node if it exists
+         */
+        vector2: BABYLON.Nullable<BABYLON.Vector2>;
+        /**
+         * BABYLON.Vector3 for the node if it exists
+         */
+        vector3: BABYLON.Nullable<BABYLON.Vector3>;
+        /**
+         * BABYLON.Vector4 for the node if it exists
+         */
+        vector4: BABYLON.Nullable<BABYLON.Vector4>;
+        /**
+         * BABYLON.Matrix for the node if it exists
+         */
+        matrix: BABYLON.Nullable<BABYLON.Matrix>;
+        /**
+         * Constructs the node model
+         */
+        constructor();
+        prepare(options: NodeCreationOptions, nodes: Array<DefaultNodeModel>, model: DiagramModel, graphEditor: GraphEditor, filterInputs: string[]): void;
+        renderProperties(globalState: GlobalState): JSX.Element;
+    }
+}
+declare module NODEEDITOR {
+    /**
      * GenericNodeWidgetProps
      */
     export interface GenericNodeWidgetProps {
@@ -708,6 +935,7 @@ declare module NODEEDITOR {
          */
         constructor();
         renderProperties(globalState: GlobalState): JSX.Element;
+        prepare(options: NodeCreationOptions, nodes: Array<DefaultNodeModel>, model: DiagramModel, graphEditor: GraphEditor, filterInputs: string[]): void;
     }
 }
 declare module NODEEDITOR {
@@ -784,36 +1012,6 @@ declare module NODEEDITOR {
     }
 }
 declare module NODEEDITOR {
-    interface IGraphEditorProps {
-        globalState: GlobalState;
-    }
-    export class NodeCreationOptions {
-        column: number;
-        nodeMaterialBlock?: BABYLON.NodeMaterialBlock;
-        type?: string;
-    }
-    export class GraphEditor extends React.Component<IGraphEditorProps> {
-        private _engine;
-        private _model;
-        private _nodes;
-        /**
-         * Current row/column position used when adding new nodes
-         */
-        private _rowPos;
-        /**
-         * Creates a node and recursivly creates its parent nodes from it's input
-         * @param nodeMaterialBlock
-         */
-        createNodeFromObject(options: NodeCreationOptions): GenericNodeModel | TextureNodeModel;
-        componentDidMount(): void;
-        componentWillUnmount(): void;
-        constructor(props: IGraphEditorProps);
-        addNodeFromClass(ObjectClass: typeof BABYLON.NodeMaterialBlock): GenericNodeModel | TextureNodeModel;
-        addValueNode(type: string, column?: number, connection?: BABYLON.NodeMaterialConnectionPoint): GenericNodeModel | TextureNodeModel | null;
-        render(): JSX.Element;
-    }
-}
-declare module NODEEDITOR {
     interface INumericInputComponentProps {
         label: string;
         value: number;
@@ -875,7 +1073,7 @@ declare module NODEEDITOR {
 declare module NODEEDITOR {
     interface IVector2PropertyTabComponentProps {
         globalState: GlobalState;
-        node: GenericNodeModel;
+        connection: BABYLON.NodeMaterialConnectionPoint;
     }
     export class Vector2PropertyTabComponent extends React.Component<IVector2PropertyTabComponentProps> {
         render(): JSX.Element;
@@ -915,73 +1113,161 @@ declare module NODEEDITOR {
 declare module NODEEDITOR {
     interface IVector3PropertyTabComponentProps {
         globalState: GlobalState;
-        node: GenericNodeModel;
+        connection: BABYLON.NodeMaterialConnectionPoint;
     }
     export class Vector3PropertyTabComponent extends React.Component<IVector3PropertyTabComponentProps> {
         render(): JSX.Element;
     }
 }
 declare module NODEEDITOR {
+    export interface ICheckBoxLineComponentProps {
+        label: string;
+        target?: any;
+        propertyName?: string;
+        isSelected?: () => boolean;
+        onSelect?: (value: boolean) => void;
+        onValueChanged?: () => void;
+        onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
+    }
+    export class CheckBoxLineComponent extends React.Component<ICheckBoxLineComponentProps, {
+        isSelected: boolean;
+    }> {
+        private static _UniqueIdSeed;
+        private _uniqueId;
+        private _localChange;
+        constructor(props: ICheckBoxLineComponentProps);
+        shouldComponentUpdate(nextProps: ICheckBoxLineComponentProps, nextState: {
+            isSelected: boolean;
+        }): boolean;
+        onChange(): void;
+        render(): JSX.Element;
+    }
+}
+declare module NODEEDITOR {
+    class ListLineOption {
+        label: string;
+        value: number;
+    }
+    interface IOptionsLineComponentProps {
+        label: string;
+        target: any;
+        propertyName: string;
+        options: ListLineOption[];
+        noDirectUpdate?: boolean;
+        onSelect?: (value: number) => void;
+        onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
+    }
+    export class OptionsLineComponent extends React.Component<IOptionsLineComponentProps, {
+        value: number;
+    }> {
+        private _localChange;
+        constructor(props: IOptionsLineComponentProps);
+        shouldComponentUpdate(nextProps: IOptionsLineComponentProps, nextState: {
+            value: number;
+        }): boolean;
+        raiseOnPropertyChanged(newValue: number, previousValue: number): void;
+        updateValue(valueString: string): void;
+        render(): JSX.Element;
+    }
+}
+declare module NODEEDITOR {
+    interface IInputPropertyTabComponentProps {
+        globalState: GlobalState;
+        inputNode: InputNodeModel;
+    }
+    export class InputPropertyTabComponentProps extends React.Component<IInputPropertyTabComponentProps> {
+        constructor(props: IInputPropertyTabComponentProps);
+        renderValue(globalState: GlobalState): JSX.Element | null;
+        setDefaultValue(): void;
+        render(): JSX.Element;
+    }
+}
+declare module NODEEDITOR {
     /**
      * Generic node model which stores information about a node editor block
      */
-    export class GenericNodeModel extends DefaultNodeModel {
+    export class InputNodeModel extends DefaultNodeModel {
+        connection?: BABYLON.NodeMaterialConnectionPoint;
         /**
-         * Labels for the block
-         */
-        headerLabels: Array<{
-            text: string;
-        }>;
-        /**
-         * BABYLON.Vector2 for the node if it exists
+         * Constructs the node model
          */
-        vector2: BABYLON.Nullable<BABYLON.Vector2>;
+        constructor();
+        renderProperties(globalState: GlobalState): JSX.Element | null;
+    }
+}
+declare module NODEEDITOR {
+    /**
+     * GenericNodeWidgetProps
+     */
+    export interface InputNodeWidgetProps {
+        node: BABYLON.Nullable<InputNodeModel>;
+        globalState: GlobalState;
+    }
+    /**
+     * Used to display a node block for the node editor
+     */
+    export class InputNodeWidget extends React.Component<InputNodeWidgetProps> {
         /**
-         * BABYLON.Vector3 for the node if it exists
+         * Creates a GenericNodeWidget
+         * @param props
          */
-        vector3: BABYLON.Nullable<BABYLON.Vector3>;
+        constructor(props: InputNodeWidgetProps);
+        render(): JSX.Element;
+    }
+}
+declare module NODEEDITOR {
+    /**
+     * Node factory which creates editor nodes
+     */
+    export class InputNodeFactory extends SRD.AbstractNodeFactory {
+        private _globalState;
         /**
-         * BABYLON.Vector4 for the node if it exists
+         * Constructs a GenericNodeFactory
          */
-        vector4: BABYLON.Nullable<BABYLON.Vector4>;
+        constructor(globalState: GlobalState);
         /**
-         * BABYLON.Matrix for the node if it exists
+         * Generates a node widget
+         * @param diagramEngine diagram engine
+         * @param node node to generate
+         * @returns node widget jsx
          */
-        matrix: BABYLON.Nullable<BABYLON.Matrix>;
+        generateReactWidget(diagramEngine: SRD.DiagramEngine, node: InputNodeModel): JSX.Element;
         /**
-         * Constructs the node model
+         * Gets a new instance of a node model
+         * @returns input node model
          */
-        constructor();
-        prepareConnection(type: string, outPort: GenericPortModel, connection?: BABYLON.NodeMaterialConnectionPoint): void;
-        prepare(options: NodeCreationOptions, nodes: Array<DefaultNodeModel>, model: DiagramModel, graphEditor: GraphEditor): void;
-        renderProperties(globalState: GlobalState): JSX.Element | null;
+        getNewInstance(): InputNodeModel;
     }
 }
 declare module NODEEDITOR {
-    /**
-     * Port model for the generic node
-     */
-    export class GenericPortModel extends PortModel {
+    interface IGraphEditorProps {
+        globalState: GlobalState;
+    }
+    export class NodeCreationOptions {
+        column: number;
+        nodeMaterialBlock?: BABYLON.NodeMaterialBlock;
+        type?: string;
+        connection?: BABYLON.NodeMaterialConnectionPoint;
+    }
+    export class GraphEditor extends React.Component<IGraphEditorProps> {
+        private _engine;
+        private _model;
+        private _nodes;
         /**
-         * If the port is input or output
+         * Current row/column position used when adding new nodes
          */
-        position: string | "input" | "output";
+        private _rowPos;
         /**
-         * What the port is connected to
+         * Creates a node and recursivly creates its parent nodes from it's input
+         * @param nodeMaterialBlock
          */
-        connection: BABYLON.Nullable<BABYLON.NodeMaterialConnectionPoint>;
-        static idCounter: number;
-        constructor(name: string, type?: string);
-        syncWithNodeMaterialConnectionPoint(connection: BABYLON.NodeMaterialConnectionPoint): void;
-        getNodeModel(): GenericNodeModel;
-        link(outPort: GenericPortModel): LinkModel<import("storm-react-diagrams").LinkModelListener>;
-        getInputFromBlock(): void;
-        createLinkModel(): LinkModel;
-        getValue: Function;
-        static SortInputOutput(a: BABYLON.Nullable<GenericPortModel>, b: BABYLON.Nullable<GenericPortModel>): {
-            input: GenericPortModel;
-            output: GenericPortModel;
-        } | null;
+        createNodeFromObject(options: NodeCreationOptions): DefaultNodeModel;
+        componentDidMount(): void;
+        componentWillUnmount(): void;
+        constructor(props: IGraphEditorProps);
+        addNodeFromClass(ObjectClass: typeof BABYLON.NodeMaterialBlock): DefaultNodeModel;
+        addValueNode(type: string, column?: number, connection?: BABYLON.NodeMaterialConnectionPoint): DefaultNodeModel;
+        render(): JSX.Element;
     }
 }
 declare module NODEEDITOR {
@@ -994,14 +1280,13 @@ declare module NODEEDITOR {
          */
         block: BABYLON.Nullable<BABYLON.NodeMaterialBlock>;
         ports: {
-            [s: string]: GenericPortModel;
+            [s: string]: DefaultPortModel;
         };
         /**
          * Constructs the node model
          */
         constructor(key: string);
-        prepareConnection(type: string, outPort: GenericPortModel, connection?: BABYLON.NodeMaterialConnectionPoint): void;
-        prepare(options: NodeCreationOptions, nodes: Array<DefaultNodeModel>, model: DiagramModel, graphEditor: GraphEditor): void;
+        prepare(options: NodeCreationOptions, nodes: Array<DefaultNodeModel>, model: DiagramModel, graphEditor: GraphEditor, filterInputs: string[]): void;
         renderProperties(globalState: GlobalState): JSX.Element | null;
     }
 }
@@ -1011,6 +1296,7 @@ declare module NODEEDITOR {
         hostElement: HTMLElement;
         hostDocument: HTMLDocument;
         onSelectionChangedObservable: BABYLON.Observable<BABYLON.Nullable<DefaultNodeModel>>;
+        onRebuildRequiredObservable: BABYLON.Observable<void>;
     }
 }
 declare module NODEEDITOR {

+ 5 - 5
dist/preview release/postProcessesLibrary/babylon.asciiArtPostProcess.js

@@ -7,7 +7,7 @@
 		exports["babylonjs-post-process"] = factory(require("babylonjs"));
 	else
 		root["POSTPROCESSES"] = factory(root["BABYLON"]);
-})((typeof self !== "undefined" ? self : typeof global !== "undefined" ? global : this), function(__WEBPACK_EXTERNAL_MODULE_babylonjs_Materials_Textures_texture__) {
+})((typeof self !== "undefined" ? self : typeof global !== "undefined" ? global : this), function(__WEBPACK_EXTERNAL_MODULE_babylonjs_Misc_decorators__) {
 return /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -357,7 +357,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AsciiArtFontTexture", function() { return AsciiArtFontTexture; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AsciiArtPostProcess", function() { return AsciiArtPostProcess; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Misc_decorators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/decorators */ "babylonjs/Materials/Textures/texture");
+/* harmony import */ var babylonjs_Misc_decorators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/decorators */ "babylonjs/Misc/decorators");
 /* harmony import */ var babylonjs_Misc_decorators__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_decorators__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _asciiart_fragment__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./asciiart.fragment */ "./asciiArt/asciiart.fragment.ts");
 
@@ -578,7 +578,7 @@ var AsciiArtPostProcess = /** @class */ (function (_super) {
 "use strict";
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "asciiartPixelShader", function() { return asciiartPixelShader; });
-/* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Materials/effect */ "babylonjs/Materials/Textures/texture");
+/* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Materials/effect */ "babylonjs/Misc/decorators");
 /* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__);
 
 var name = 'asciiartPixelShader';
@@ -640,14 +640,14 @@ if (typeof globalObject !== "undefined") {
 
 /***/ }),
 
-/***/ "babylonjs/Materials/Textures/texture":
+/***/ "babylonjs/Misc/decorators":
 /*!****************************************************************************************************!*\
   !*** external {"root":"BABYLON","commonjs":"babylonjs","commonjs2":"babylonjs","amd":"babylonjs"} ***!
   \****************************************************************************************************/
 /*! no static exports found */
 /***/ (function(module, exports) {
 
-module.exports = __WEBPACK_EXTERNAL_MODULE_babylonjs_Materials_Textures_texture__;
+module.exports = __WEBPACK_EXTERNAL_MODULE_babylonjs_Misc_decorators__;
 
 /***/ })
 

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 1
dist/preview release/postProcessesLibrary/babylon.asciiArtPostProcess.js.map


+ 5 - 5
dist/preview release/postProcessesLibrary/babylon.digitalRainPostProcess.js

@@ -7,7 +7,7 @@
 		exports["babylonjs-post-process"] = factory(require("babylonjs"));
 	else
 		root["POSTPROCESSES"] = factory(root["BABYLON"]);
-})((typeof self !== "undefined" ? self : typeof global !== "undefined" ? global : this), function(__WEBPACK_EXTERNAL_MODULE_babylonjs_Materials_Textures_texture__) {
+})((typeof self !== "undefined" ? self : typeof global !== "undefined" ? global : this), function(__WEBPACK_EXTERNAL_MODULE_babylonjs_Misc_decorators__) {
 return /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -357,7 +357,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DigitalRainFontTexture", function() { return DigitalRainFontTexture; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DigitalRainPostProcess", function() { return DigitalRainPostProcess; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Misc_decorators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/decorators */ "babylonjs/Materials/Textures/texture");
+/* harmony import */ var babylonjs_Misc_decorators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/decorators */ "babylonjs/Misc/decorators");
 /* harmony import */ var babylonjs_Misc_decorators__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_decorators__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _digitalrain_fragment__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./digitalrain.fragment */ "./digitalRain/digitalrain.fragment.ts");
 
@@ -584,7 +584,7 @@ var DigitalRainPostProcess = /** @class */ (function (_super) {
 "use strict";
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "digitalrainPixelShader", function() { return digitalrainPixelShader; });
-/* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Materials/effect */ "babylonjs/Materials/Textures/texture");
+/* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Materials/effect */ "babylonjs/Misc/decorators");
 /* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__);
 
 var name = 'digitalrainPixelShader';
@@ -646,14 +646,14 @@ if (typeof globalObject !== "undefined") {
 
 /***/ }),
 
-/***/ "babylonjs/Materials/Textures/texture":
+/***/ "babylonjs/Misc/decorators":
 /*!****************************************************************************************************!*\
   !*** external {"root":"BABYLON","commonjs":"babylonjs","commonjs2":"babylonjs","amd":"babylonjs"} ***!
   \****************************************************************************************************/
 /*! no static exports found */
 /***/ (function(module, exports) {
 
-module.exports = __WEBPACK_EXTERNAL_MODULE_babylonjs_Materials_Textures_texture__;
+module.exports = __WEBPACK_EXTERNAL_MODULE_babylonjs_Misc_decorators__;
 
 /***/ })
 

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 1
dist/preview release/postProcessesLibrary/babylon.digitalRainPostProcess.js.map


+ 5 - 5
dist/preview release/postProcessesLibrary/babylon.oceanPostProcess.js

@@ -7,7 +7,7 @@
 		exports["babylonjs-post-process"] = factory(require("babylonjs"));
 	else
 		root["POSTPROCESSES"] = factory(root["BABYLON"]);
-})((typeof self !== "undefined" ? self : typeof global !== "undefined" ? global : this), function(__WEBPACK_EXTERNAL_MODULE_babylonjs_Materials_Textures_texture__) {
+})((typeof self !== "undefined" ? self : typeof global !== "undefined" ? global : this), function(__WEBPACK_EXTERNAL_MODULE_babylonjs_Misc_decorators__) {
 return /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -401,7 +401,7 @@ __webpack_require__.r(__webpack_exports__);
 "use strict";
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "oceanPostProcessPixelShader", function() { return oceanPostProcessPixelShader; });
-/* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Materials/effect */ "babylonjs/Materials/Textures/texture");
+/* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Materials/effect */ "babylonjs/Misc/decorators");
 /* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__);
 
 var name = 'oceanPostProcessPixelShader';
@@ -424,7 +424,7 @@ var oceanPostProcessPixelShader = { name: name, shader: shader };
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OceanPostProcess", function() { return OceanPostProcess; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Materials_Textures_texture__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Materials/Textures/texture */ "babylonjs/Materials/Textures/texture");
+/* harmony import */ var babylonjs_Materials_Textures_texture__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Materials/Textures/texture */ "babylonjs/Misc/decorators");
 /* harmony import */ var babylonjs_Materials_Textures_texture__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Materials_Textures_texture__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _oceanPostProcess_fragment__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./oceanPostProcess.fragment */ "./ocean/oceanPostProcess.fragment.ts");
 
@@ -628,14 +628,14 @@ var OceanPostProcess = /** @class */ (function (_super) {
 
 /***/ }),
 
-/***/ "babylonjs/Materials/Textures/texture":
+/***/ "babylonjs/Misc/decorators":
 /*!****************************************************************************************************!*\
   !*** external {"root":"BABYLON","commonjs":"babylonjs","commonjs2":"babylonjs","amd":"babylonjs"} ***!
   \****************************************************************************************************/
 /*! no static exports found */
 /***/ (function(module, exports) {
 
-module.exports = __WEBPACK_EXTERNAL_MODULE_babylonjs_Materials_Textures_texture__;
+module.exports = __WEBPACK_EXTERNAL_MODULE_babylonjs_Misc_decorators__;
 
 /***/ })
 

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 1
dist/preview release/postProcessesLibrary/babylon.oceanPostProcess.js.map


+ 9 - 9
dist/preview release/postProcessesLibrary/babylonjs.postProcess.js

@@ -7,7 +7,7 @@
 		exports["babylonjs-post-process"] = factory(require("babylonjs"));
 	else
 		root["POSTPROCESSES"] = factory(root["BABYLON"]);
-})((typeof self !== "undefined" ? self : typeof global !== "undefined" ? global : this), function(__WEBPACK_EXTERNAL_MODULE_babylonjs_Materials_Textures_texture__) {
+})((typeof self !== "undefined" ? self : typeof global !== "undefined" ? global : this), function(__WEBPACK_EXTERNAL_MODULE_babylonjs_Misc_decorators__) {
 return /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -357,7 +357,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AsciiArtFontTexture", function() { return AsciiArtFontTexture; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AsciiArtPostProcess", function() { return AsciiArtPostProcess; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Misc_decorators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/decorators */ "babylonjs/Materials/Textures/texture");
+/* harmony import */ var babylonjs_Misc_decorators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/decorators */ "babylonjs/Misc/decorators");
 /* harmony import */ var babylonjs_Misc_decorators__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_decorators__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _asciiart_fragment__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./asciiart.fragment */ "./asciiArt/asciiart.fragment.ts");
 
@@ -578,7 +578,7 @@ var AsciiArtPostProcess = /** @class */ (function (_super) {
 "use strict";
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "asciiartPixelShader", function() { return asciiartPixelShader; });
-/* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Materials/effect */ "babylonjs/Materials/Textures/texture");
+/* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Materials/effect */ "babylonjs/Misc/decorators");
 /* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__);
 
 var name = 'asciiartPixelShader';
@@ -621,7 +621,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DigitalRainFontTexture", function() { return DigitalRainFontTexture; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DigitalRainPostProcess", function() { return DigitalRainPostProcess; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Misc_decorators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/decorators */ "babylonjs/Materials/Textures/texture");
+/* harmony import */ var babylonjs_Misc_decorators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Misc/decorators */ "babylonjs/Misc/decorators");
 /* harmony import */ var babylonjs_Misc_decorators__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_decorators__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _digitalrain_fragment__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./digitalrain.fragment */ "./digitalRain/digitalrain.fragment.ts");
 
@@ -848,7 +848,7 @@ var DigitalRainPostProcess = /** @class */ (function (_super) {
 "use strict";
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "digitalrainPixelShader", function() { return digitalrainPixelShader; });
-/* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Materials/effect */ "babylonjs/Materials/Textures/texture");
+/* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Materials/effect */ "babylonjs/Misc/decorators");
 /* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__);
 
 var name = 'digitalrainPixelShader';
@@ -973,7 +973,7 @@ __webpack_require__.r(__webpack_exports__);
 "use strict";
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "oceanPostProcessPixelShader", function() { return oceanPostProcessPixelShader; });
-/* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Materials/effect */ "babylonjs/Materials/Textures/texture");
+/* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Materials/effect */ "babylonjs/Misc/decorators");
 /* harmony import */ var babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Materials_effect__WEBPACK_IMPORTED_MODULE_0__);
 
 var name = 'oceanPostProcessPixelShader';
@@ -996,7 +996,7 @@ var oceanPostProcessPixelShader = { name: name, shader: shader };
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OceanPostProcess", function() { return OceanPostProcess; });
 /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../../node_modules/tslib/tslib.es6.js");
-/* harmony import */ var babylonjs_Materials_Textures_texture__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Materials/Textures/texture */ "babylonjs/Materials/Textures/texture");
+/* harmony import */ var babylonjs_Materials_Textures_texture__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babylonjs/Materials/Textures/texture */ "babylonjs/Misc/decorators");
 /* harmony import */ var babylonjs_Materials_Textures_texture__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Materials_Textures_texture__WEBPACK_IMPORTED_MODULE_1__);
 /* harmony import */ var _oceanPostProcess_fragment__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./oceanPostProcess.fragment */ "./ocean/oceanPostProcess.fragment.ts");
 
@@ -1200,14 +1200,14 @@ var OceanPostProcess = /** @class */ (function (_super) {
 
 /***/ }),
 
-/***/ "babylonjs/Materials/Textures/texture":
+/***/ "babylonjs/Misc/decorators":
 /*!****************************************************************************************************!*\
   !*** external {"root":"BABYLON","commonjs":"babylonjs","commonjs2":"babylonjs","amd":"babylonjs"} ***!
   \****************************************************************************************************/
 /*! no static exports found */
 /***/ (function(module, exports) {
 
-module.exports = __WEBPACK_EXTERNAL_MODULE_babylonjs_Materials_Textures_texture__;
+module.exports = __WEBPACK_EXTERNAL_MODULE_babylonjs_Misc_decorators__;
 
 /***/ })
 

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 1
dist/preview release/postProcessesLibrary/babylonjs.postProcess.js.map


+ 14 - 19
dist/preview release/serializers/babylon.glTF2Serializer.js

@@ -300,14 +300,13 @@ _glTFExporter__WEBPACK_IMPORTED_MODULE_1__["_Exporter"].RegisterExtension(NAME,
 "use strict";
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "KHR_texture_transform", function() { return KHR_texture_transform; });
-/* harmony import */ var babylonjs_Maths_math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Maths/math */ "babylonjs/Maths/math");
-/* harmony import */ var babylonjs_Maths_math__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Maths_math__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Misc/tools */ "babylonjs/Maths/math");
+/* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_0__);
 /* harmony import */ var _glTFExporter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../glTFExporter */ "./glTF/2.0/glTFExporter.ts");
 /* harmony import */ var _shaders_textureTransform_fragment__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../shaders/textureTransform.fragment */ "./glTF/2.0/shaders/textureTransform.fragment.ts");
 
 
 
-
 var NAME = "KHR_texture_transform";
 
 /**
@@ -329,6 +328,12 @@ var KHR_texture_transform = /** @class */ (function () {
     KHR_texture_transform.prototype.preExportTextureAsync = function (context, babylonTexture, mimeType) {
         var _this = this;
         return new Promise(function (resolve, reject) {
+            var scene = babylonTexture.getScene();
+            if (!scene) {
+                reject(context + ": \"scene\" is not defined for Babylon texture " + babylonTexture.name + "!");
+                return;
+            }
+            // TODO: this doesn't take into account rotation center values
             var texture_transform_extension = {};
             if (babylonTexture.uOffset !== 0 || babylonTexture.vOffset !== 0) {
                 texture_transform_extension.offset = [babylonTexture.uOffset, babylonTexture.vOffset];
@@ -341,19 +346,9 @@ var KHR_texture_transform = /** @class */ (function () {
             }
             if (!Object.keys(texture_transform_extension).length) {
                 resolve(babylonTexture);
+                return;
             }
-            var scale = texture_transform_extension.scale ? new babylonjs_Maths_math__WEBPACK_IMPORTED_MODULE_0__["Vector2"](texture_transform_extension.scale[0], texture_transform_extension.scale[1]) : babylonjs_Maths_math__WEBPACK_IMPORTED_MODULE_0__["Vector2"].One();
-            var rotation = texture_transform_extension.rotation != null ? texture_transform_extension.rotation : 0;
-            var offset = texture_transform_extension.offset ? new babylonjs_Maths_math__WEBPACK_IMPORTED_MODULE_0__["Vector2"](texture_transform_extension.offset[0], texture_transform_extension.offset[1]) : babylonjs_Maths_math__WEBPACK_IMPORTED_MODULE_0__["Vector2"].Zero();
-            var scene = babylonTexture.getScene();
-            if (!scene) {
-                reject(context + ": \"scene\" is not defined for Babylon texture " + babylonTexture.name + "!");
-            }
-            else {
-                _this.textureTransformTextureAsync(babylonTexture, offset, rotation, scale, scene).then(function (texture) {
-                    resolve(texture);
-                });
-            }
+            return _this._textureTransformTextureAsync(babylonTexture, scene);
         });
     };
     /**
@@ -364,11 +359,11 @@ var KHR_texture_transform = /** @class */ (function () {
      * @param scale
      * @param scene
      */
-    KHR_texture_transform.prototype.textureTransformTextureAsync = function (babylonTexture, offset, rotation, scale, scene) {
-        return new Promise(function (resolve, reject) {
-            var proceduralTexture = new babylonjs_Maths_math__WEBPACK_IMPORTED_MODULE_0__["ProceduralTexture"]("" + babylonTexture.name, babylonTexture.getSize(), "textureTransform", scene);
+    KHR_texture_transform.prototype._textureTransformTextureAsync = function (babylonTexture, scene) {
+        return new Promise(function (resolve) {
+            var proceduralTexture = new babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_0__["ProceduralTexture"]("" + babylonTexture.name, babylonTexture.getSize(), "textureTransform", scene);
             if (!proceduralTexture) {
-                babylonjs_Maths_math__WEBPACK_IMPORTED_MODULE_0__["Tools"].Log("Cannot create procedural texture for " + babylonTexture.name + "!");
+                babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_0__["Tools"].Log("Cannot create procedural texture for " + babylonTexture.name + "!");
                 resolve(babylonTexture);
             }
             proceduralTexture.setTexture("textureSampler", babylonTexture);

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 1
dist/preview release/serializers/babylon.glTF2Serializer.js.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 1
dist/preview release/serializers/babylon.glTF2Serializer.min.js


+ 1 - 1
dist/preview release/serializers/babylonjs.serializers.d.ts

@@ -1023,7 +1023,7 @@ declare module BABYLON.GLTF2.Exporter.Extensions {
          * @param scale
          * @param scene
          */
-        textureTransformTextureAsync(babylonTexture: Texture, offset: Vector2, rotation: number, scale: Vector2, scene: Scene): Promise<BaseTexture>;
+        private _textureTransformTextureAsync;
     }
 }
 declare module BABYLON.GLTF2.Exporter.Extensions {

+ 14 - 19
dist/preview release/serializers/babylonjs.serializers.js

@@ -478,14 +478,13 @@ _glTFExporter__WEBPACK_IMPORTED_MODULE_1__["_Exporter"].RegisterExtension(NAME,
 "use strict";
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "KHR_texture_transform", function() { return KHR_texture_transform; });
-/* harmony import */ var babylonjs_Maths_math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Maths/math */ "babylonjs/Maths/math");
-/* harmony import */ var babylonjs_Maths_math__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Maths_math__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Misc/tools */ "babylonjs/Maths/math");
+/* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_0__);
 /* harmony import */ var _glTFExporter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../glTFExporter */ "./glTF/2.0/glTFExporter.ts");
 /* harmony import */ var _shaders_textureTransform_fragment__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../shaders/textureTransform.fragment */ "./glTF/2.0/shaders/textureTransform.fragment.ts");
 
 
 
-
 var NAME = "KHR_texture_transform";
 
 /**
@@ -507,6 +506,12 @@ var KHR_texture_transform = /** @class */ (function () {
     KHR_texture_transform.prototype.preExportTextureAsync = function (context, babylonTexture, mimeType) {
         var _this = this;
         return new Promise(function (resolve, reject) {
+            var scene = babylonTexture.getScene();
+            if (!scene) {
+                reject(context + ": \"scene\" is not defined for Babylon texture " + babylonTexture.name + "!");
+                return;
+            }
+            // TODO: this doesn't take into account rotation center values
             var texture_transform_extension = {};
             if (babylonTexture.uOffset !== 0 || babylonTexture.vOffset !== 0) {
                 texture_transform_extension.offset = [babylonTexture.uOffset, babylonTexture.vOffset];
@@ -519,19 +524,9 @@ var KHR_texture_transform = /** @class */ (function () {
             }
             if (!Object.keys(texture_transform_extension).length) {
                 resolve(babylonTexture);
+                return;
             }
-            var scale = texture_transform_extension.scale ? new babylonjs_Maths_math__WEBPACK_IMPORTED_MODULE_0__["Vector2"](texture_transform_extension.scale[0], texture_transform_extension.scale[1]) : babylonjs_Maths_math__WEBPACK_IMPORTED_MODULE_0__["Vector2"].One();
-            var rotation = texture_transform_extension.rotation != null ? texture_transform_extension.rotation : 0;
-            var offset = texture_transform_extension.offset ? new babylonjs_Maths_math__WEBPACK_IMPORTED_MODULE_0__["Vector2"](texture_transform_extension.offset[0], texture_transform_extension.offset[1]) : babylonjs_Maths_math__WEBPACK_IMPORTED_MODULE_0__["Vector2"].Zero();
-            var scene = babylonTexture.getScene();
-            if (!scene) {
-                reject(context + ": \"scene\" is not defined for Babylon texture " + babylonTexture.name + "!");
-            }
-            else {
-                _this.textureTransformTextureAsync(babylonTexture, offset, rotation, scale, scene).then(function (texture) {
-                    resolve(texture);
-                });
-            }
+            return _this._textureTransformTextureAsync(babylonTexture, scene);
         });
     };
     /**
@@ -542,11 +537,11 @@ var KHR_texture_transform = /** @class */ (function () {
      * @param scale
      * @param scene
      */
-    KHR_texture_transform.prototype.textureTransformTextureAsync = function (babylonTexture, offset, rotation, scale, scene) {
-        return new Promise(function (resolve, reject) {
-            var proceduralTexture = new babylonjs_Maths_math__WEBPACK_IMPORTED_MODULE_0__["ProceduralTexture"]("" + babylonTexture.name, babylonTexture.getSize(), "textureTransform", scene);
+    KHR_texture_transform.prototype._textureTransformTextureAsync = function (babylonTexture, scene) {
+        return new Promise(function (resolve) {
+            var proceduralTexture = new babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_0__["ProceduralTexture"]("" + babylonTexture.name, babylonTexture.getSize(), "textureTransform", scene);
             if (!proceduralTexture) {
-                babylonjs_Maths_math__WEBPACK_IMPORTED_MODULE_0__["Tools"].Log("Cannot create procedural texture for " + babylonTexture.name + "!");
+                babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_0__["Tools"].Log("Cannot create procedural texture for " + babylonTexture.name + "!");
                 resolve(babylonTexture);
             }
             proceduralTexture.setTexture("textureSampler", babylonTexture);

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 1
dist/preview release/serializers/babylonjs.serializers.js.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 1
dist/preview release/serializers/babylonjs.serializers.min.js


+ 2 - 5
dist/preview release/serializers/babylonjs.serializers.module.d.ts

@@ -1048,10 +1048,7 @@ declare module "babylonjs-serializers/glTF/2.0/shaders/textureTransform.fragment
 declare module "babylonjs-serializers/glTF/2.0/Extensions/KHR_texture_transform" {
     import { ImageMimeType } from "babylonjs-gltf2interface";
     import { Nullable } from "babylonjs/types";
-    import { Vector2 } from "babylonjs/Maths/math";
-    import { BaseTexture } from "babylonjs/Materials/Textures/baseTexture";
     import { Texture } from "babylonjs/Materials/Textures/texture";
-    import { Scene } from "babylonjs/scene";
     import { IGLTFExporterExtensionV2 } from "babylonjs-serializers/glTF/2.0/glTFExporterExtension";
     import { _Exporter } from "babylonjs-serializers/glTF/2.0/glTFExporter";
     import "babylonjs-serializers/glTF/2.0/shaders/textureTransform.fragment";
@@ -1078,7 +1075,7 @@ declare module "babylonjs-serializers/glTF/2.0/Extensions/KHR_texture_transform"
          * @param scale
          * @param scene
          */
-        textureTransformTextureAsync(babylonTexture: Texture, offset: Vector2, rotation: number, scale: Vector2, scene: Scene): Promise<BaseTexture>;
+        private _textureTransformTextureAsync;
     }
 }
 declare module "babylonjs-serializers/glTF/2.0/Extensions/KHR_lights_punctual" {
@@ -2204,7 +2201,7 @@ declare module BABYLON.GLTF2.Exporter.Extensions {
          * @param scale
          * @param scene
          */
-        textureTransformTextureAsync(babylonTexture: Texture, offset: Vector2, rotation: number, scale: Vector2, scene: Scene): Promise<BaseTexture>;
+        private _textureTransformTextureAsync;
     }
 }
 declare module BABYLON.GLTF2.Exporter.Extensions {

+ 22 - 6
dist/preview release/viewer/babylon.module.d.ts

@@ -52242,7 +52242,7 @@ declare module "babylonjs/Materials/Node/nodeMaterialWellKnownValues" {
         /** WorldViewProjection */
         WorldViewProjection = 6,
         /** Will be filled by the block itself */
-        BlockBased = 7
+        Automatic = 7
     }
 }
 declare module "babylonjs/Materials/Node/nodeMaterialBuildStateSharedData" {
@@ -52929,10 +52929,18 @@ declare module "babylonjs/Materials/Node/nodeMaterialBlockConnectionPoint" {
         setAsAttribute(attributeName?: string): NodeMaterialConnectionPoint;
         /**
          * Set the source of this connection point to a well known value
-         * @param value define the well known value to use (world, view, etc...)
+         * @param value define the well known value to use (world, view, etc...) or null to switch to manual value
          * @returns the current connection point
          */
-        setAsWellKnownValue(value: NodeMaterialWellKnownValues): NodeMaterialConnectionPoint;
+        setAsWellKnownValue(value: Nullable<NodeMaterialWellKnownValues>): NodeMaterialConnectionPoint;
+        /**
+         * Gets a boolean indicating that the current connection point is a well known value
+         */
+        readonly isWellKnownValue: boolean;
+        /**
+         * Gets or sets the current well known value or null if not defined as well know value
+         */
+        wellKnownValue: Nullable<NodeMaterialWellKnownValues>;
         private _getTypeLength;
         /**
          * Connect this point to another connection point
@@ -112049,7 +112057,7 @@ declare module BABYLON {
         /** WorldViewProjection */
         WorldViewProjection = 6,
         /** Will be filled by the block itself */
-        BlockBased = 7
+        Automatic = 7
     }
 }
 declare module BABYLON {
@@ -112699,10 +112707,18 @@ declare module BABYLON {
         setAsAttribute(attributeName?: string): NodeMaterialConnectionPoint;
         /**
          * Set the source of this connection point to a well known value
-         * @param value define the well known value to use (world, view, etc...)
+         * @param value define the well known value to use (world, view, etc...) or null to switch to manual value
          * @returns the current connection point
          */
-        setAsWellKnownValue(value: NodeMaterialWellKnownValues): NodeMaterialConnectionPoint;
+        setAsWellKnownValue(value: Nullable<NodeMaterialWellKnownValues>): NodeMaterialConnectionPoint;
+        /**
+         * Gets a boolean indicating that the current connection point is a well known value
+         */
+        readonly isWellKnownValue: boolean;
+        /**
+         * Gets or sets the current well known value or null if not defined as well know value
+         */
+        wellKnownValue: Nullable<NodeMaterialWellKnownValues>;
         private _getTypeLength;
         /**
          * Connect this point to another connection point

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 13 - 13
dist/preview release/viewer/babylon.viewer.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 1
dist/preview release/viewer/babylon.viewer.max.js


+ 0 - 8
nodeEditor/src/components/diagram/defaultNodeModel.ts

@@ -3,7 +3,6 @@ import { Nullable } from 'babylonjs/types';
 import { NodeMaterialBlock } from 'babylonjs/Materials/Node/nodeMaterialBlock';
 import { NodeMaterialBlockConnectionPointTypes } from 'babylonjs/Materials/Node/nodeMaterialBlockConnectionPointTypes';
 import { GraphEditor, NodeCreationOptions } from '../../graphEditor';
-import { NodeMaterialConnectionPoint } from 'babylonjs/Materials/Node/nodeMaterialBlockConnectionPoint';
 import { GlobalState } from '../../globalState';
 import { DefaultPortModel } from './defaultPortModel';
 
@@ -25,10 +24,6 @@ export class DefaultNodeModel extends NodeModel {
         super(key);
     }
 
-    prepareConnection(type: string, outPort: DefaultPortModel, connection?: NodeMaterialConnectionPoint) {
-
-    }
-
     prepare(options: NodeCreationOptions, nodes: Array<DefaultNodeModel>, model: DiagramModel, graphEditor: GraphEditor, filterInputs: string[]) {
         this.block = options.nodeMaterialBlock || null;
 
@@ -66,9 +61,6 @@ export class DefaultNodeModel extends NodeModel {
 
                 let link = connectedNode.ports[connection.connectedPoint.name].link(inputPort);
                 model.addAll(link);
-
-            } else if (connection.isAttribute) {
-
             } else {
                 // Create value node for the connection
                 var type = ""

+ 11 - 0
nodeEditor/src/components/diagram/diagram.scss

@@ -8,6 +8,10 @@
         color:white;
     }
 
+    &.attribute {
+        background: orange;
+    }
+
     &.output {
         background: blue;
         color:white;
@@ -27,6 +31,13 @@
         overflow: hidden;
     }
 
+    .value {
+        height: 34px;
+        text-align: center;
+        font-size: 20px;
+        font-weight: bold;
+    }
+
     .inputs {
         .input-port {
             display: grid;

+ 6 - 60
nodeEditor/src/components/diagram/generic/genericNodeModel.tsx

@@ -4,11 +4,8 @@ import { Vector2, Vector3, Vector4, Matrix } from 'babylonjs/Maths/math';
 import { DefaultNodeModel } from '../defaultNodeModel';
 import { DiagramModel } from 'storm-react-diagrams/dist/@types/src/models/DiagramModel';
 import { GraphEditor, NodeCreationOptions } from '../../../graphEditor';
-import { NodeMaterialConnectionPoint } from 'babylonjs/Materials/Node/nodeMaterialBlockConnectionPoint';
-import { Vector2PropertyTabComponent } from '../../../components/propertyTab/properties/vector2PropertyTabComponent';
 import { GlobalState } from '../../../globalState';
-import { Vector3PropertyTabComponent } from '../../../components/propertyTab/properties/vector3PropertyTabComponent';
-import { DefaultPortModel } from '../defaultPortModel';
+import { TextLineComponent } from '../../../sharedComponents/textLineComponent';
 
 /**
  * Generic node model which stores information about a node editor block
@@ -42,51 +39,6 @@ export class GenericNodeModel extends DefaultNodeModel {
         super("generic");
     }
 
-    prepareConnection(type: string, outPort: DefaultPortModel, connection?: NodeMaterialConnectionPoint) {
-        switch (type) {
-            case "Vector2":
-                outPort.getValue = () => {
-                    return this.vector2;
-                }
-                if (connection && connection.value) {
-                    this.vector2 = connection.value
-                } else {
-                    this.vector2 = new Vector2()
-                }
-                break;
-            case "Vector3":
-                outPort.getValue = () => {
-                    return this.vector3;
-                }
-                if (connection && connection.value) {
-                    this.vector3 = connection.value
-                } else {
-                    this.vector3 = new Vector3()
-                }
-                break;
-            case "Vector4":
-                outPort.getValue = () => {
-                    return this.vector4;
-                }
-                if (connection && connection.value) {
-                    this.vector4 = connection.value
-                } else {
-                    this.vector4 = new Vector4(0, 0, 0, 1)
-                }
-                break;
-            case "Matrix":
-                outPort.getValue = () => {
-                    return this.matrix;
-                }
-                if (connection && connection.value) {
-                    this.matrix = connection.value
-                } else {
-                    this.matrix = new Matrix();
-                }
-                break;
-        }
-    }
-
     prepare(options: NodeCreationOptions, nodes: Array<DefaultNodeModel>, model: DiagramModel, graphEditor: GraphEditor, filterInputs: string[]) {
         if (options.nodeMaterialBlock) {
             this.header = options.nodeMaterialBlock.name;
@@ -96,17 +48,11 @@ export class GenericNodeModel extends DefaultNodeModel {
     }
 
     renderProperties(globalState: GlobalState) {
-        if (this.vector2) {
-            return (
-                <Vector2PropertyTabComponent globalState={globalState} node={this} />
-            );
-        }
-        if (this.vector3) {
-            return (
-                <Vector3PropertyTabComponent globalState={globalState} node={this} />
-            );
-        }
 
-        return null;
+        return (
+            <div>
+                <TextLineComponent label="Type" value={this.block!.getClassName()} />
+            </div>
+        );
     }
 }

+ 2 - 4
nodeEditor/src/components/diagram/generic/genericNodeWidget.tsx

@@ -46,9 +46,8 @@ export class GenericNodeWidget extends React.Component<GenericNodeWidgetProps, G
         var header = "";
         var inputPorts = new Array<JSX.Element>()
         var outputPorts = new Array<JSX.Element>()
-        var value = <div></div>
         if (this.props.node) {
-            // Header labels
+            // Header label
             if (this.props.node.header) {
                 header = this.props.node.header;
             }
@@ -83,7 +82,7 @@ export class GenericNodeWidget extends React.Component<GenericNodeWidgetProps, G
         }
 
         return (
-            <div className={"diagramBlock"}>
+            <div className={"diagramBlock" + (outputPorts.length === 0 ? " output" : "")}>
                 <div className="header">
                     {header}
                 </div>
@@ -93,7 +92,6 @@ export class GenericNodeWidget extends React.Component<GenericNodeWidgetProps, G
                 <div className="outputs">
                     {outputPorts}
                 </div>
-                {value}
             </div>
         );
     }

+ 6 - 54
nodeEditor/src/components/diagram/input/inputNodeModel.tsx

@@ -1,33 +1,14 @@
 import * as React from "react";
-import { Nullable } from 'babylonjs/types';
-import { Vector2, Vector3, Vector4, Matrix } from 'babylonjs/Maths/math';
 import { DefaultNodeModel } from '../defaultNodeModel';
 import { NodeMaterialConnectionPoint } from 'babylonjs/Materials/Node/nodeMaterialBlockConnectionPoint';
-import { Vector2PropertyTabComponent } from '../../propertyTab/properties/vector2PropertyTabComponent';
 import { GlobalState } from '../../../globalState';
-import { Vector3PropertyTabComponent } from '../../propertyTab/properties/vector3PropertyTabComponent';
-import { DefaultPortModel } from '../defaultPortModel';
+import { InputPropertyTabComponentProps } from './inputNodePropertyComponent';
 
 /**
  * Generic node model which stores information about a node editor block
  */
 export class InputNodeModel extends DefaultNodeModel {
-	/**
-	 * Vector2 for the node if it exists
-	 */
-    public vector2: Nullable<Vector2> = null;
-	/**
-	 * Vector3 for the node if it exists
-	 */
-    public vector3: Nullable<Vector3> = null;
-	/**
-	 * Vector4 for the node if it exists
-	 */
-    public vector4: Nullable<Vector4> = null;
-	/**
-	 * Matrix for the node if it exists
-	 */
-    public matrix: Nullable<Matrix> = null;
+    public connection?: NodeMaterialConnectionPoint;
 
 	/**
 	 * Constructs the node model
@@ -36,42 +17,13 @@ export class InputNodeModel extends DefaultNodeModel {
         super("input");
     }
 
-    prepareConnection(type: string, outPort: DefaultPortModel, connection?: NodeMaterialConnectionPoint) {
-        switch (type) {
-            case "Vector2":
-                this.vector2 = new Vector2()
-                break;
-            case "Vector3":
-                this.vector3 = new Vector3()
-                break;
-            case "Vector4":
-                this.vector4 = new Vector4(0, 0, 0, 1)
-                break;
-            case "Matrix":
-                this.matrix = new Matrix();
-                break;
-        }
-    }
-
-    renderValue(globalState: GlobalState) {
-        if (this.vector2) {
-            return (
-                <Vector2PropertyTabComponent globalState={globalState} node={this} />
-            );
-        }
-        if (this.vector3) {
-            return (
-                <Vector3PropertyTabComponent globalState={globalState} node={this} />
-            );
+    renderProperties(globalState: GlobalState) {
+        if (!this.connection) {
+            return null;
         }
-        return null;
-    }
 
-    renderProperties(globalState: GlobalState) {
         return (
-            <div>
-                {this.renderValue(globalState)}
-            </div>
+            <InputPropertyTabComponentProps globalState={globalState} inputNode={this} />
         );
     }
 }

+ 106 - 0
nodeEditor/src/components/diagram/input/inputNodePropertyComponent.tsx

@@ -0,0 +1,106 @@
+
+import * as React from "react";
+import { Vector2PropertyTabComponent } from '../../propertyTab/properties/vector2PropertyTabComponent';
+import { Vector3PropertyTabComponent } from '../../propertyTab/properties/vector3PropertyTabComponent';
+import { CheckBoxLineComponent } from '../../../sharedComponents/checkBoxLineComponent';
+import { GlobalState } from '../../../globalState';
+import { InputNodeModel } from './inputNodeModel';
+import { NodeMaterialBlockConnectionPointTypes } from 'babylonjs/Materials/Node/nodeMaterialBlockConnectionPointTypes';
+import { OptionsLineComponent } from '../../../sharedComponents/optionsLineComponent';
+import { NodeMaterialWellKnownValues } from 'babylonjs/Materials/Node/nodeMaterialWellKnownValues';
+import { Vector2, Vector3, Matrix } from 'babylonjs/Maths/math';
+
+interface IInputPropertyTabComponentProps {
+    globalState: GlobalState;
+    inputNode: InputNodeModel;
+}
+
+export class InputPropertyTabComponentProps extends React.Component<IInputPropertyTabComponentProps> {
+
+    constructor(props: IInputPropertyTabComponentProps) {
+        super(props)
+    }
+
+    renderValue(globalState: GlobalState) {
+        let connection = this.props.inputNode.connection!;
+        switch (connection.type) {
+            case NodeMaterialBlockConnectionPointTypes.Vector2:
+                return (
+                    <Vector2PropertyTabComponent globalState={globalState} connection={connection} />
+                );
+            case NodeMaterialBlockConnectionPointTypes.Vector3:
+            case NodeMaterialBlockConnectionPointTypes.Color3:
+            case NodeMaterialBlockConnectionPointTypes.Vector3OrColor3:
+                return (
+                    <Vector3PropertyTabComponent globalState={globalState} connection={connection} />
+                );
+        }
+        return null;
+    }
+
+    setDefaultValue() {
+        let connection = this.props.inputNode.connection!;
+        switch (connection.type) {
+            case NodeMaterialBlockConnectionPointTypes.Vector2:
+                connection.value = Vector2.Zero();
+                break;
+            case NodeMaterialBlockConnectionPointTypes.Vector3:
+            case NodeMaterialBlockConnectionPointTypes.Color3:
+            case NodeMaterialBlockConnectionPointTypes.Vector3OrColor3:
+                connection.value = Vector3.Zero();
+                break;
+            case NodeMaterialBlockConnectionPointTypes.Matrix:
+                connection.value = Matrix.Identity();
+                break;
+        }
+    }
+
+    render() {
+        let connection = this.props.inputNode.connection!;
+
+        var wellKnownOptions = [
+            { label: "World", value: NodeMaterialWellKnownValues.World },
+            { label: "WorldxView", value: NodeMaterialWellKnownValues.WorldView },
+            { label: "WorldxViewxProjection", value: NodeMaterialWellKnownValues.WorldViewProjection },
+            { label: "View", value: NodeMaterialWellKnownValues.View },
+            { label: "ViewxProjection", value: NodeMaterialWellKnownValues.ViewProjection },
+            { label: "Projection", value: NodeMaterialWellKnownValues.Projection },
+            { label: "Automatic", value: NodeMaterialWellKnownValues.Automatic },
+        ];
+
+        return (
+            <div>
+                <CheckBoxLineComponent label="Is mesh attribute" onSelect={value => {
+                    connection!.isAttribute = value;
+                    this.props.globalState.onRebuildRequiredObservable.notifyObservers();
+                    this.forceUpdate();
+                }} isSelected={() => connection!.isAttribute} />
+                {
+                    connection.isUniform &&
+                    <CheckBoxLineComponent label="Is well known value" onSelect={value => {
+                        if (value) {
+                            connection!.setAsWellKnownValue(NodeMaterialWellKnownValues.World);
+                        } else {
+                            connection!.setAsWellKnownValue(null);
+                            this.setDefaultValue();
+                        }
+                        this.props.globalState.onRebuildRequiredObservable.notifyObservers();
+                        this.forceUpdate();
+                    }} isSelected={() => connection!.isWellKnownValue} />
+                }
+                {
+                    connection.isUniform && !connection.isWellKnownValue &&
+                    this.renderValue(this.props.globalState)
+                }
+                {
+                    connection.isUniform && connection.isWellKnownValue &&
+                    <OptionsLineComponent label="Well known value" options={wellKnownOptions} target={connection} propertyName="wellKnownValue" onSelect={(value: any) => {
+                        connection.setAsWellKnownValue(value);
+                        this.forceUpdate();
+                        this.props.globalState.onRebuildRequiredObservable.notifyObservers();
+                    }} />
+                }
+            </div>
+        );
+    }
+}

+ 37 - 1
nodeEditor/src/components/diagram/input/inputNodeWidget.tsx

@@ -4,6 +4,7 @@ import { InputNodeModel } from './inputNodeModel';
 import { Nullable } from 'babylonjs/types';
 import { GlobalState } from '../../../globalState';
 import { DefaultPortModel } from '../defaultPortModel';
+import { NodeMaterialWellKnownValues } from 'babylonjs/Materials/Node/nodeMaterialWellKnownValues';
 
 /**
  * GenericNodeWidgetProps
@@ -54,14 +55,49 @@ export class InputNodeWidget extends React.Component<InputNodeWidgetProps> {
                 break;
             }
         }
+
+        let connection = this.props.node!.connection!;
+        let value = "";
+
+        if (connection.isAttribute) {
+            value = "mesh." + connection.name;
+        } else if (connection.isWellKnownValue) {
+            switch (connection.wellKnownValue) {
+                case NodeMaterialWellKnownValues.World:
+                    value = "World";
+                    break;
+                case NodeMaterialWellKnownValues.WorldView:
+                    value = "World x View";
+                    break;
+                case NodeMaterialWellKnownValues.WorldViewProjection:
+                    value = "World x View x Projection";
+                    break;
+                case NodeMaterialWellKnownValues.View:
+                    value = "View";
+                    break;
+                case NodeMaterialWellKnownValues.ViewProjection:
+                    value = "View x Projection";
+                    break;
+                case NodeMaterialWellKnownValues.Projection:
+                    value = "Projection";
+                    break;
+                case NodeMaterialWellKnownValues.Automatic:
+                    value = "Automatic";
+                    break;
+            }
+        }
+
         return (
-            <div className={"diagramBlock input"}>
+            <div className={"diagramBlock input" + (connection.isAttribute ? " attribute" : "")}>
                 <div className="header">
                     {port!.name}
                 </div>
                 <div className="outputs">
                     {outputPorts}
                 </div>
+                <div className="value">
+                    {value}
+                </div>
             </div>
         );
     }

+ 4 - 9
nodeEditor/src/components/diagram/texture/textureNodeWidget.tsx

@@ -39,7 +39,6 @@ export class TextureNodeWidget extends React.Component<TextureNodeWidgetProps> {
     render() {
         var inputPorts = new Array<JSX.Element>();
         var outputPorts = new Array<JSX.Element>();
-        var value = <div></div>
         if (this.props.node) {
             // Input/Output ports
             for (var key in this.props.node.ports) {
@@ -68,13 +67,6 @@ export class TextureNodeWidget extends React.Component<TextureNodeWidgetProps> {
                     )
                 }
             }
-
-            // Display the view depending on the value type of the node
-            if (this.props.node.texture) {
-                value = (
-                    <TextureLineComponent ref="textureView" width={200} height={180} texture={this.props.node.texture} hideChannelSelect={true} />
-                )
-            }
         }
 
         return (
@@ -88,7 +80,10 @@ export class TextureNodeWidget extends React.Component<TextureNodeWidgetProps> {
                 <div className="outputs">
                     {outputPorts}
                 </div>
-                {value}
+                {
+                    this.props.node && this.props.node.texture &&
+                    <TextureLineComponent ref="textureView" width={200} height={180} texture={this.props.node.texture} hideChannelSelect={true} />
+                }
             </div>
         );
     }

+ 6 - 5
nodeEditor/src/components/nodeList/nodeListComponent.tsx

@@ -35,18 +35,19 @@ export class NodeListComponent extends React.Component<INodeListComponentProps>
     render() {
         // Block types used to create the menu from
         const allBlocks = {
-            Fragment: [AlphaTestBlock, FragmentOutputBlock, ImageProcessingBlock, RGBAMergerBlock, RGBASplitterBlock, TextureBlock],
-            Vertex: [BonesBlock, InstancesBlock, MorphTargetsBlock, VertexOutputBlock],
+            Vertex: [BonesBlock, InstancesBlock, MorphTargetsBlock],
+            Fragment: [AlphaTestBlock, , ImageProcessingBlock, RGBAMergerBlock, RGBASplitterBlock, TextureBlock],
+            Outputs: [VertexOutputBlock, FragmentOutputBlock],
             Dual: [FogBlock],
-            Other: [AddBlock, ClampBlock, MatrixMultiplicationBlock, MultiplyBlock, Vector2TransformBlock, Vector3TransformBlock, Vector4TransformBlock],
-            Value: ["Texture", "Vector2", "Vector3", "Matrix"],
+            Math: [AddBlock, ClampBlock, MatrixMultiplicationBlock, MultiplyBlock, Vector2TransformBlock, Vector3TransformBlock, Vector4TransformBlock],
+            Inputs: ["Texture", "Vector2", "Vector3", "Matrix"],
         }
 
         // Create node menu
         var blockMenu = []
         for (var key in allBlocks) {
             var blockList = (allBlocks as any)[key].map((b: any) => {
-                var label = typeof b === "string" ? b : b.prototype.getClassName()
+                var label = typeof b === "string" ? b : b.prototype.getClassName().replace("Block", "")
                 var onClick = typeof b === "string" ? () => { this.props.onAddValueNode(b) } : () => { this.props.onAddNodeFromClass(b) };
                 return <ButtonLineComponent label={label} onClick={onClick} />
             })

+ 3 - 4
nodeEditor/src/components/propertyTab/properties/vector2PropertyTabComponent.tsx

@@ -1,20 +1,19 @@
 
 import * as React from "react";
 import { GlobalState } from '../../../globalState';
-import { GenericNodeModel } from '../../diagram/generic/genericNodeModel';
 import { Vector2LineComponent } from '../../../sharedComponents/vector2LineComponent';
-import { InputNodeModel } from '../../diagram/input/inputNodeModel';
+import { NodeMaterialConnectionPoint } from 'babylonjs/Materials/Node/nodeMaterialBlockConnectionPoint';
 
 interface IVector2PropertyTabComponentProps {
     globalState: GlobalState;
-    node: GenericNodeModel | InputNodeModel;
+    connection: NodeMaterialConnectionPoint;
 }
 
 export class Vector2PropertyTabComponent extends React.Component<IVector2PropertyTabComponentProps> {
 
     render() {
         return (
-            <Vector2LineComponent label="Value" target={this.props.node} propertyName="vector2"></Vector2LineComponent>
+            <Vector2LineComponent label="Value" target={this.props.connection} propertyName="value"></Vector2LineComponent>
         );
     }
 }

+ 3 - 4
nodeEditor/src/components/propertyTab/properties/vector3PropertyTabComponent.tsx

@@ -1,20 +1,19 @@
 
 import * as React from "react";
 import { GlobalState } from '../../../globalState';
-import { GenericNodeModel } from '../../diagram/generic/genericNodeModel';
 import { Vector3LineComponent } from '../../../sharedComponents/vector3LineComponent';
-import { InputNodeModel } from '../../diagram/input/inputNodeModel';
+import { NodeMaterialConnectionPoint } from 'babylonjs/Materials/Node/nodeMaterialBlockConnectionPoint';
 
 interface IVector3PropertyTabComponentProps {
     globalState: GlobalState;
-    node: GenericNodeModel | InputNodeModel;
+    connection: NodeMaterialConnectionPoint;
 }
 
 export class Vector3PropertyTabComponent extends React.Component<IVector3PropertyTabComponentProps> {
 
     render() {
         return (
-            <Vector3LineComponent label="Value" target={this.props.node} propertyName="vector3"></Vector3LineComponent>
+            <Vector3LineComponent label="Value" target={this.props.connection} propertyName="value"></Vector3LineComponent>
         );
     }
 }

+ 141 - 0
nodeEditor/src/components/propertyTab/propertyTab.scss

@@ -117,4 +117,145 @@
         }  
     }
 
+    
+    .checkBoxLine {
+        padding-left: $line-padding-left;
+        height: 30px;
+        display: grid;
+        grid-template-columns: 1fr auto;
+
+        .label {
+            grid-column: 1;
+            display: flex;
+            align-items: center;
+        }
+
+        .checkBox {
+            grid-column: 2;
+            
+            display: flex;
+            align-items: center;
+
+            .lbl {
+                position: relative;
+                display: block;
+                height: 14px;
+                width: 34px;
+                margin-right: 5px;
+                background: #898989;
+                border-radius: 100px;
+                cursor: pointer;
+                transition: all 0.3s ease;
+            }
+
+            .lbl:after {
+                position: absolute;
+                left: 3px;
+                top: 2px;
+                display: block;
+                width: 10px;
+                height: 10px;
+                border-radius: 100px;
+                background: #fff;
+                box-shadow: 0px 3px 3px rgba(0,0,0,0.05);
+                content: '';
+                transition: all 0.15s ease;
+            }
+
+            .lbl:active:after { 
+                transform: scale(1.15, 0.85); 
+            }
+
+            .cbx:checked ~ label { 
+                background: rgb(51, 122, 183);
+            }
+
+            .cbx:checked ~ label:after {
+                left: 20px;
+                background: rgb(22, 73, 117);
+            }
+
+            .hidden { 
+                display: none; 
+            }               
+        }                    
+    }  
+
+    .listLine {
+        padding-left: $line-padding-left;
+        height: 30px;
+        display: grid;
+        grid-template-columns: 1fr auto;
+
+
+        .label {
+            grid-column: 1;
+            display: flex;
+            align-items: center;
+        }
+
+        .options {
+            grid-column: 2;
+            
+            display: flex;
+            align-items: center;   
+            margin-right: 5px;
+
+            select {
+                width: 115px;
+            }
+        }                    
+    }  
+    
+    .textLine {
+        padding-left: $line-padding-left;
+        height: 30px;
+        display: grid;
+        grid-template-columns: 1fr auto;
+
+        .label {
+            grid-column: 1;
+            display: flex;
+            align-items: center;
+        }
+
+        .link-value {
+            grid-column: 2;
+            white-space: nowrap;
+            text-overflow: ellipsis;
+            overflow: hidden;
+            text-align: end;
+            opacity: 0.8;
+            margin:5px;
+            margin-top: 6px;
+            max-width: 140px;
+            text-decoration: underline;
+            cursor: pointer;
+        }
+
+        .value {
+            grid-column: 2;
+            white-space: nowrap;
+            text-overflow: ellipsis;
+            overflow: hidden;
+            text-align: end;
+            opacity: 0.8;
+            margin:5px;
+            margin-top: 6px;
+            max-width: 200px;
+            -webkit-user-select: text; 
+            -moz-user-select: text;   
+            -ms-user-select: text;    
+            user-select: text;                
+
+            &.check {
+                color: green;
+            }
+
+            &.uncheck {
+                color: red;
+            }  
+        }
+    }    
+
 }

+ 1 - 0
nodeEditor/src/globalState.ts

@@ -8,4 +8,5 @@ export class GlobalState {
     hostElement: HTMLElement;
     hostDocument: HTMLDocument;
     onSelectionChangedObservable = new Observable<Nullable<DefaultNodeModel>>();
+    onRebuildRequiredObservable = new Observable<void>();
 }

+ 11 - 9
nodeEditor/src/graphEditor.tsx

@@ -20,8 +20,8 @@ import { DefaultNodeModel } from './components/diagram/defaultNodeModel';
 import { TextureNodeModel } from './components/diagram/texture/textureNodeModel';
 import { DefaultPortModel } from './components/diagram/defaultPortModel';
 import { InputNodeFactory } from './components/diagram/input/inputNodeFactory';
-import { TextureBlock } from 'babylonjs';
 import { InputNodeModel } from './components/diagram/input/inputNodeModel';
+import { TextureBlock } from 'babylonjs/Materials/Node/Blocks/Fragment/textureBlock';
 
 require("storm-react-diagrams/dist/style.min.css");
 require("./main.scss");
@@ -49,6 +49,7 @@ export class NodeCreationOptions {
     column: number;
     nodeMaterialBlock?: NodeMaterialBlock;
     type?: string;
+    connection?: NodeMaterialConnectionPoint;
 }
 
 export class GraphEditor extends React.Component<IGraphEditorProps> {
@@ -87,6 +88,7 @@ export class GraphEditor extends React.Component<IGraphEditorProps> {
             }
         } else {
             outputNode = new InputNodeModel();
+            (outputNode as InputNodeModel).connection = options.connection;
         }
         this._nodes.push(outputNode)
         outputNode.setPosition(1600 - (300 * options.column), 210 * this._rowPos[options.column])
@@ -187,7 +189,13 @@ export class GraphEditor extends React.Component<IGraphEditorProps> {
                     console.log("node deleted")
                 }
             }
-        })
+        });
+
+        this.props.globalState.onRebuildRequiredObservable.add(() => {
+            if (this.props.globalState.nodeMaterial) {
+                this.props.globalState.nodeMaterial.build();
+            }
+        });
 
         // Load graph of nodes from the material
         if (this.props.globalState.nodeMaterial) {
@@ -224,15 +232,9 @@ export class GraphEditor extends React.Component<IGraphEditorProps> {
     }
 
     addValueNode(type: string, column = 0, connection?: NodeMaterialConnectionPoint) {
-        if (connection && connection.isAttribute) {
-            this.forceUpdate();
-            return null;
-        }
-        var localNode = this.createNodeFromObject({ column: column, type: type })
+        var localNode = this.createNodeFromObject({ column: column, type: type, connection: connection })
         var outPort = new DefaultPortModel(type, "output");
 
-        localNode.prepareConnection(type, outPort, connection);
-
         localNode.addPort(outPort);
         this.forceUpdate();
 

+ 85 - 0
nodeEditor/src/sharedComponents/checkBoxLineComponent.tsx

@@ -0,0 +1,85 @@
+import * as React from "react";
+import { Observable } from "babylonjs/Misc/observable";
+import { PropertyChangedEvent } from "./propertyChangedEvent";
+
+export interface ICheckBoxLineComponentProps {
+    label: string;
+    target?: any;
+    propertyName?: string;
+    isSelected?: () => boolean;
+    onSelect?: (value: boolean) => void;
+    onValueChanged?: () => void;
+    onPropertyChangedObservable?: Observable<PropertyChangedEvent>;
+}
+
+export class CheckBoxLineComponent extends React.Component<ICheckBoxLineComponentProps, { isSelected: boolean }> {
+    private static _UniqueIdSeed = 0;
+    private _uniqueId: number;
+    private _localChange = false;
+    constructor(props: ICheckBoxLineComponentProps) {
+        super(props);
+
+        this._uniqueId = CheckBoxLineComponent._UniqueIdSeed++;
+
+        if (this.props.isSelected) {
+            this.state = { isSelected: this.props.isSelected() };
+        } else {
+            this.state = { isSelected: this.props.target[this.props.propertyName!] === true };
+        }
+    }
+
+    shouldComponentUpdate(nextProps: ICheckBoxLineComponentProps, nextState: { isSelected: boolean }) {
+        var currentState: boolean;
+
+        if (this.props.isSelected) {
+            currentState = nextProps.isSelected!();
+        } else {
+            currentState = nextProps.target[nextProps.propertyName!] === true;
+        }
+
+        if (currentState !== nextState.isSelected || this._localChange) {
+            nextState.isSelected = currentState;
+            this._localChange = false;
+            return true;
+        }
+        return false;
+    }
+
+    onChange() {
+        this._localChange = true;
+        if (this.props.onSelect) {
+            this.props.onSelect(!this.state.isSelected);
+        } else {
+            if (this.props.onPropertyChangedObservable) {
+                this.props.onPropertyChangedObservable.notifyObservers({
+                    object: this.props.target,
+                    property: this.props.propertyName!,
+                    value: !this.state.isSelected,
+                    initialValue: this.state.isSelected
+                });
+            }
+
+            this.props.target[this.props.propertyName!] = !this.state.isSelected;
+        }
+
+        if (this.props.onValueChanged) {
+            this.props.onValueChanged();
+        }
+
+        this.setState({ isSelected: !this.state.isSelected });
+    }
+
+    render() {
+        return (
+            <div className="checkBoxLine">
+                <div className="label">
+                    {this.props.label}
+                </div>
+                <div className="checkBox">
+                    <input type="checkbox" id={"checkbox" + this._uniqueId} className="cbx hidden" checked={this.state.isSelected} onChange={() => this.onChange()} />
+                    <label htmlFor={"checkbox" + this._uniqueId} className="lbl"></label>
+                </div>
+            </div>
+        );
+    }
+}

+ 95 - 0
nodeEditor/src/sharedComponents/optionsLineComponent.tsx

@@ -0,0 +1,95 @@
+import * as React from "react";
+
+import { Observable } from "babylonjs/Misc/observable";
+import { PropertyChangedEvent } from "./propertyChangedEvent";
+
+class ListLineOption {
+    public label: string;
+    public value: number;
+}
+
+interface IOptionsLineComponentProps {
+    label: string,
+    target: any,
+    propertyName: string,
+    options: ListLineOption[],
+    noDirectUpdate?: boolean,
+    onSelect?: (value: number) => void,
+    onPropertyChangedObservable?: Observable<PropertyChangedEvent>
+}
+
+export class OptionsLineComponent extends React.Component<IOptionsLineComponentProps, { value: number }> {
+    private _localChange = false;
+
+    constructor(props: IOptionsLineComponentProps) {
+        super(props);
+
+        this.state = { value: props.target[props.propertyName] };
+    }
+
+    shouldComponentUpdate(nextProps: IOptionsLineComponentProps, nextState: { value: number }) {
+        if (this._localChange) {
+            this._localChange = false;
+            return true;
+        }
+
+        const newValue = nextProps.target[nextProps.propertyName];
+        if (newValue != null && newValue !== nextState.value) {
+            nextState.value = newValue;
+            return true;
+        }
+        return false;
+    }
+
+    raiseOnPropertyChanged(newValue: number, previousValue: number) {
+        if (!this.props.onPropertyChangedObservable) {
+            return;
+        }
+
+        this.props.onPropertyChangedObservable.notifyObservers({
+            object: this.props.target,
+            property: this.props.propertyName,
+            value: newValue,
+            initialValue: previousValue
+        });
+    }
+
+    updateValue(valueString: string) {
+        const value = parseInt(valueString);
+        this._localChange = true;
+
+        const store = this.state.value;
+        if (!this.props.noDirectUpdate) {
+            this.props.target[this.props.propertyName] = value;
+        }
+        this.setState({ value: value });
+
+        this.raiseOnPropertyChanged(value, store);
+
+        if (this.props.onSelect) {
+            this.props.onSelect(value);
+        }
+    }
+
+    render() {
+        return (
+            <div className="listLine">
+                <div className="label">
+                    {this.props.label}
+
+                </div>
+                <div className="options">
+                    <select onChange={evt => this.updateValue(evt.target.value)} value={this.state.value}>
+                        {
+                            this.props.options.map(option => {
+                                return (
+                                    <option key={option.label} value={option.value}>{option.label}</option>
+                                )
+                            })
+                        }
+                    </select>
+                </div>
+            </div>
+        );
+    }
+}

+ 49 - 0
nodeEditor/src/sharedComponents/textLineComponent.tsx

@@ -0,0 +1,49 @@
+import * as React from "react";
+
+interface ITextLineComponentProps {
+    label: string;
+    value: string;
+    color?: string;
+    underline?: boolean;
+    onLink?: () => void;
+}
+
+export class TextLineComponent extends React.Component<ITextLineComponentProps> {
+    constructor(props: ITextLineComponentProps) {
+        super(props);
+    }
+
+    onLink() {
+        if (!this.props.onLink) {
+            return;
+        }
+
+        this.props.onLink();
+    }
+
+    renderContent() {
+        if (this.props.onLink) {
+            return (
+                <div className="link-value" title={this.props.value} onClick={() => this.onLink()}>
+                    {this.props.value || "no name"}
+                </div>
+            )
+        }
+        return (
+            <div className="value" title={this.props.value} style={{ color: this.props.color ? this.props.color : "" }}>
+                {this.props.value || "no name"}
+            </div>
+        )
+    }
+
+    render() {
+        return (
+            <div className={this.props.underline ? "textLine underline" : "textLine"}>
+                <div className="label">
+                    {this.props.label}
+                </div>
+                {this.renderContent()}
+            </div>
+        );
+    }
+}

+ 13 - 17
serializers/src/glTF/2.0/Extensions/KHR_texture_transform.ts

@@ -1,9 +1,7 @@
 import { ImageMimeType } from "babylonjs-gltf2interface";
 
 import { Nullable } from "babylonjs/types";
-import { Vector2 } from "babylonjs/Maths/math";
 import { Tools } from "babylonjs/Misc/tools";
-import { BaseTexture } from "babylonjs/Materials/Textures/baseTexture";
 import { Texture } from "babylonjs/Materials/Textures/texture";
 import { ProceduralTexture } from "babylonjs/Materials/Textures/Procedurals/proceduralTexture";
 import { Scene } from "babylonjs/scene";
@@ -52,6 +50,14 @@ export class KHR_texture_transform implements IGLTFExporterExtensionV2 {
 
     public preExportTextureAsync(context: string, babylonTexture: Texture, mimeType: ImageMimeType): Nullable<Promise<Texture>> {
         return new Promise((resolve, reject) => {
+            const scene = babylonTexture.getScene();
+            if (!scene) {
+                reject(`${context}: "scene" is not defined for Babylon texture ${babylonTexture.name}!`);
+                return;
+            }
+
+            // TODO: this doesn't take into account rotation center values
+
             const texture_transform_extension: IKHRTextureTransform = {};
 
             if (babylonTexture.uOffset !== 0 || babylonTexture.vOffset !== 0) {
@@ -68,20 +74,10 @@ export class KHR_texture_transform implements IGLTFExporterExtensionV2 {
 
             if (!Object.keys(texture_transform_extension).length) {
                 resolve(babylonTexture);
+                return;
             }
 
-            const scale = texture_transform_extension.scale ? new Vector2(texture_transform_extension.scale[0], texture_transform_extension.scale[1]) : Vector2.One();
-            const rotation = texture_transform_extension.rotation != null ? texture_transform_extension.rotation : 0;
-            const offset = texture_transform_extension.offset ? new Vector2(texture_transform_extension.offset[0], texture_transform_extension.offset[1]) : Vector2.Zero();
-            const scene = babylonTexture.getScene();
-            if (!scene) {
-                reject(`${context}: "scene" is not defined for Babylon texture ${babylonTexture.name}!`);
-            }
-            else {
-                this.textureTransformTextureAsync(babylonTexture, offset, rotation, scale, scene).then((texture) => {
-                    resolve(texture as Texture);
-                });
-            }
+            return this._textureTransformTextureAsync(babylonTexture, scene);
         });
     }
 
@@ -93,8 +89,8 @@ export class KHR_texture_transform implements IGLTFExporterExtensionV2 {
      * @param scale
      * @param scene
      */
-    public textureTransformTextureAsync(babylonTexture: Texture, offset: Vector2, rotation: number, scale: Vector2, scene: Scene): Promise<BaseTexture> {
-        return new Promise((resolve, reject) => {
+    private _textureTransformTextureAsync(babylonTexture: Texture, scene: Scene): Promise<Texture> {
+        return new Promise((resolve) => {
             const proceduralTexture = new ProceduralTexture(`${babylonTexture.name}`, babylonTexture.getSize(), "textureTransform", scene);
             if (!proceduralTexture) {
                 Tools.Log(`Cannot create procedural texture for ${babylonTexture.name}!`);
@@ -109,7 +105,7 @@ export class KHR_texture_transform implements IGLTFExporterExtensionV2 {
                 proceduralTexture.render();
                 resolve(proceduralTexture);
             } else {
-                (proceduralTexture as any).getEffect().executeWhenCompiled(() => {
+                proceduralTexture.getEffect().executeWhenCompiled(() => {
                     proceduralTexture.render();
                     resolve(proceduralTexture);
                 });

+ 2 - 2
src/Materials/Node/Blocks/Dual/fogBlock.ts

@@ -83,10 +83,10 @@ export class FogBlock extends NodeMaterialBlock {
             this.view.setAsWellKnownValue(NodeMaterialWellKnownValues.View);
         }
         if (!this.fogColor.connectedPoint) {
-            this.fogColor.setAsWellKnownValue(NodeMaterialWellKnownValues.BlockBased);
+            this.fogColor.setAsWellKnownValue(NodeMaterialWellKnownValues.Automatic);
         }
         if (!this.fogParameters.connectedPoint) {
-            this.fogParameters.setAsWellKnownValue(NodeMaterialWellKnownValues.BlockBased);
+            this.fogParameters.setAsWellKnownValue(NodeMaterialWellKnownValues.Automatic);
         }
         this._outputs[0].isVarying = true;
     }

+ 21 - 3
src/Materials/Node/nodeMaterialBlockConnectionPoint.ts

@@ -181,13 +181,31 @@ export class NodeMaterialConnectionPoint {
 
     /**
      * Set the source of this connection point to a well known value
-     * @param value define the well known value to use (world, view, etc...)
+     * @param value define the well known value to use (world, view, etc...) or null to switch to manual value
      * @returns the current connection point
      */
-    public setAsWellKnownValue(value: NodeMaterialWellKnownValues): NodeMaterialConnectionPoint {
+    public setAsWellKnownValue(value: Nullable<NodeMaterialWellKnownValues>): NodeMaterialConnectionPoint {
+        this.wellKnownValue = value;
+        return this;
+    }
+
+    /**
+     * Gets a boolean indicating that the current connection point is a well known value
+     */
+    public get isWellKnownValue(): boolean {
+        return this._wellKnownValue != null;
+    }
+
+    /**
+     * Gets or sets the current well known value or null if not defined as well know value
+     */
+    public get wellKnownValue(): Nullable<NodeMaterialWellKnownValues> {
+        return this._wellKnownValue;
+    }
+
+    public set wellKnownValue(value: Nullable<NodeMaterialWellKnownValues>) {
         this.isUniform = true;
         this._wellKnownValue = value;
-        return this;
     }
 
     private _getTypeLength(type: NodeMaterialBlockConnectionPointTypes) {

+ 1 - 1
src/Materials/Node/nodeMaterialWellKnownValues.ts

@@ -15,5 +15,5 @@ export enum NodeMaterialWellKnownValues {
     /** WorldViewProjection */
     WorldViewProjection = 6,
     /** Will be filled by the block itself */
-    BlockBased = 7
+    Automatic = 7
 }