sebavan 6 gadi atpakaļ
vecāks
revīzija
2a0d48f805
24 mainītis faili ar 61556 papildinājumiem un 9838 dzēšanām
  1. 51646 0
      Playground/babylon.d.txt
  2. 9776 9776
      dist/preview release/babylon.d.ts
  3. 1 1
      dist/preview release/gui/babylon.gui.js
  4. 1 1
      dist/preview release/gui/babylon.gui.min.js
  5. 5 5
      dist/preview release/inspector/babylon.inspector.bundle.js
  6. 7 9
      dist/preview release/inspector/babylon.inspector.d.ts
  7. 16 20
      dist/preview release/inspector/babylon.inspector.module.d.ts
  8. 1 0
      dist/preview release/loaders/babylon.glTF2FileLoader.js
  9. 1 1
      dist/preview release/loaders/babylon.glTF2FileLoader.min.js
  10. 1 0
      dist/preview release/loaders/babylon.glTFFileLoader.js
  11. 1 1
      dist/preview release/loaders/babylon.glTFFileLoader.min.js
  12. 1 0
      dist/preview release/loaders/babylonjs.loaders.js
  13. 1 1
      dist/preview release/loaders/babylonjs.loaders.min.js
  14. 15 1
      dist/preview release/viewer/babylon.viewer.d.ts
  15. 2 2
      dist/preview release/viewer/babylon.viewer.js
  16. 4 4
      dist/preview release/viewer/babylon.viewer.max.js
  17. 18 1
      dist/preview release/viewer/babylon.viewer.module.d.ts
  18. 9 13
      gui/src/2D/controls/stackPanel.ts
  19. 9 1
      inspector/src/components/actionTabs/tabs/propertyGridTabComponent.tsx
  20. 33 0
      inspector/src/components/actionTabs/tabs/propertyGrids/gui/stackPanelPropertyGridComponent.tsx
  21. 2 0
      loaders/src/glTF/2.0/glTFLoader.ts
  22. BIN
      tests/validation/ReferenceImages/StackPanel.png
  23. BIN
      tests/validation/ReferenceImages/gltfMaterial.png
  24. 6 1
      tests/validation/config.json

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 51646 - 0
Playground/babylon.d.txt


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


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


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


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


+ 7 - 9
dist/preview release/inspector/babylon.inspector.d.ts

@@ -3,15 +3,13 @@
 //   ../../../../Tools/Gulp/babylonjs
 //   ../../../../Tools/Gulp/babylonjs
 declare module INSPECTOR {
 declare module INSPECTOR {
 }
 }
-declare module INSPECTOR {
-    export class Inspector {
-        static OnSelectionChangeObservable: BABYLON.Observable<string>;
-        static OnPropertyChangedObservable: BABYLON.Observable<PropertyChangedEvent>;
-        static readonly IsVisible: boolean;
-        static EarlyAttachToLoader(): void;
-        static Show(scene: BABYLON.Scene, userOptions: Partial<BABYLON.IInspectorOptions>): void;
-        static Hide(): void;
-    }
+export declare class Inspector {
+    static OnSelectionChangeObservable: BABYLON.Observable<string>;
+    static OnPropertyChangedObservable: BABYLON.Observable<PropertyChangedEvent>;
+    static readonly IsVisible: boolean;
+    static EarlyAttachToLoader(): void;
+    static Show(scene: BABYLON.Scene, userOptions: Partial<BABYLON.IInspectorOptions>): void;
+    static Hide(): void;
 }
 }
 declare module INSPECTOR {
 declare module INSPECTOR {
     export class PropertyChangedEvent {
     export class PropertyChangedEvent {

+ 16 - 20
dist/preview release/inspector/babylon.inspector.module.d.ts

@@ -6,17 +6,15 @@ declare module 'babylonjs-inspector' {
     export * from "babylonjs-inspector/inspector";
     export * from "babylonjs-inspector/inspector";
 }
 }
 
 
-declare module 'babylonjs-inspector/inspector' {
-    import { Scene, Observable, IInspectorOptions } from "babylonjs";
-    import { PropertyChangedEvent } from "babylonjs-inspector/components/propertyChangedEvent";
-    export class Inspector {
-        static OnSelectionChangeObservable: Observable<string>;
-        static OnPropertyChangedObservable: Observable<PropertyChangedEvent>;
-        static readonly IsVisible: boolean;
-        static EarlyAttachToLoader(): void;
-        static Show(scene: Scene, userOptions: Partial<IInspectorOptions>): void;
-        static Hide(): void;
-    }
+import { Scene, Observable, IInspectorOptions } from "babylonjs";
+import { PropertyChangedEvent } from "babylonjs-inspector/components/propertyChangedEvent";
+export declare class Inspector {
+    static OnSelectionChangeObservable: Observable<string>;
+    static OnPropertyChangedObservable: Observable<PropertyChangedEvent>;
+    static readonly IsVisible: boolean;
+    static EarlyAttachToLoader(): void;
+    static Show(scene: Scene, userOptions: Partial<IInspectorOptions>): void;
+    static Hide(): void;
 }
 }
 
 
 declare module 'babylonjs-inspector/components/propertyChangedEvent' {
 declare module 'babylonjs-inspector/components/propertyChangedEvent' {
@@ -34,15 +32,13 @@ declare module 'babylonjs-inspector/components/propertyChangedEvent' {
 //   ../../../../Tools/Gulp/babylonjs
 //   ../../../../Tools/Gulp/babylonjs
 declare module INSPECTOR {
 declare module INSPECTOR {
 }
 }
-declare module INSPECTOR {
-    export class Inspector {
-        static OnSelectionChangeObservable: BABYLON.Observable<string>;
-        static OnPropertyChangedObservable: BABYLON.Observable<PropertyChangedEvent>;
-        static readonly IsVisible: boolean;
-        static EarlyAttachToLoader(): void;
-        static Show(scene: BABYLON.Scene, userOptions: Partial<BABYLON.IInspectorOptions>): void;
-        static Hide(): void;
-    }
+export declare class Inspector {
+    static OnSelectionChangeObservable: BABYLON.Observable<string>;
+    static OnPropertyChangedObservable: BABYLON.Observable<PropertyChangedEvent>;
+    static readonly IsVisible: boolean;
+    static EarlyAttachToLoader(): void;
+    static Show(scene: BABYLON.Scene, userOptions: Partial<BABYLON.IInspectorOptions>): void;
+    static Hide(): void;
 }
 }
 declare module INSPECTOR {
 declare module INSPECTOR {
     export class PropertyChangedEvent {
     export class PropertyChangedEvent {

+ 1 - 0
dist/preview release/loaders/babylon.glTF2FileLoader.js

@@ -2116,6 +2116,7 @@ var BABYLON;
                     if (material.normalTexture.scale != undefined) {
                     if (material.normalTexture.scale != undefined) {
                         babylonMaterial.bumpTexture.level = material.normalTexture.scale;
                         babylonMaterial.bumpTexture.level = material.normalTexture.scale;
                     }
                     }
+                    babylonMaterial.forceIrradianceInFragment = true;
                 }
                 }
                 if (material.occlusionTexture) {
                 if (material.occlusionTexture) {
                     promises.push(this.loadTextureInfoAsync(context + "/occlusionTexture", material.occlusionTexture, function (texture) {
                     promises.push(this.loadTextureInfoAsync(context + "/occlusionTexture", material.occlusionTexture, function (texture) {

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


+ 1 - 0
dist/preview release/loaders/babylon.glTFFileLoader.js

@@ -4324,6 +4324,7 @@ var BABYLON;
                     if (material.normalTexture.scale != undefined) {
                     if (material.normalTexture.scale != undefined) {
                         babylonMaterial.bumpTexture.level = material.normalTexture.scale;
                         babylonMaterial.bumpTexture.level = material.normalTexture.scale;
                     }
                     }
+                    babylonMaterial.forceIrradianceInFragment = true;
                 }
                 }
                 if (material.occlusionTexture) {
                 if (material.occlusionTexture) {
                     promises.push(this.loadTextureInfoAsync(context + "/occlusionTexture", material.occlusionTexture, function (texture) {
                     promises.push(this.loadTextureInfoAsync(context + "/occlusionTexture", material.occlusionTexture, function (texture) {

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


+ 1 - 0
dist/preview release/loaders/babylonjs.loaders.js

@@ -5386,6 +5386,7 @@ var BABYLON;
                     if (material.normalTexture.scale != undefined) {
                     if (material.normalTexture.scale != undefined) {
                         babylonMaterial.bumpTexture.level = material.normalTexture.scale;
                         babylonMaterial.bumpTexture.level = material.normalTexture.scale;
                     }
                     }
+                    babylonMaterial.forceIrradianceInFragment = true;
                 }
                 }
                 if (material.occlusionTexture) {
                 if (material.occlusionTexture) {
                     promises.push(this.loadTextureInfoAsync(context + "/occlusionTexture", material.occlusionTexture, function (texture) {
                     promises.push(this.loadTextureInfoAsync(context + "/occlusionTexture", material.occlusionTexture, function (texture) {

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


+ 15 - 1
dist/preview release/viewer/babylon.viewer.d.ts

@@ -924,7 +924,7 @@ declare module BabylonViewer {
       * @param name the name of the custom optimizer configuration
       * @param name the name of the custom optimizer configuration
       * @param upgrade set to true if you want to upgrade optimizer and false if you want to degrade
       * @param upgrade set to true if you want to upgrade optimizer and false if you want to degrade
       */
       */
-    export function getCustomOptimizerByName(name: string, upgrade?: boolean): (sceneManager: SceneManager) => boolean;
+    export function getCustomOptimizerByName(name: string, upgrade?: boolean): typeof extendedUpgrade;
     export function registerCustomOptimizer(name: string, optimizer: (sceneManager: SceneManager) => boolean): void;
     export function registerCustomOptimizer(name: string, optimizer: (sceneManager: SceneManager) => boolean): void;
 }
 }
 declare module BabylonViewer {
 declare module BabylonViewer {
@@ -1558,6 +1558,20 @@ declare module BabylonViewer {
     export function addLoaderPlugin(name: string, plugin: ILoaderPlugin): void;
     export function addLoaderPlugin(name: string, plugin: ILoaderPlugin): void;
 }
 }
 declare module BabylonViewer {
 declare module BabylonViewer {
+    /**
+        * A custom upgrade-oriented function configuration for the scene optimizer.
+        *
+        * @param viewer the viewer to optimize
+        */
+    export function extendedUpgrade(sceneManager: SceneManager): boolean;
+    /**
+        * A custom degrade-oriented function configuration for the scene optimizer.
+        *
+        * @param viewer the viewer to optimize
+        */
+    export function extendedDegrade(sceneManager: SceneManager): boolean;
+}
+declare module BabylonViewer {
 }
 }
 declare module BabylonViewer {
 declare module BabylonViewer {
     export interface IEnvironmentMapConfiguration {
     export interface IEnvironmentMapConfiguration {

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


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


+ 18 - 1
dist/preview release/viewer/babylon.viewer.module.d.ts

@@ -985,13 +985,14 @@ declare module 'babylonjs-viewer/templating/viewerTemplatePlugin' {
 }
 }
 
 
 declare module 'babylonjs-viewer/optimizer/custom' {
 declare module 'babylonjs-viewer/optimizer/custom' {
+    import { extendedUpgrade } from "babylonjs-viewer/optimizer/custom/extended";
     import { SceneManager } from "babylonjs-viewer/managers/sceneManager";
     import { SceneManager } from "babylonjs-viewer/managers/sceneManager";
     /**
     /**
       *
       *
       * @param name the name of the custom optimizer configuration
       * @param name the name of the custom optimizer configuration
       * @param upgrade set to true if you want to upgrade optimizer and false if you want to degrade
       * @param upgrade set to true if you want to upgrade optimizer and false if you want to degrade
       */
       */
-    export function getCustomOptimizerByName(name: string, upgrade?: boolean): (sceneManager: SceneManager) => boolean;
+    export function getCustomOptimizerByName(name: string, upgrade?: boolean): typeof extendedUpgrade;
     export function registerCustomOptimizer(name: string, optimizer: (sceneManager: SceneManager) => boolean): void;
     export function registerCustomOptimizer(name: string, optimizer: (sceneManager: SceneManager) => boolean): void;
 }
 }
 
 
@@ -1662,6 +1663,22 @@ declare module 'babylonjs-viewer/loader/plugins' {
     export function addLoaderPlugin(name: string, plugin: ILoaderPlugin): void;
     export function addLoaderPlugin(name: string, plugin: ILoaderPlugin): void;
 }
 }
 
 
+declare module 'babylonjs-viewer/optimizer/custom/extended' {
+    import { SceneManager } from 'babylonjs-viewer/managers/sceneManager';
+    /**
+        * A custom upgrade-oriented function configuration for the scene optimizer.
+        *
+        * @param viewer the viewer to optimize
+        */
+    export function extendedUpgrade(sceneManager: SceneManager): boolean;
+    /**
+        * A custom degrade-oriented function configuration for the scene optimizer.
+        *
+        * @param viewer the viewer to optimize
+        */
+    export function extendedDegrade(sceneManager: SceneManager): boolean;
+}
+
 declare module 'babylonjs-viewer/configuration/interfaces' {
 declare module 'babylonjs-viewer/configuration/interfaces' {
     export * from 'babylonjs-viewer/configuration/interfaces/cameraConfiguration';
     export * from 'babylonjs-viewer/configuration/interfaces/cameraConfiguration';
     export * from 'babylonjs-viewer/configuration/interfaces/colorGradingConfiguration';
     export * from 'babylonjs-viewer/configuration/interfaces/colorGradingConfiguration';

+ 9 - 13
gui/src/2D/controls/stackPanel.ts

@@ -102,9 +102,11 @@ export class StackPanel extends Container {
         this._measureForChildren.left = this._currentMeasure.left;
         this._measureForChildren.left = this._currentMeasure.left;
         this._measureForChildren.top = this._currentMeasure.top;
         this._measureForChildren.top = this._currentMeasure.top;
 
 
-        if (this.isVertical || this._manualWidth) {
+        if (!this.isVertical || this._manualWidth) {
             this._measureForChildren.width = this._currentMeasure.width;
             this._measureForChildren.width = this._currentMeasure.width;
-        } else if (!this.isVertical || this._manualHeight) {
+        }
+
+        if (this.isVertical || this._manualHeight) {
             this._measureForChildren.height = this._currentMeasure.height;
             this._measureForChildren.height = this._currentMeasure.height;
         }
         }
     }
     }
@@ -124,10 +126,7 @@ export class StackPanel extends Container {
                     child._top.ignoreAdaptiveScaling = true;
                     child._top.ignoreAdaptiveScaling = true;
                 }
                 }
 
 
-                stackHeight += child._currentMeasure.height + child.paddingTopInPixels;
-                if (child._currentMeasure.width > stackWidth) {
-                    stackWidth = child._currentMeasure.width;
-                }
+                stackHeight += child._currentMeasure.height + child.paddingTopInPixels + child.paddingBottomInPixels;
             } else {
             } else {
                 if (child.left !== stackWidth + "px") {
                 if (child.left !== stackWidth + "px") {
                     child.left = stackWidth + "px";
                     child.left = stackWidth + "px";
@@ -135,27 +134,24 @@ export class StackPanel extends Container {
                     child._left.ignoreAdaptiveScaling = true;
                     child._left.ignoreAdaptiveScaling = true;
                 }
                 }
 
 
-                stackWidth += child._currentMeasure.width + child.paddingLeftInPixels;
-                if (child._currentMeasure.height > stackHeight) {
-                    stackHeight = child._currentMeasure.height;
-                }
+                stackWidth += child._currentMeasure.width + child.paddingLeftInPixels + child.paddingRightInPixels;
             }
             }
         }
         }
 
 
         this._doNotTrackManualChanges = true;
         this._doNotTrackManualChanges = true;
 
 
-        // Let stack panel width and height default to stackHeight and stackWidth if dimensions are not specified.
+        // Let stack panel width or height default to stackHeight and stackWidth if dimensions are not specified.
         // User can now define their own height and width for stack panel.
         // User can now define their own height and width for stack panel.
 
 
         let panelWidthChanged = false;
         let panelWidthChanged = false;
         let panelHeightChanged = false;
         let panelHeightChanged = false;
 
 
-        if (!this._manualHeight) { // do not specify height if strictly defined by user
+        if (!this._manualHeight && this._isVertical) { // do not specify height if strictly defined by user
             let previousHeight = this.height;
             let previousHeight = this.height;
             this.height = stackHeight + "px";
             this.height = stackHeight + "px";
             panelHeightChanged = previousHeight !== this.height || !this._height.ignoreAdaptiveScaling;
             panelHeightChanged = previousHeight !== this.height || !this._height.ignoreAdaptiveScaling;
         }
         }
-        if (!this._manualWidth) { // do not specify width if strictly defined by user
+        if (!this._manualWidth && !this._isVertical) { // do not specify width if strictly defined by user
             let previousWidth = this.width;
             let previousWidth = this.width;
             this.width = stackWidth + "px";
             this.width = stackWidth + "px";
             panelWidthChanged = previousWidth !== this.width || !this._width.ignoreAdaptiveScaling;
             panelWidthChanged = previousWidth !== this.width || !this._width.ignoreAdaptiveScaling;

+ 9 - 1
inspector/src/components/actionTabs/tabs/propertyGridTabComponent.tsx

@@ -19,7 +19,7 @@ import { TextBlockPropertyGridComponent } from "./propertyGrids/gui/textBlockPro
 import { TextBlock } from "babylonjs-gui/2D/controls/textBlock";
 import { TextBlock } from "babylonjs-gui/2D/controls/textBlock";
 import { InputText } from "babylonjs-gui/2D/controls/inputText";
 import { InputText } from "babylonjs-gui/2D/controls/inputText";
 import { InputTextPropertyGridComponent } from "./propertyGrids/gui/inputTextPropertyGridComponent";
 import { InputTextPropertyGridComponent } from "./propertyGrids/gui/inputTextPropertyGridComponent";
-import { ColorPicker, Image, Slider, ImageBasedSlider, Rectangle, Ellipse, Checkbox, RadioButton, Line, ScrollViewer, Grid } from "babylonjs-gui";
+import { ColorPicker, Image, Slider, ImageBasedSlider, Rectangle, Ellipse, Checkbox, RadioButton, Line, ScrollViewer, Grid, StackPanel } from "babylonjs-gui";
 import { ColorPickerPropertyGridComponent } from "./propertyGrids/gui/colorPickerPropertyGridComponent";
 import { ColorPickerPropertyGridComponent } from "./propertyGrids/gui/colorPickerPropertyGridComponent";
 import { AnimationGroupGridComponent } from "./propertyGrids/animationGroupPropertyGridComponent";
 import { AnimationGroupGridComponent } from "./propertyGrids/animationGroupPropertyGridComponent";
 import { LockObject } from "./propertyGrids/lockObject";
 import { LockObject } from "./propertyGrids/lockObject";
@@ -35,6 +35,7 @@ import { ScrollViewerPropertyGridComponent } from "./propertyGrids/gui/scrollVie
 import { GridPropertyGridComponent } from "./propertyGrids/gui/gridPropertyGridComponent";
 import { GridPropertyGridComponent } from "./propertyGrids/gui/gridPropertyGridComponent";
 import { PBRMetallicRoughnessMaterialPropertyGridComponent } from "./propertyGrids/materials/pbrMetallicRoughnessMaterialPropertyGridComponent";
 import { PBRMetallicRoughnessMaterialPropertyGridComponent } from "./propertyGrids/materials/pbrMetallicRoughnessMaterialPropertyGridComponent";
 import { PBRSpecularGlossinessMaterialPropertyGridComponent } from "./propertyGrids/materials/pbrSpecularGlossinessMaterialPropertyGridComponent";
 import { PBRSpecularGlossinessMaterialPropertyGridComponent } from "./propertyGrids/materials/pbrSpecularGlossinessMaterialPropertyGridComponent";
+import { StackPanelPropertyGridComponent } from "./propertyGrids/gui/stackPanelPropertyGridComponent";
 
 
 export class PropertyGridTabComponent extends PaneComponent {
 export class PropertyGridTabComponent extends PaneComponent {
     private _timerIntervalId: number;
     private _timerIntervalId: number;
@@ -237,6 +238,13 @@ export class PropertyGridTabComponent extends PaneComponent {
                     onPropertyChangedObservable={this.props.onPropertyChangedObservable} />);
                     onPropertyChangedObservable={this.props.onPropertyChangedObservable} />);
             }
             }
 
 
+            if (className === "StackPanel") {
+                const stackPanel = entity as StackPanel;
+                return (<StackPanelPropertyGridComponent stackPanel={stackPanel}
+                    lockObject={this._lockObject}
+                    onPropertyChangedObservable={this.props.onPropertyChangedObservable} />);
+            }            
+
             if (className === "Grid") {
             if (className === "Grid") {
                 const grid = entity as Grid;
                 const grid = entity as Grid;
                 return (<GridPropertyGridComponent grid={grid}
                 return (<GridPropertyGridComponent grid={grid}

+ 33 - 0
inspector/src/components/actionTabs/tabs/propertyGrids/gui/stackPanelPropertyGridComponent.tsx

@@ -0,0 +1,33 @@
+import * as React from "react";
+import { Observable } from "babylonjs";
+import { PropertyChangedEvent } from "../../../../propertyChangedEvent";
+import { CommonControlPropertyGridComponent } from "./commonControlPropertyGridComponent";
+import { LockObject } from "../lockObject";
+import { StackPanel } from "babylonjs-gui";
+import { LineContainerComponent } from "../../../lineContainerComponent";
+import { CheckBoxLineComponent } from "../../../lines/checkBoxLineComponent";
+
+interface IStackPanelPropertyGridComponentProps {
+    stackPanel: StackPanel,
+    lockObject: LockObject,
+    onPropertyChangedObservable?: Observable<PropertyChangedEvent>
+}
+
+export class StackPanelPropertyGridComponent extends React.Component<IStackPanelPropertyGridComponentProps> {
+    constructor(props: IStackPanelPropertyGridComponentProps) {
+        super(props);
+    }
+
+    render() {
+        const stackPanel = this.props.stackPanel;
+
+        return (
+            <div className="pane">
+                <CommonControlPropertyGridComponent lockObject={this.props.lockObject} control={stackPanel} onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
+                <LineContainerComponent title="STACKPANEL">
+                    <CheckBoxLineComponent label="Vertical" target={stackPanel} propertyName="isVertical" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
+                </LineContainerComponent>
+            </div>
+        );
+    }
+}

+ 2 - 0
loaders/src/glTF/2.0/glTFLoader.ts

@@ -1602,6 +1602,8 @@ import { IGLTFLoader, GLTFFileLoader, GLTFLoaderState, IGLTFLoaderData, GLTFLoad
                 if (material.normalTexture.scale != undefined) {
                 if (material.normalTexture.scale != undefined) {
                     babylonMaterial.bumpTexture.level = material.normalTexture.scale;
                     babylonMaterial.bumpTexture.level = material.normalTexture.scale;
                 }
                 }
+
+                babylonMaterial.forceIrradianceInFragment = true;
             }
             }
 
 
             if (material.occlusionTexture) {
             if (material.occlusionTexture) {

BIN
tests/validation/ReferenceImages/StackPanel.png


BIN
tests/validation/ReferenceImages/gltfMaterial.png


+ 6 - 1
tests/validation/config.json

@@ -2,6 +2,11 @@
   "root": "https://rawgit.com/BabylonJS/Website/master",
   "root": "https://rawgit.com/BabylonJS/Website/master",
   "tests": [
   "tests": [
     {
     {
+      "title": "GUI StackPanel",
+      "playgroundId": "#LLVZ90#0",
+      "referenceImage": "StackPanel.png"
+    },
+    {
       "title": "Camera rig",
       "title": "Camera rig",
       "playgroundId": "#ATL1CS#9",
       "playgroundId": "#ATL1CS#9",
       "referenceImage": "cameraRig.png"
       "referenceImage": "cameraRig.png"
@@ -588,4 +593,4 @@
       "referenceImage": "outline.png"
       "referenceImage": "outline.png"
     }
     }
   ]
   ]
-}
+}