@babylonjs/core 6.14.0 → 6.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Debug/physicsViewer.js +4 -0
- package/Debug/physicsViewer.js.map +1 -1
- package/Engines/nativeEngine.js +13 -12
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/thinEngine.js +2 -2
- package/Engines/thinEngine.js.map +1 -1
- package/Materials/effectRenderer.d.ts +2 -0
- package/Materials/effectRenderer.js +4 -2
- package/Materials/effectRenderer.js.map +1 -1
- package/Materials/meshDebugPluginMaterial.js +6 -6
- package/Materials/meshDebugPluginMaterial.js.map +1 -1
- package/Maths/math.color.d.ts +3 -3
- package/Maths/math.color.js +3 -3
- package/Maths/math.color.js.map +1 -1
- package/package.json +1 -1
|
@@ -33,6 +33,8 @@ export declare class EffectRenderer {
|
|
|
33
33
|
private _indexBuffer;
|
|
34
34
|
private _fullscreenViewport;
|
|
35
35
|
private _onContextRestoredObserver;
|
|
36
|
+
private _savedStateDepthTest;
|
|
37
|
+
private _savedStateStencilTest;
|
|
36
38
|
/**
|
|
37
39
|
* Creates an effect renderer
|
|
38
40
|
* @param engine the engine to use for rendering
|
|
@@ -60,6 +60,8 @@ export class EffectRenderer {
|
|
|
60
60
|
* @param effectWrapper Defines the effect to draw with
|
|
61
61
|
*/
|
|
62
62
|
applyEffectWrapper(effectWrapper) {
|
|
63
|
+
this._savedStateDepthTest = this.engine.depthCullingState.depthTest;
|
|
64
|
+
this._savedStateStencilTest = this.engine.stencilState.stencilTest;
|
|
63
65
|
this.engine.setState(true);
|
|
64
66
|
this.engine.depthCullingState.depthTest = false;
|
|
65
67
|
this.engine.stencilState.stencilTest = false;
|
|
@@ -71,8 +73,8 @@ export class EffectRenderer {
|
|
|
71
73
|
* Restores engine states
|
|
72
74
|
*/
|
|
73
75
|
restoreStates() {
|
|
74
|
-
this.engine.depthCullingState.depthTest =
|
|
75
|
-
this.engine.stencilState.stencilTest =
|
|
76
|
+
this.engine.depthCullingState.depthTest = this._savedStateDepthTest;
|
|
77
|
+
this.engine.stencilState.stencilTest = this._savedStateStencilTest;
|
|
76
78
|
}
|
|
77
79
|
/**
|
|
78
80
|
* Draws a full screen quad.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effectRenderer.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/effectRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport type { ThinEngine } from \"../Engines/thinEngine\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { Viewport } from \"../Maths/math.viewport\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport { Effect } from \"./effect\";\r\nimport type { DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { DrawWrapper } from \"./drawWrapper\";\r\nimport type { IRenderTargetTexture, RenderTargetWrapper } from \"../Engines/renderTargetWrapper\";\r\nimport type { ShaderLanguage } from \"./shaderLanguage\";\r\n\r\n// Prevents ES6 Crash if not imported.\r\nimport \"../Shaders/postprocess.vertex\";\r\n\r\n/**\r\n * Effect Render Options\r\n */\r\nexport interface IEffectRendererOptions {\r\n /**\r\n * Defines the vertices positions.\r\n */\r\n positions?: number[];\r\n /**\r\n * Defines the indices.\r\n */\r\n indices?: number[];\r\n}\r\n\r\n// Fullscreen quad buffers by default.\r\nconst defaultOptions = {\r\n positions: [1, 1, -1, 1, -1, -1, 1, -1],\r\n indices: [0, 1, 2, 0, 2, 3],\r\n};\r\n\r\n/**\r\n * Helper class to render one or more effects.\r\n * You can access the previous rendering in your shader by declaring a sampler named textureSampler\r\n */\r\nexport class EffectRenderer {\r\n /**\r\n * The engine the effect renderer has been created for.\r\n */\r\n public readonly engine: ThinEngine;\r\n\r\n private _vertexBuffers: { [key: string]: VertexBuffer };\r\n private _indexBuffer: DataBuffer;\r\n\r\n private _fullscreenViewport = new Viewport(0, 0, 1, 1);\r\n private _onContextRestoredObserver: Nullable<Observer<ThinEngine>>;\r\n\r\n /**\r\n * Creates an effect renderer\r\n * @param engine the engine to use for rendering\r\n * @param options defines the options of the effect renderer\r\n */\r\n constructor(engine: ThinEngine, options: IEffectRendererOptions = defaultOptions) {\r\n const positions = options.positions ?? defaultOptions.positions;\r\n const indices = options.indices ?? defaultOptions.indices;\r\n\r\n this.engine = engine;\r\n this._vertexBuffers = {\r\n [VertexBuffer.PositionKind]: new VertexBuffer(engine, positions, VertexBuffer.PositionKind, false, false, 2),\r\n };\r\n this._indexBuffer = engine.createIndexBuffer(indices);\r\n\r\n this._onContextRestoredObserver = engine.onContextRestoredObservable.add(() => {\r\n this._indexBuffer = engine.createIndexBuffer(indices);\r\n\r\n for (const key in this._vertexBuffers) {\r\n const vertexBuffer = this._vertexBuffers[key];\r\n vertexBuffer._rebuild();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Sets the current viewport in normalized coordinates 0-1\r\n * @param viewport Defines the viewport to set (defaults to 0 0 1 1)\r\n */\r\n public setViewport(viewport = this._fullscreenViewport): void {\r\n this.engine.setViewport(viewport);\r\n }\r\n\r\n /**\r\n * Binds the embedded attributes buffer to the effect.\r\n * @param effect Defines the effect to bind the attributes for\r\n */\r\n public bindBuffers(effect: Effect): void {\r\n this.engine.bindBuffers(this._vertexBuffers, this._indexBuffer, effect);\r\n }\r\n\r\n /**\r\n * Sets the current effect wrapper to use during draw.\r\n * The effect needs to be ready before calling this api.\r\n * This also sets the default full screen position attribute.\r\n * @param effectWrapper Defines the effect to draw with\r\n */\r\n public applyEffectWrapper(effectWrapper: EffectWrapper): void {\r\n this.engine.setState(true);\r\n this.engine.depthCullingState.depthTest = false;\r\n this.engine.stencilState.stencilTest = false;\r\n this.engine.enableEffect(effectWrapper._drawWrapper);\r\n this.bindBuffers(effectWrapper.effect);\r\n effectWrapper.onApplyObservable.notifyObservers({});\r\n }\r\n\r\n /**\r\n * Restores engine states\r\n */\r\n public restoreStates(): void {\r\n this.engine.depthCullingState.depthTest = true;\r\n this.engine.stencilState.stencilTest = true;\r\n }\r\n\r\n /**\r\n * Draws a full screen quad.\r\n */\r\n public draw(): void {\r\n this.engine.drawElementsType(Constants.MATERIAL_TriangleFillMode, 0, 6);\r\n }\r\n\r\n private _isRenderTargetTexture(texture: RenderTargetWrapper | IRenderTargetTexture): texture is IRenderTargetTexture {\r\n return (texture as IRenderTargetTexture).renderTarget !== undefined;\r\n }\r\n\r\n /**\r\n * renders one or more effects to a specified texture\r\n * @param effectWrapper the effect to renderer\r\n * @param outputTexture texture to draw to, if null it will render to the screen.\r\n */\r\n public render(effectWrapper: EffectWrapper, outputTexture: Nullable<RenderTargetWrapper | IRenderTargetTexture> = null) {\r\n // Ensure effect is ready\r\n if (!effectWrapper.effect.isReady()) {\r\n return;\r\n }\r\n\r\n // Reset state\r\n this.setViewport();\r\n\r\n const out = outputTexture === null ? null : this._isRenderTargetTexture(outputTexture) ? outputTexture.renderTarget! : outputTexture;\r\n\r\n if (out) {\r\n this.engine.bindFramebuffer(out);\r\n }\r\n\r\n this.applyEffectWrapper(effectWrapper);\r\n\r\n this.draw();\r\n\r\n if (out) {\r\n this.engine.unBindFramebuffer(out);\r\n }\r\n\r\n this.restoreStates();\r\n }\r\n\r\n /**\r\n * Disposes of the effect renderer\r\n */\r\n dispose() {\r\n const vertexBuffer = this._vertexBuffers[VertexBuffer.PositionKind];\r\n if (vertexBuffer) {\r\n vertexBuffer.dispose();\r\n delete this._vertexBuffers[VertexBuffer.PositionKind];\r\n }\r\n\r\n if (this._indexBuffer) {\r\n this.engine._releaseBuffer(this._indexBuffer);\r\n }\r\n\r\n if (this._onContextRestoredObserver) {\r\n this.engine.onContextRestoredObservable.remove(this._onContextRestoredObserver);\r\n this._onContextRestoredObserver = null;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Options to create an EffectWrapper\r\n */\r\ninterface EffectWrapperCreationOptions {\r\n /**\r\n * Engine to use to create the effect\r\n */\r\n engine: ThinEngine;\r\n /**\r\n * Fragment shader for the effect\r\n */\r\n fragmentShader: string;\r\n /**\r\n * Use the shader store instead of direct source code\r\n */\r\n useShaderStore?: boolean;\r\n /**\r\n * Vertex shader for the effect\r\n */\r\n vertexShader?: string;\r\n /**\r\n * Attributes to use in the shader\r\n */\r\n attributeNames?: Array<string>;\r\n /**\r\n * Uniforms to use in the shader\r\n */\r\n uniformNames?: Array<string>;\r\n /**\r\n * Texture sampler names to use in the shader\r\n */\r\n samplerNames?: Array<string>;\r\n /**\r\n * Defines to use in the shader\r\n */\r\n defines?: Array<string>;\r\n /**\r\n * Callback when effect is compiled\r\n */\r\n onCompiled?: Nullable<(effect: Effect) => void>;\r\n /**\r\n * The friendly name of the effect displayed in Spector.\r\n */\r\n name?: string;\r\n /**\r\n * The language the shader is written in (default: GLSL)\r\n */\r\n shaderLanguage?: ShaderLanguage;\r\n}\r\n\r\n/**\r\n * Wraps an effect to be used for rendering\r\n */\r\nexport class EffectWrapper {\r\n /**\r\n * Event that is fired right before the effect is drawn (should be used to update uniforms)\r\n */\r\n public onApplyObservable = new Observable<{}>();\r\n /**\r\n * The underlying effect\r\n */\r\n public get effect(): Effect {\r\n return this._drawWrapper.effect!;\r\n }\r\n\r\n public set effect(effect: Effect) {\r\n this._drawWrapper.effect = effect;\r\n }\r\n\r\n /** @internal */\r\n public _drawWrapper: DrawWrapper;\r\n\r\n private _onContextRestoredObserver: Nullable<Observer<ThinEngine>>;\r\n\r\n /**\r\n * Creates an effect to be renderer\r\n * @param creationOptions options to create the effect\r\n */\r\n constructor(creationOptions: EffectWrapperCreationOptions) {\r\n let effectCreationOptions: any;\r\n const uniformNames = creationOptions.uniformNames || [];\r\n\r\n if (creationOptions.vertexShader) {\r\n effectCreationOptions = {\r\n fragmentSource: creationOptions.fragmentShader,\r\n vertexSource: creationOptions.vertexShader,\r\n spectorName: creationOptions.name || \"effectWrapper\",\r\n };\r\n } else {\r\n // Default scale to use in post process vertex shader.\r\n uniformNames.push(\"scale\");\r\n\r\n effectCreationOptions = {\r\n fragmentSource: creationOptions.fragmentShader,\r\n vertex: \"postprocess\",\r\n spectorName: creationOptions.name || \"effectWrapper\",\r\n };\r\n\r\n // Sets the default scale to identity for the post process vertex shader.\r\n this.onApplyObservable.add(() => {\r\n this.effect.setFloat2(\"scale\", 1, 1);\r\n });\r\n }\r\n\r\n const defines = creationOptions.defines ? creationOptions.defines.join(\"\\n\") : \"\";\r\n this._drawWrapper = new DrawWrapper(creationOptions.engine);\r\n\r\n if (creationOptions.useShaderStore) {\r\n effectCreationOptions.fragment = effectCreationOptions.fragmentSource;\r\n if (!effectCreationOptions.vertex) {\r\n effectCreationOptions.vertex = effectCreationOptions.vertexSource;\r\n }\r\n\r\n delete effectCreationOptions.fragmentSource;\r\n delete effectCreationOptions.vertexSource;\r\n\r\n this.effect = creationOptions.engine.createEffect(\r\n effectCreationOptions,\r\n creationOptions.attributeNames || [\"position\"],\r\n uniformNames,\r\n creationOptions.samplerNames,\r\n defines,\r\n undefined,\r\n creationOptions.onCompiled,\r\n undefined,\r\n undefined,\r\n creationOptions.shaderLanguage\r\n );\r\n } else {\r\n this.effect = new Effect(\r\n effectCreationOptions,\r\n creationOptions.attributeNames || [\"position\"],\r\n uniformNames,\r\n creationOptions.samplerNames,\r\n creationOptions.engine,\r\n defines,\r\n undefined,\r\n creationOptions.onCompiled,\r\n undefined,\r\n undefined,\r\n undefined,\r\n creationOptions.shaderLanguage\r\n );\r\n\r\n this._onContextRestoredObserver = creationOptions.engine.onContextRestoredObservable.add(() => {\r\n this.effect._pipelineContext = null; // because _prepareEffect will try to dispose this pipeline before recreating it and that would lead to webgl errors\r\n this.effect._wasPreviouslyReady = false;\r\n this.effect._prepareEffect();\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Disposes of the effect wrapper\r\n */\r\n public dispose() {\r\n if (this._onContextRestoredObserver) {\r\n this.effect.getEngine().onContextRestoredObservable.remove(this._onContextRestoredObserver);\r\n this._onContextRestoredObserver = null;\r\n }\r\n this.effect.dispose();\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"effectRenderer.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/effectRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport type { ThinEngine } from \"../Engines/thinEngine\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { Viewport } from \"../Maths/math.viewport\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport { Effect } from \"./effect\";\r\nimport type { DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { DrawWrapper } from \"./drawWrapper\";\r\nimport type { IRenderTargetTexture, RenderTargetWrapper } from \"../Engines/renderTargetWrapper\";\r\nimport type { ShaderLanguage } from \"./shaderLanguage\";\r\n\r\n// Prevents ES6 Crash if not imported.\r\nimport \"../Shaders/postprocess.vertex\";\r\n\r\n/**\r\n * Effect Render Options\r\n */\r\nexport interface IEffectRendererOptions {\r\n /**\r\n * Defines the vertices positions.\r\n */\r\n positions?: number[];\r\n /**\r\n * Defines the indices.\r\n */\r\n indices?: number[];\r\n}\r\n\r\n// Fullscreen quad buffers by default.\r\nconst defaultOptions = {\r\n positions: [1, 1, -1, 1, -1, -1, 1, -1],\r\n indices: [0, 1, 2, 0, 2, 3],\r\n};\r\n\r\n/**\r\n * Helper class to render one or more effects.\r\n * You can access the previous rendering in your shader by declaring a sampler named textureSampler\r\n */\r\nexport class EffectRenderer {\r\n /**\r\n * The engine the effect renderer has been created for.\r\n */\r\n public readonly engine: ThinEngine;\r\n\r\n private _vertexBuffers: { [key: string]: VertexBuffer };\r\n private _indexBuffer: DataBuffer;\r\n\r\n private _fullscreenViewport = new Viewport(0, 0, 1, 1);\r\n private _onContextRestoredObserver: Nullable<Observer<ThinEngine>>;\r\n\r\n private _savedStateDepthTest: boolean;\r\n private _savedStateStencilTest: boolean;\r\n\r\n /**\r\n * Creates an effect renderer\r\n * @param engine the engine to use for rendering\r\n * @param options defines the options of the effect renderer\r\n */\r\n constructor(engine: ThinEngine, options: IEffectRendererOptions = defaultOptions) {\r\n const positions = options.positions ?? defaultOptions.positions;\r\n const indices = options.indices ?? defaultOptions.indices;\r\n\r\n this.engine = engine;\r\n this._vertexBuffers = {\r\n [VertexBuffer.PositionKind]: new VertexBuffer(engine, positions, VertexBuffer.PositionKind, false, false, 2),\r\n };\r\n this._indexBuffer = engine.createIndexBuffer(indices);\r\n\r\n this._onContextRestoredObserver = engine.onContextRestoredObservable.add(() => {\r\n this._indexBuffer = engine.createIndexBuffer(indices);\r\n\r\n for (const key in this._vertexBuffers) {\r\n const vertexBuffer = this._vertexBuffers[key];\r\n vertexBuffer._rebuild();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Sets the current viewport in normalized coordinates 0-1\r\n * @param viewport Defines the viewport to set (defaults to 0 0 1 1)\r\n */\r\n public setViewport(viewport = this._fullscreenViewport): void {\r\n this.engine.setViewport(viewport);\r\n }\r\n\r\n /**\r\n * Binds the embedded attributes buffer to the effect.\r\n * @param effect Defines the effect to bind the attributes for\r\n */\r\n public bindBuffers(effect: Effect): void {\r\n this.engine.bindBuffers(this._vertexBuffers, this._indexBuffer, effect);\r\n }\r\n\r\n /**\r\n * Sets the current effect wrapper to use during draw.\r\n * The effect needs to be ready before calling this api.\r\n * This also sets the default full screen position attribute.\r\n * @param effectWrapper Defines the effect to draw with\r\n */\r\n public applyEffectWrapper(effectWrapper: EffectWrapper): void {\r\n this._savedStateDepthTest = this.engine.depthCullingState.depthTest;\r\n this._savedStateStencilTest = this.engine.stencilState.stencilTest;\r\n\r\n this.engine.setState(true);\r\n this.engine.depthCullingState.depthTest = false;\r\n this.engine.stencilState.stencilTest = false;\r\n this.engine.enableEffect(effectWrapper._drawWrapper);\r\n this.bindBuffers(effectWrapper.effect);\r\n effectWrapper.onApplyObservable.notifyObservers({});\r\n }\r\n\r\n /**\r\n * Restores engine states\r\n */\r\n public restoreStates(): void {\r\n this.engine.depthCullingState.depthTest = this._savedStateDepthTest;\r\n this.engine.stencilState.stencilTest = this._savedStateStencilTest;\r\n }\r\n\r\n /**\r\n * Draws a full screen quad.\r\n */\r\n public draw(): void {\r\n this.engine.drawElementsType(Constants.MATERIAL_TriangleFillMode, 0, 6);\r\n }\r\n\r\n private _isRenderTargetTexture(texture: RenderTargetWrapper | IRenderTargetTexture): texture is IRenderTargetTexture {\r\n return (texture as IRenderTargetTexture).renderTarget !== undefined;\r\n }\r\n\r\n /**\r\n * renders one or more effects to a specified texture\r\n * @param effectWrapper the effect to renderer\r\n * @param outputTexture texture to draw to, if null it will render to the screen.\r\n */\r\n public render(effectWrapper: EffectWrapper, outputTexture: Nullable<RenderTargetWrapper | IRenderTargetTexture> = null) {\r\n // Ensure effect is ready\r\n if (!effectWrapper.effect.isReady()) {\r\n return;\r\n }\r\n\r\n // Reset state\r\n this.setViewport();\r\n\r\n const out = outputTexture === null ? null : this._isRenderTargetTexture(outputTexture) ? outputTexture.renderTarget! : outputTexture;\r\n\r\n if (out) {\r\n this.engine.bindFramebuffer(out);\r\n }\r\n\r\n this.applyEffectWrapper(effectWrapper);\r\n\r\n this.draw();\r\n\r\n if (out) {\r\n this.engine.unBindFramebuffer(out);\r\n }\r\n\r\n this.restoreStates();\r\n }\r\n\r\n /**\r\n * Disposes of the effect renderer\r\n */\r\n dispose() {\r\n const vertexBuffer = this._vertexBuffers[VertexBuffer.PositionKind];\r\n if (vertexBuffer) {\r\n vertexBuffer.dispose();\r\n delete this._vertexBuffers[VertexBuffer.PositionKind];\r\n }\r\n\r\n if (this._indexBuffer) {\r\n this.engine._releaseBuffer(this._indexBuffer);\r\n }\r\n\r\n if (this._onContextRestoredObserver) {\r\n this.engine.onContextRestoredObservable.remove(this._onContextRestoredObserver);\r\n this._onContextRestoredObserver = null;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Options to create an EffectWrapper\r\n */\r\ninterface EffectWrapperCreationOptions {\r\n /**\r\n * Engine to use to create the effect\r\n */\r\n engine: ThinEngine;\r\n /**\r\n * Fragment shader for the effect\r\n */\r\n fragmentShader: string;\r\n /**\r\n * Use the shader store instead of direct source code\r\n */\r\n useShaderStore?: boolean;\r\n /**\r\n * Vertex shader for the effect\r\n */\r\n vertexShader?: string;\r\n /**\r\n * Attributes to use in the shader\r\n */\r\n attributeNames?: Array<string>;\r\n /**\r\n * Uniforms to use in the shader\r\n */\r\n uniformNames?: Array<string>;\r\n /**\r\n * Texture sampler names to use in the shader\r\n */\r\n samplerNames?: Array<string>;\r\n /**\r\n * Defines to use in the shader\r\n */\r\n defines?: Array<string>;\r\n /**\r\n * Callback when effect is compiled\r\n */\r\n onCompiled?: Nullable<(effect: Effect) => void>;\r\n /**\r\n * The friendly name of the effect displayed in Spector.\r\n */\r\n name?: string;\r\n /**\r\n * The language the shader is written in (default: GLSL)\r\n */\r\n shaderLanguage?: ShaderLanguage;\r\n}\r\n\r\n/**\r\n * Wraps an effect to be used for rendering\r\n */\r\nexport class EffectWrapper {\r\n /**\r\n * Event that is fired right before the effect is drawn (should be used to update uniforms)\r\n */\r\n public onApplyObservable = new Observable<{}>();\r\n /**\r\n * The underlying effect\r\n */\r\n public get effect(): Effect {\r\n return this._drawWrapper.effect!;\r\n }\r\n\r\n public set effect(effect: Effect) {\r\n this._drawWrapper.effect = effect;\r\n }\r\n\r\n /** @internal */\r\n public _drawWrapper: DrawWrapper;\r\n\r\n private _onContextRestoredObserver: Nullable<Observer<ThinEngine>>;\r\n\r\n /**\r\n * Creates an effect to be renderer\r\n * @param creationOptions options to create the effect\r\n */\r\n constructor(creationOptions: EffectWrapperCreationOptions) {\r\n let effectCreationOptions: any;\r\n const uniformNames = creationOptions.uniformNames || [];\r\n\r\n if (creationOptions.vertexShader) {\r\n effectCreationOptions = {\r\n fragmentSource: creationOptions.fragmentShader,\r\n vertexSource: creationOptions.vertexShader,\r\n spectorName: creationOptions.name || \"effectWrapper\",\r\n };\r\n } else {\r\n // Default scale to use in post process vertex shader.\r\n uniformNames.push(\"scale\");\r\n\r\n effectCreationOptions = {\r\n fragmentSource: creationOptions.fragmentShader,\r\n vertex: \"postprocess\",\r\n spectorName: creationOptions.name || \"effectWrapper\",\r\n };\r\n\r\n // Sets the default scale to identity for the post process vertex shader.\r\n this.onApplyObservable.add(() => {\r\n this.effect.setFloat2(\"scale\", 1, 1);\r\n });\r\n }\r\n\r\n const defines = creationOptions.defines ? creationOptions.defines.join(\"\\n\") : \"\";\r\n this._drawWrapper = new DrawWrapper(creationOptions.engine);\r\n\r\n if (creationOptions.useShaderStore) {\r\n effectCreationOptions.fragment = effectCreationOptions.fragmentSource;\r\n if (!effectCreationOptions.vertex) {\r\n effectCreationOptions.vertex = effectCreationOptions.vertexSource;\r\n }\r\n\r\n delete effectCreationOptions.fragmentSource;\r\n delete effectCreationOptions.vertexSource;\r\n\r\n this.effect = creationOptions.engine.createEffect(\r\n effectCreationOptions,\r\n creationOptions.attributeNames || [\"position\"],\r\n uniformNames,\r\n creationOptions.samplerNames,\r\n defines,\r\n undefined,\r\n creationOptions.onCompiled,\r\n undefined,\r\n undefined,\r\n creationOptions.shaderLanguage\r\n );\r\n } else {\r\n this.effect = new Effect(\r\n effectCreationOptions,\r\n creationOptions.attributeNames || [\"position\"],\r\n uniformNames,\r\n creationOptions.samplerNames,\r\n creationOptions.engine,\r\n defines,\r\n undefined,\r\n creationOptions.onCompiled,\r\n undefined,\r\n undefined,\r\n undefined,\r\n creationOptions.shaderLanguage\r\n );\r\n\r\n this._onContextRestoredObserver = creationOptions.engine.onContextRestoredObservable.add(() => {\r\n this.effect._pipelineContext = null; // because _prepareEffect will try to dispose this pipeline before recreating it and that would lead to webgl errors\r\n this.effect._wasPreviouslyReady = false;\r\n this.effect._prepareEffect();\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Disposes of the effect wrapper\r\n */\r\n public dispose() {\r\n if (this._onContextRestoredObserver) {\r\n this.effect.getEngine().onContextRestoredObservable.remove(this._onContextRestoredObserver);\r\n this._onContextRestoredObserver = null;\r\n }\r\n this.effect.dispose();\r\n }\r\n}\r\n"]}
|
|
@@ -93,15 +93,15 @@ flat varying float dbg_vPass;
|
|
|
93
93
|
#endif
|
|
94
94
|
#endif`;
|
|
95
95
|
const fragmentMainEnd = `#if defined(DBG_ENABLED)
|
|
96
|
-
vec3 dbg_color =
|
|
96
|
+
vec3 dbg_color = vec3(1.);
|
|
97
97
|
#if DBG_MODE == 1
|
|
98
|
-
dbg_color = mix(dbg_wireframeTrianglesColor,
|
|
98
|
+
dbg_color = mix(dbg_wireframeTrianglesColor, vec3(1.), dbg_edgeFactor());
|
|
99
99
|
#elif DBG_MODE == 2 || DBG_MODE == 3
|
|
100
100
|
float dbg_cornerFactor = dbg_cornerFactor();
|
|
101
101
|
if (dbg_vPass == 0. && dbg_cornerFactor == 1.) discard;
|
|
102
|
-
dbg_color = mix(dbg_vertexColor,
|
|
102
|
+
dbg_color = mix(dbg_vertexColor, vec3(1.), dbg_cornerFactor);
|
|
103
103
|
#if DBG_MODE == 3
|
|
104
|
-
dbg_color *= mix(dbg_wireframeVerticesColor,
|
|
104
|
+
dbg_color *= mix(dbg_wireframeVerticesColor, vec3(1.), dbg_edgeFactor());
|
|
105
105
|
#endif
|
|
106
106
|
#elif DBG_MODE == 4 && defined(UV1)
|
|
107
107
|
dbg_color = mix(dbg_uvPrimaryColor, dbg_uvSecondaryColor, dbg_checkerboardFactor(vMainUV1));
|
|
@@ -117,10 +117,10 @@ vec3 dbg_color = dbg_shadedDiffuseColor;
|
|
|
117
117
|
gl_FragColor *= vec4(dbg_color, 1.);
|
|
118
118
|
#else
|
|
119
119
|
#if DBG_MODE != 6
|
|
120
|
-
gl_FragColor = vec4(dbg_applyShading(dbg_color
|
|
120
|
+
gl_FragColor = vec4(dbg_applyShading(dbg_shadedDiffuseColor) * dbg_color, 1.);
|
|
121
121
|
#else
|
|
122
122
|
gl_FragColor = vec4(dbg_color, 1.);
|
|
123
|
-
#endif
|
|
123
|
+
#endif
|
|
124
124
|
#endif
|
|
125
125
|
#endif`;
|
|
126
126
|
const defaultMaterialColors = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meshDebugPluginMaterial.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/meshDebugPluginMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { MaterialPluginBase } from \"./materialPluginBase\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { UniformBuffer } from \"./uniformBuffer\";\r\nimport type { FloatArray, Nullable } from \"../types\";\r\nimport { MaterialDefines } from \"./materialDefines\";\r\nimport type { PBRBaseMaterial } from \"./PBR/pbrBaseMaterial\";\r\nimport type { StandardMaterial } from \"./standardMaterial\";\r\nimport { RegisterClass } from \"../Misc/typeStore\";\r\nimport { Color3 } from \"core/Maths/math\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { expandToProperty, serialize, serializeAsColor3 } from \"core/Misc/decorators\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\n\r\nconst vertexDefinitions = `#if defined(DBG_ENABLED)\r\nattribute float dbg_initialPass;\r\nvarying vec3 dbg_vBarycentric;\r\nflat varying vec3 dbg_vVertexWorldPos;\r\nflat varying float dbg_vPass;\r\n#endif`;\r\n\r\nconst vertexMainEnd = `#if defined(DBG_ENABLED)\r\nfloat dbg_vertexIndex = mod(float(gl_VertexID), 3.);\r\nif (dbg_vertexIndex == 0.0) { \r\n dbg_vBarycentric = vec3(1.,0.,0.); \r\n}\r\nelse if (dbg_vertexIndex == 1.0) { \r\n dbg_vBarycentric = vec3(0.,1.,0.); \r\n}\r\nelse { \r\n dbg_vBarycentric = vec3(0.,0.,1.); \r\n}\r\n\r\ndbg_vVertexWorldPos = vPositionW;\r\ndbg_vPass = dbg_initialPass;\r\n#endif`;\r\n\r\nconst fragmentUniforms = `#if defined(DBG_ENABLED)\r\nuniform vec3 dbg_shadedDiffuseColor;\r\nuniform vec4 dbg_shadedSpecularColorPower;\r\nuniform vec3 dbg_thicknessRadiusScale;\r\n\r\n#if DBG_MODE == 2 || DBG_MODE == 3\r\n uniform vec3 dbg_vertexColor;\r\n#endif\r\n\r\n#if DBG_MODE == 1\r\n uniform vec3 dbg_wireframeTrianglesColor;\r\n#elif DBG_MODE == 3\r\n uniform vec3 dbg_wireframeVerticesColor;\r\n#elif DBG_MODE == 4 || DBG_MODE == 5\r\n uniform vec3 dbg_uvPrimaryColor;\r\n uniform vec3 dbg_uvSecondaryColor;\r\n#elif DBG_MODE == 7\r\n uniform vec3 dbg_materialColor;\r\n#endif\r\n#endif`;\r\n\r\nconst fragmentDefinitions = `#if defined(DBG_ENABLED)\r\nvarying vec3 dbg_vBarycentric;\r\nflat varying vec3 dbg_vVertexWorldPos;\r\nflat varying float dbg_vPass;\r\n\r\n#if !defined(DBG_MULTIPLY)\r\n vec3 dbg_applyShading(vec3 color) {\r\n vec3 N = vNormalW.xyz;\r\n vec3 L = normalize(vEyePosition.xyz - vPositionW.xyz);\r\n vec3 H = normalize(L + L);\r\n float LdotN = clamp(dot(L,N), 0., 1.);\r\n float HdotN = clamp(dot(H,N), 0., 1.);\r\n float specTerm = pow(HdotN, dbg_shadedSpecularColorPower.w);\r\n color *= (LdotN / PI);\r\n color += dbg_shadedSpecularColorPower.rgb * (specTerm / PI);\r\n return color;\r\n }\r\n#endif\r\n\r\n#if DBG_MODE == 1 || DBG_MODE == 3\r\n float dbg_edgeFactor() {\r\n vec3 d = fwidth(dbg_vBarycentric);\r\n vec3 a3 = smoothstep(vec3(0.), d * dbg_thicknessRadiusScale.x, dbg_vBarycentric);\r\n return min(min(a3.x, a3.y), a3.z);\r\n }\r\n#endif\r\n\r\n#if DBG_MODE == 2 || DBG_MODE == 3\r\n float dbg_cornerFactor() {\r\n vec3 worldPos = vPositionW;\r\n float dist = length(worldPos - dbg_vVertexWorldPos);\r\n float camDist = length(worldPos - vEyePosition.xyz);\r\n float d = sqrt(camDist) * .001;\r\n return smoothstep((dbg_thicknessRadiusScale.y * d), ((dbg_thicknessRadiusScale.y * 1.01) * d), dist);\r\n }\r\n#endif\r\n\r\n#if (DBG_MODE == 4 && defined(UV1)) || (DBG_MODE == 5 && defined(UV2))\r\n float dbg_checkerboardFactor(vec2 uv) {\r\n vec2 f = fract(uv * dbg_thicknessRadiusScale.z);\r\n f -= .5;\r\n return (f.x * f.y) > 0. ? 1. : 0.;\r\n }\r\n#endif\r\n#endif`;\r\n\r\nconst fragmentMainEnd = `#if defined(DBG_ENABLED)\r\nvec3 dbg_color = dbg_shadedDiffuseColor;\r\n#if DBG_MODE == 1\r\n dbg_color = mix(dbg_wireframeTrianglesColor, dbg_color, dbg_edgeFactor());\r\n#elif DBG_MODE == 2 || DBG_MODE == 3\r\n float dbg_cornerFactor = dbg_cornerFactor();\r\n if (dbg_vPass == 0. && dbg_cornerFactor == 1.) discard;\r\n dbg_color = mix(dbg_vertexColor, dbg_color, dbg_cornerFactor);\r\n #if DBG_MODE == 3\r\n dbg_color *= mix(dbg_wireframeVerticesColor, dbg_color, dbg_edgeFactor());\r\n #endif\r\n#elif DBG_MODE == 4 && defined(UV1)\r\n dbg_color = mix(dbg_uvPrimaryColor, dbg_uvSecondaryColor, dbg_checkerboardFactor(vMainUV1));\r\n#elif DBG_MODE == 5 && defined(UV2)\r\n dbg_color = mix(dbg_uvPrimaryColor, dbg_uvSecondaryColor, dbg_checkerboardFactor(vMainUV2));\r\n#elif DBG_MODE == 6 && defined(VERTEXCOLOR)\r\n dbg_color = vColor.rgb;\r\n#elif DBG_MODE == 7\r\n dbg_color = dbg_materialColor;\r\n#endif\r\n\r\n#if defined(DBG_MULTIPLY)\r\n gl_FragColor *= vec4(dbg_color, 1.);\r\n#else\r\n #if DBG_MODE != 6\r\n gl_FragColor = vec4(dbg_applyShading(dbg_color), 1.);\r\n #else\r\n gl_FragColor = vec4(dbg_color, 1.);\r\n #endif \r\n#endif\r\n#endif`;\r\n\r\nconst defaultMaterialColors = [\r\n new Color3(0.98, 0.26, 0.38),\r\n new Color3(0.47, 0.75, 0.3),\r\n new Color3(0, 0.26, 0.77),\r\n new Color3(0.97, 0.6, 0.76),\r\n new Color3(0.19, 0.63, 0.78),\r\n new Color3(0.98, 0.8, 0.6),\r\n new Color3(0.65, 0.43, 0.15),\r\n new Color3(0.15, 0.47, 0.22),\r\n new Color3(0.67, 0.71, 0.86),\r\n new Color3(0.09, 0.46, 0.56),\r\n new Color3(0.8, 0.98, 0.02),\r\n new Color3(0.39, 0.29, 0.13),\r\n new Color3(0.53, 0.63, 0.06),\r\n new Color3(0.95, 0.96, 0.41),\r\n new Color3(1, 0.72, 0.94),\r\n new Color3(0.63, 0.08, 0.31),\r\n new Color3(0.66, 0.96, 0.95),\r\n new Color3(0.22, 0.14, 0.19),\r\n new Color3(0.14, 0.65, 0.59),\r\n new Color3(0.93, 1, 0.68),\r\n new Color3(0.93, 0.14, 0.44),\r\n new Color3(0.47, 0.86, 0.67),\r\n new Color3(0.85, 0.07, 0.78),\r\n new Color3(0.53, 0.64, 0.98),\r\n new Color3(0.43, 0.37, 0.56),\r\n new Color3(0.71, 0.65, 0.25),\r\n new Color3(0.66, 0.19, 0.01),\r\n new Color3(0.94, 0.53, 0.12),\r\n new Color3(0.41, 0.44, 0.44),\r\n new Color3(0.24, 0.71, 0.96),\r\n new Color3(0.57, 0.28, 0.56),\r\n new Color3(0.44, 0.98, 0.42),\r\n];\r\n\r\n/**\r\n * Supported visualizations of MeshDebugPluginMaterial\r\n */\r\nexport enum MeshDebugMode {\r\n /**\r\n * Material without any mesh debug visualization\r\n */\r\n NONE = 0,\r\n /**\r\n * A wireframe of the mesh\r\n * NOTE: For this mode to work correctly, convertToUnIndexedMesh() or MeshDebugPluginMaterial.PrepareMeshForTrianglesAndVerticesMode() must first be called on mesh.\r\n */\r\n TRIANGLES = 1,\r\n /**\r\n * Points drawn over vertices of mesh\r\n * NOTE: For this mode to work correctly, MeshDebugPluginMaterial.PrepareMeshForTrianglesAndVerticesMode() must first be called on mesh.\r\n */\r\n VERTICES = 2,\r\n /**\r\n * A wireframe of the mesh, with points drawn over vertices\r\n * NOTE: For this mode to work correctly, MeshDebugPluginMaterial.PrepareMeshForTrianglesAndVerticesMode() must first be called on mesh.\r\n */\r\n TRIANGLES_VERTICES = 3,\r\n /**\r\n * A checkerboard grid of the mesh's UV set 0\r\n */\r\n UV0 = 4,\r\n /**\r\n * A checkerboard grid of the mesh's UV set 1\r\n */\r\n UV1 = 5,\r\n /**\r\n * The mesh's vertex colors displayed as the primary texture\r\n */\r\n VERTEXCOLORS = 6,\r\n /**\r\n * An arbitrary, distinguishable color to identify the material\r\n */\r\n MATERIALIDS = 7,\r\n}\r\n\r\n/**\r\n * Options for MeshDebugPluginMaterial that are given at initialization\r\n */\r\nexport interface MeshDebugOptions {\r\n /**\r\n * The mesh debug visualization.\r\n * Defaults to NONE.\r\n */\r\n mode?: MeshDebugMode;\r\n /**\r\n * Whether the mesh debug visualization should multiply with color underneath.\r\n * Defaults to true.\r\n */\r\n multiply?: boolean;\r\n /**\r\n * Diffuse color used to shade the mesh.\r\n * Defaults to (1.0, 1.0, 1.0).\r\n */\r\n shadedDiffuseColor?: Color3;\r\n /**\r\n * Specular color used to shade the mesh.\r\n * Defaults to (0.8, 0.8, 0.8).\r\n */\r\n shadedSpecularColor?: Color3;\r\n /**\r\n * Specular power used to shade the mesh.\r\n * Defaults to 10.\r\n */\r\n shadedSpecularPower?: number;\r\n /**\r\n * Width of edge lines in TRIANGLES and TRIANGLE_VERTICES modes.\r\n * Defaults to 0.7.\r\n */\r\n wireframeThickness?: number;\r\n /**\r\n * Color of edge lines in TRIANGLES mode.\r\n * Defaults to (0.0, 0.0, 0.0).\r\n */\r\n wireframeTrianglesColor?: Color3;\r\n /**\r\n * Color of edge lines in TRIANGLES_VERTICES modes.\r\n * Defaults to (0.8, 0.8, 0.8).\r\n */\r\n wireframeVerticesColor?: Color3;\r\n /**\r\n * Color of vertices in TRIANGLES_VERTICES and VERTICES mode.\r\n * Defaults to (0.0, 0.0, 0.0).\r\n */\r\n vertexColor?: Color3;\r\n /**\r\n * Radius of dots drawn over vertices in TRIANGLE_VERTICES and VERTICES mode.\r\n * Defaults to 1.2.\r\n */\r\n vertexRadius?: number;\r\n /**\r\n * Size of tiles in UV1 or UV2 modes.\r\n * Defaults to 20.\r\n */\r\n uvScale?: number;\r\n /**\r\n * 1st color of checkerboard grid in UV1 or UV2 modes.\r\n * Defaults to (1.0, 1.0, 1.0).\r\n */\r\n uvPrimaryColor?: Color3;\r\n /**\r\n * 2nd color of checkerboard grid in UV1 or UV2 modes.\r\n * Defaults to (0.5, 0.5, 0.5).\r\n */\r\n uvSecondaryColor?: Color3;\r\n}\r\n\r\n/** @internal */\r\nclass MeshDebugDefines extends MaterialDefines {\r\n /**\r\n * Current mesh debug visualization.\r\n * Defaults to NONE.\r\n */\r\n DBG_MODE: MeshDebugMode = MeshDebugMode.NONE;\r\n /**\r\n * Whether the mesh debug visualization multiplies with colors underneath.\r\n * Defaults to true.\r\n */\r\n DBG_MULTIPLY: boolean = true;\r\n /**\r\n * Whether the mesh debug plugin is enabled in the material.\r\n * Defaults to true.\r\n */\r\n DBG_ENABLED: boolean = true;\r\n}\r\n\r\n/**\r\n * Plugin that implements various mesh debug visualizations,\r\n * List of available visualizations can be found in MeshDebugMode enum.\r\n */\r\nexport class MeshDebugPluginMaterial extends MaterialPluginBase {\r\n /**\r\n * Total number of instances of the plugin.\r\n * Starts at 0.\r\n */\r\n private static _PluginCount: number = 0;\r\n\r\n /**\r\n * Color palette used for MATERIALIDS mode.\r\n * Defaults to `defaultMaterialColors`\r\n */\r\n public static MaterialColors: Color3[] = defaultMaterialColors;\r\n\r\n /**\r\n * Options for the plugin.\r\n * See MeshDebugOptions interface for defaults.\r\n */\r\n private _options: Required<MeshDebugOptions>;\r\n\r\n /**\r\n * Material ID color of this plugin instance.\r\n * Taken from index `_PluginCount` of `MaterialColors` at time of instantiation.\r\n */\r\n @serializeAsColor3()\r\n private _materialColor: Color3;\r\n\r\n /**\r\n * Whether the mesh debug plugin is enabled in the material.\r\n * Defaults to true in constructor.\r\n */\r\n @serialize()\r\n private _isEnabled = false;\r\n\r\n private _mode: MeshDebugMode = MeshDebugMode.NONE;\r\n /**\r\n * Current mesh debug visualization.\r\n * Defaults to NONE.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllDefinesAsDirty\")\r\n public mode: MeshDebugMode = MeshDebugMode.NONE;\r\n\r\n private _multiply: boolean = true;\r\n /**\r\n * Whether the mesh debug visualization multiplies with colors underneath.\r\n * Defaults to true.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllDefinesAsDirty\")\r\n public multiply: boolean = true;\r\n\r\n /** @internal */\r\n protected _markAllDefinesAsDirty(): void {\r\n this._enable(this._isEnabled);\r\n this.markAllDefinesAsDirty();\r\n }\r\n\r\n /**\r\n * Creates a new MeshDebugPluginMaterial\r\n * @param material Material to attach the mesh debug plugin to\r\n * @param options Options for the mesh debug plugin\r\n */\r\n constructor(material: PBRBaseMaterial | StandardMaterial, options?: MeshDebugOptions) {\r\n options = options ?? {};\r\n\r\n const defines = new MeshDebugDefines();\r\n defines.DBG_MODE = options.mode ?? defines.DBG_MODE;\r\n defines.DBG_MULTIPLY = options.multiply ?? defines.DBG_MULTIPLY;\r\n super(material, \"MeshDebug\", 200, defines, true, true);\r\n\r\n const defaults: Required<MeshDebugOptions> = {\r\n mode: defines.DBG_MODE,\r\n multiply: defines.DBG_MULTIPLY,\r\n shadedDiffuseColor: new Color3(1, 1, 1),\r\n shadedSpecularColor: new Color3(0.8, 0.8, 0.8),\r\n shadedSpecularPower: 10,\r\n wireframeThickness: 0.7,\r\n wireframeTrianglesColor: new Color3(0, 0, 0),\r\n wireframeVerticesColor: new Color3(0.8, 0.8, 0.8),\r\n vertexColor: new Color3(0, 0, 0),\r\n vertexRadius: 1.2,\r\n uvScale: 20,\r\n uvPrimaryColor: new Color3(1, 1, 1),\r\n uvSecondaryColor: new Color3(0.5, 0.5, 0.5),\r\n };\r\n\r\n this._mode = defines.DBG_MODE;\r\n this._multiply = defines.DBG_MULTIPLY;\r\n this._options = { ...defaults, ...options };\r\n this._materialColor = MeshDebugPluginMaterial.MaterialColors[MeshDebugPluginMaterial._PluginCount++ % MeshDebugPluginMaterial.MaterialColors.length];\r\n this.isEnabled = true;\r\n }\r\n\r\n /**\r\n * Get the class name\r\n * @returns Class name\r\n */\r\n public getClassName() {\r\n return \"MeshDebugPluginMaterial\";\r\n }\r\n\r\n /**\r\n * Gets whether the mesh debug plugin is enabled in the material.\r\n */\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n /**\r\n * Sets whether the mesh debug plugin is enabled in the material.\r\n * @param value enabled\r\n */\r\n public set isEnabled(value: boolean) {\r\n if (this._isEnabled === value) {\r\n return;\r\n }\r\n if (this._material.getScene().getEngine().webGLVersion == 1) {\r\n Logger.Error(\"MeshDebugPluginMaterial is not supported on WebGL 1.0.\");\r\n this._isEnabled = false;\r\n return;\r\n }\r\n this._isEnabled = value;\r\n this._markAllDefinesAsDirty();\r\n }\r\n\r\n /**\r\n * Prepare the defines\r\n * @param defines Mesh debug defines\r\n * @param scene Scene\r\n * @param mesh Mesh associated with material\r\n */\r\n public prepareDefines(defines: MeshDebugDefines, scene: Scene, mesh: AbstractMesh) {\r\n if (\r\n (this._mode == MeshDebugMode.VERTICES || this._mode == MeshDebugMode.TRIANGLES || this._mode == MeshDebugMode.TRIANGLES_VERTICES) &&\r\n !mesh.isVerticesDataPresent(\"dbg_initialPass\")\r\n ) {\r\n Logger.Warn(\r\n \"For best results with TRIANGLES, TRIANGLES_VERTICES, or VERTICES modes, please use MeshDebugPluginMaterial.PrepareMeshForTrianglesAndVerticesMode() on mesh.\",\r\n 1\r\n );\r\n }\r\n\r\n defines.DBG_MODE = this._mode;\r\n defines.DBG_MULTIPLY = this._multiply;\r\n defines.DBG_ENABLED = this._isEnabled;\r\n }\r\n\r\n /**\r\n * Get the shader attributes\r\n * @param attributes Array of attributes\r\n */\r\n public getAttributes(attributes: string[]) {\r\n attributes.push(\"dbg_initialPass\");\r\n }\r\n\r\n /**\r\n * Get the shader uniforms\r\n * @returns Uniforms\r\n */\r\n public getUniforms() {\r\n return {\r\n ubo: [\r\n { name: \"dbg_shadedDiffuseColor\", size: 3, type: \"vec3\" },\r\n { name: \"dbg_shadedSpecularColorPower\", size: 4, type: \"vec4\" }, // shadedSpecularColor, shadedSpecularPower\r\n { name: \"dbg_thicknessRadiusScale\", size: 3, type: \"vec3\" }, // wireframeThickness, vertexRadius, uvScale\r\n { name: \"dbg_wireframeTrianglesColor\", size: 3, type: \"vec3\" },\r\n { name: \"dbg_wireframeVerticesColor\", size: 3, type: \"vec3\" },\r\n { name: \"dbg_vertexColor\", size: 3, type: \"vec3\" },\r\n { name: \"dbg_uvPrimaryColor\", size: 3, type: \"vec3\" },\r\n { name: \"dbg_uvSecondaryColor\", size: 3, type: \"vec3\" },\r\n { name: \"dbg_materialColor\", size: 3, type: \"vec3\" },\r\n ],\r\n fragment: fragmentUniforms,\r\n };\r\n }\r\n\r\n /**\r\n * Bind the uniform buffer\r\n * @param uniformBuffer Uniform buffer\r\n */\r\n public bindForSubMesh(uniformBuffer: UniformBuffer): void {\r\n if (!this._isEnabled) {\r\n return;\r\n }\r\n uniformBuffer.updateFloat3(\"dbg_shadedDiffuseColor\", this._options.shadedDiffuseColor.r, this._options.shadedDiffuseColor.g, this._options.shadedDiffuseColor.b);\r\n uniformBuffer.updateFloat4(\r\n \"dbg_shadedSpecularColorPower\",\r\n this._options.shadedSpecularColor.r,\r\n this._options.shadedSpecularColor.g,\r\n this._options.shadedSpecularColor.b,\r\n this._options.shadedSpecularPower\r\n );\r\n uniformBuffer.updateFloat3(\"dbg_thicknessRadiusScale\", this._options.wireframeThickness, this._options.vertexRadius, this._options.uvScale);\r\n uniformBuffer.updateColor3(\"dbg_wireframeTrianglesColor\", this._options.wireframeTrianglesColor);\r\n uniformBuffer.updateColor3(\"dbg_wireframeVerticesColor\", this._options.wireframeVerticesColor);\r\n uniformBuffer.updateColor3(\"dbg_vertexColor\", this._options.vertexColor);\r\n uniformBuffer.updateColor3(\"dbg_uvPrimaryColor\", this._options.uvPrimaryColor);\r\n uniformBuffer.updateColor3(\"dbg_uvSecondaryColor\", this._options.uvSecondaryColor);\r\n uniformBuffer.updateColor3(\"dbg_materialColor\", this._materialColor);\r\n }\r\n\r\n /**\r\n * Get shader code\r\n * @param shaderType \"vertex\" or \"fragment\"\r\n * @returns Shader code\r\n */\r\n public getCustomCode(shaderType: string): Nullable<{ [pointName: string]: string }> {\r\n return shaderType === \"vertex\"\r\n ? {\r\n CUSTOM_VERTEX_DEFINITIONS: vertexDefinitions,\r\n CUSTOM_VERTEX_MAIN_END: vertexMainEnd,\r\n }\r\n : {\r\n CUSTOM_FRAGMENT_DEFINITIONS: fragmentDefinitions,\r\n CUSTOM_FRAGMENT_MAIN_END: fragmentMainEnd,\r\n };\r\n }\r\n\r\n /**\r\n * Serializes this plugin material\r\n * @returns serialized object\r\n */\r\n public serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.shadedDiffuseColor = this._options.shadedDiffuseColor.asArray();\r\n serializationObject.shadedSpecularColor = this._options.shadedSpecularColor.asArray();\r\n serializationObject.shadedSpecularPower = this._options.shadedSpecularPower;\r\n serializationObject.wireframeThickness = this._options.wireframeThickness;\r\n serializationObject.wireframeTrianglesColor = this._options.wireframeTrianglesColor.asArray();\r\n serializationObject.wireframeVerticesColor = this._options.wireframeVerticesColor.asArray();\r\n serializationObject.vertexColor = this._options.vertexColor.asArray();\r\n serializationObject.vertexRadius = this._options.vertexRadius;\r\n serializationObject.uvScale = this._options.uvScale;\r\n serializationObject.uvPrimaryColor = this._options.uvPrimaryColor.asArray();\r\n serializationObject.uvSecondaryColor = this._options.uvSecondaryColor.asArray();\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Parses a serialized object\r\n * @param serializationObject serialized object\r\n * @param scene scene\r\n * @param rootUrl root url for textures\r\n */\r\n public parse(serializationObject: any, scene: Scene, rootUrl: string): void {\r\n super.parse(serializationObject, scene, rootUrl);\r\n\r\n this._options.mode = serializationObject.mode;\r\n this._options.multiply = serializationObject.multiply;\r\n this._options.shadedDiffuseColor = Color3.FromArray(serializationObject.shadedDiffuseColor);\r\n this._options.shadedSpecularColor = Color3.FromArray(serializationObject.shadedSpecularColor);\r\n this._options.shadedSpecularPower = serializationObject.shadedSpecularPower;\r\n this._options.wireframeThickness = serializationObject.wireframeThickness;\r\n this._options.wireframeTrianglesColor = Color3.FromArray(serializationObject.wireframeTrianglesColor);\r\n this._options.wireframeVerticesColor = Color3.FromArray(serializationObject.wireframeVerticesColor);\r\n this._options.vertexColor = Color3.FromArray(serializationObject.vertexColor);\r\n this._options.vertexRadius = serializationObject.vertexRadius;\r\n this._options.uvScale = serializationObject.uvScale;\r\n this._options.uvPrimaryColor = Color3.FromArray(serializationObject.uvPrimaryColor);\r\n this._options.uvSecondaryColor = Color3.FromArray(serializationObject.uvSecondaryColor);\r\n\r\n this.markAllDefinesAsDirty();\r\n }\r\n\r\n /**\r\n * Resets static variables of the plugin to their original state\r\n */\r\n public static Reset(): void {\r\n this._PluginCount = 0;\r\n this.MaterialColors = defaultMaterialColors;\r\n }\r\n\r\n /**\r\n * Renders triangles in a mesh 3 times by tripling the indices in the index buffer.\r\n * Used to prepare a mesh to be rendered in `TRIANGLES`, `VERTICES`, or `TRIANGLES_VERTICES` modes.\r\n * NOTE: This is a destructive operation. The mesh's index buffer and vertex buffers are modified, and a new vertex buffer is allocated.\r\n * If you'd like the ability to revert these changes, toggle the optional `returnRollback` flag.\r\n * @param mesh the mesh to target\r\n * @param returnRollback whether or not to return a function that reverts mesh to its initial state. Default: false.\r\n * @returns a rollback function if `returnRollback` is true, otherwise an empty function.\r\n */\r\n public static PrepareMeshForTrianglesAndVerticesMode(mesh: Mesh, returnRollback: boolean = false): () => void {\r\n let rollback = () => {};\r\n\r\n if (mesh.getTotalIndices() == 0) return rollback;\r\n\r\n if (returnRollback) {\r\n const kinds = mesh.getVerticesDataKinds();\r\n const indices = mesh.getIndices()!;\r\n const data: { [kind: string]: FloatArray } = {};\r\n for (const kind of kinds) {\r\n data[kind] = mesh.getVerticesData(kind)!;\r\n }\r\n\r\n rollback = function () {\r\n mesh.setIndices(indices);\r\n for (const kind of kinds) {\r\n mesh.setVerticesData(kind, data[kind]);\r\n }\r\n mesh.removeVerticesData(\"dbg_initialPass\");\r\n };\r\n }\r\n\r\n let indices = Array.from(mesh.getIndices()!);\r\n const newIndices1 = [];\r\n for (let i = 0; i < indices.length; i += 3) {\r\n newIndices1.push(indices[i + 1], indices[i + 2], indices[i + 0]);\r\n }\r\n mesh.setIndices(indices.concat(newIndices1));\r\n\r\n mesh.convertToUnIndexedMesh();\r\n\r\n mesh.isUnIndexed = false;\r\n\r\n indices = Array.from(mesh.getIndices()!);\r\n const newIndices2 = [];\r\n for (let i = indices.length / 2; i < indices.length; i += 3) {\r\n newIndices2.push(indices[i + 1], indices[i + 2], indices[i + 0]);\r\n }\r\n mesh.setIndices(indices.concat(newIndices2));\r\n\r\n const num = mesh.getTotalVertices();\r\n const mid = num / 2;\r\n const pass = new Array(num).fill(1, 0, mid).fill(0, mid, num);\r\n mesh.setVerticesData(\"dbg_initialPass\", pass, false, 1);\r\n\r\n return rollback;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.MeshDebugPluginMaterial\", MeshDebugPluginMaterial);\r\n"]}
|
|
1
|
+
{"version":3,"file":"meshDebugPluginMaterial.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/meshDebugPluginMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { MaterialPluginBase } from \"./materialPluginBase\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { UniformBuffer } from \"./uniformBuffer\";\r\nimport type { FloatArray, Nullable } from \"../types\";\r\nimport { MaterialDefines } from \"./materialDefines\";\r\nimport type { PBRBaseMaterial } from \"./PBR/pbrBaseMaterial\";\r\nimport type { StandardMaterial } from \"./standardMaterial\";\r\nimport { RegisterClass } from \"../Misc/typeStore\";\r\nimport { Color3 } from \"core/Maths/math\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { expandToProperty, serialize, serializeAsColor3 } from \"core/Misc/decorators\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\n\r\nconst vertexDefinitions = `#if defined(DBG_ENABLED)\r\nattribute float dbg_initialPass;\r\nvarying vec3 dbg_vBarycentric;\r\nflat varying vec3 dbg_vVertexWorldPos;\r\nflat varying float dbg_vPass;\r\n#endif`;\r\n\r\nconst vertexMainEnd = `#if defined(DBG_ENABLED)\r\nfloat dbg_vertexIndex = mod(float(gl_VertexID), 3.);\r\nif (dbg_vertexIndex == 0.0) { \r\n dbg_vBarycentric = vec3(1.,0.,0.); \r\n}\r\nelse if (dbg_vertexIndex == 1.0) { \r\n dbg_vBarycentric = vec3(0.,1.,0.); \r\n}\r\nelse { \r\n dbg_vBarycentric = vec3(0.,0.,1.); \r\n}\r\n\r\ndbg_vVertexWorldPos = vPositionW;\r\ndbg_vPass = dbg_initialPass;\r\n#endif`;\r\n\r\nconst fragmentUniforms = `#if defined(DBG_ENABLED)\r\nuniform vec3 dbg_shadedDiffuseColor;\r\nuniform vec4 dbg_shadedSpecularColorPower;\r\nuniform vec3 dbg_thicknessRadiusScale;\r\n\r\n#if DBG_MODE == 2 || DBG_MODE == 3\r\n uniform vec3 dbg_vertexColor;\r\n#endif\r\n\r\n#if DBG_MODE == 1\r\n uniform vec3 dbg_wireframeTrianglesColor;\r\n#elif DBG_MODE == 3\r\n uniform vec3 dbg_wireframeVerticesColor;\r\n#elif DBG_MODE == 4 || DBG_MODE == 5\r\n uniform vec3 dbg_uvPrimaryColor;\r\n uniform vec3 dbg_uvSecondaryColor;\r\n#elif DBG_MODE == 7\r\n uniform vec3 dbg_materialColor;\r\n#endif\r\n#endif`;\r\n\r\nconst fragmentDefinitions = `#if defined(DBG_ENABLED)\r\nvarying vec3 dbg_vBarycentric;\r\nflat varying vec3 dbg_vVertexWorldPos;\r\nflat varying float dbg_vPass;\r\n\r\n#if !defined(DBG_MULTIPLY)\r\n vec3 dbg_applyShading(vec3 color) {\r\n vec3 N = vNormalW.xyz;\r\n vec3 L = normalize(vEyePosition.xyz - vPositionW.xyz);\r\n vec3 H = normalize(L + L);\r\n float LdotN = clamp(dot(L,N), 0., 1.);\r\n float HdotN = clamp(dot(H,N), 0., 1.);\r\n float specTerm = pow(HdotN, dbg_shadedSpecularColorPower.w);\r\n color *= (LdotN / PI);\r\n color += dbg_shadedSpecularColorPower.rgb * (specTerm / PI);\r\n return color;\r\n }\r\n#endif\r\n\r\n#if DBG_MODE == 1 || DBG_MODE == 3\r\n float dbg_edgeFactor() {\r\n vec3 d = fwidth(dbg_vBarycentric);\r\n vec3 a3 = smoothstep(vec3(0.), d * dbg_thicknessRadiusScale.x, dbg_vBarycentric);\r\n return min(min(a3.x, a3.y), a3.z);\r\n }\r\n#endif\r\n\r\n#if DBG_MODE == 2 || DBG_MODE == 3\r\n float dbg_cornerFactor() {\r\n vec3 worldPos = vPositionW;\r\n float dist = length(worldPos - dbg_vVertexWorldPos);\r\n float camDist = length(worldPos - vEyePosition.xyz);\r\n float d = sqrt(camDist) * .001;\r\n return smoothstep((dbg_thicknessRadiusScale.y * d), ((dbg_thicknessRadiusScale.y * 1.01) * d), dist);\r\n }\r\n#endif\r\n\r\n#if (DBG_MODE == 4 && defined(UV1)) || (DBG_MODE == 5 && defined(UV2))\r\n float dbg_checkerboardFactor(vec2 uv) {\r\n vec2 f = fract(uv * dbg_thicknessRadiusScale.z);\r\n f -= .5;\r\n return (f.x * f.y) > 0. ? 1. : 0.;\r\n }\r\n#endif\r\n#endif`;\r\n\r\nconst fragmentMainEnd = `#if defined(DBG_ENABLED)\r\nvec3 dbg_color = vec3(1.);\r\n#if DBG_MODE == 1\r\n dbg_color = mix(dbg_wireframeTrianglesColor, vec3(1.), dbg_edgeFactor());\r\n#elif DBG_MODE == 2 || DBG_MODE == 3\r\n float dbg_cornerFactor = dbg_cornerFactor();\r\n if (dbg_vPass == 0. && dbg_cornerFactor == 1.) discard;\r\n dbg_color = mix(dbg_vertexColor, vec3(1.), dbg_cornerFactor);\r\n #if DBG_MODE == 3\r\n dbg_color *= mix(dbg_wireframeVerticesColor, vec3(1.), dbg_edgeFactor());\r\n #endif\r\n#elif DBG_MODE == 4 && defined(UV1)\r\n dbg_color = mix(dbg_uvPrimaryColor, dbg_uvSecondaryColor, dbg_checkerboardFactor(vMainUV1));\r\n#elif DBG_MODE == 5 && defined(UV2)\r\n dbg_color = mix(dbg_uvPrimaryColor, dbg_uvSecondaryColor, dbg_checkerboardFactor(vMainUV2));\r\n#elif DBG_MODE == 6 && defined(VERTEXCOLOR)\r\n dbg_color = vColor.rgb;\r\n#elif DBG_MODE == 7\r\n dbg_color = dbg_materialColor;\r\n#endif\r\n\r\n#if defined(DBG_MULTIPLY)\r\n gl_FragColor *= vec4(dbg_color, 1.);\r\n#else\r\n #if DBG_MODE != 6\r\n gl_FragColor = vec4(dbg_applyShading(dbg_shadedDiffuseColor) * dbg_color, 1.);\r\n #else\r\n gl_FragColor = vec4(dbg_color, 1.);\r\n #endif\r\n#endif\r\n#endif`;\r\n\r\nconst defaultMaterialColors = [\r\n new Color3(0.98, 0.26, 0.38),\r\n new Color3(0.47, 0.75, 0.3),\r\n new Color3(0, 0.26, 0.77),\r\n new Color3(0.97, 0.6, 0.76),\r\n new Color3(0.19, 0.63, 0.78),\r\n new Color3(0.98, 0.8, 0.6),\r\n new Color3(0.65, 0.43, 0.15),\r\n new Color3(0.15, 0.47, 0.22),\r\n new Color3(0.67, 0.71, 0.86),\r\n new Color3(0.09, 0.46, 0.56),\r\n new Color3(0.8, 0.98, 0.02),\r\n new Color3(0.39, 0.29, 0.13),\r\n new Color3(0.53, 0.63, 0.06),\r\n new Color3(0.95, 0.96, 0.41),\r\n new Color3(1, 0.72, 0.94),\r\n new Color3(0.63, 0.08, 0.31),\r\n new Color3(0.66, 0.96, 0.95),\r\n new Color3(0.22, 0.14, 0.19),\r\n new Color3(0.14, 0.65, 0.59),\r\n new Color3(0.93, 1, 0.68),\r\n new Color3(0.93, 0.14, 0.44),\r\n new Color3(0.47, 0.86, 0.67),\r\n new Color3(0.85, 0.07, 0.78),\r\n new Color3(0.53, 0.64, 0.98),\r\n new Color3(0.43, 0.37, 0.56),\r\n new Color3(0.71, 0.65, 0.25),\r\n new Color3(0.66, 0.19, 0.01),\r\n new Color3(0.94, 0.53, 0.12),\r\n new Color3(0.41, 0.44, 0.44),\r\n new Color3(0.24, 0.71, 0.96),\r\n new Color3(0.57, 0.28, 0.56),\r\n new Color3(0.44, 0.98, 0.42),\r\n];\r\n\r\n/**\r\n * Supported visualizations of MeshDebugPluginMaterial\r\n */\r\nexport enum MeshDebugMode {\r\n /**\r\n * Material without any mesh debug visualization\r\n */\r\n NONE = 0,\r\n /**\r\n * A wireframe of the mesh\r\n * NOTE: For this mode to work correctly, convertToUnIndexedMesh() or MeshDebugPluginMaterial.PrepareMeshForTrianglesAndVerticesMode() must first be called on mesh.\r\n */\r\n TRIANGLES = 1,\r\n /**\r\n * Points drawn over vertices of mesh\r\n * NOTE: For this mode to work correctly, MeshDebugPluginMaterial.PrepareMeshForTrianglesAndVerticesMode() must first be called on mesh.\r\n */\r\n VERTICES = 2,\r\n /**\r\n * A wireframe of the mesh, with points drawn over vertices\r\n * NOTE: For this mode to work correctly, MeshDebugPluginMaterial.PrepareMeshForTrianglesAndVerticesMode() must first be called on mesh.\r\n */\r\n TRIANGLES_VERTICES = 3,\r\n /**\r\n * A checkerboard grid of the mesh's UV set 0\r\n */\r\n UV0 = 4,\r\n /**\r\n * A checkerboard grid of the mesh's UV set 1\r\n */\r\n UV1 = 5,\r\n /**\r\n * The mesh's vertex colors displayed as the primary texture\r\n */\r\n VERTEXCOLORS = 6,\r\n /**\r\n * An arbitrary, distinguishable color to identify the material\r\n */\r\n MATERIALIDS = 7,\r\n}\r\n\r\n/**\r\n * Options for MeshDebugPluginMaterial that are given at initialization\r\n */\r\nexport interface MeshDebugOptions {\r\n /**\r\n * The mesh debug visualization.\r\n * Defaults to NONE.\r\n */\r\n mode?: MeshDebugMode;\r\n /**\r\n * Whether the mesh debug visualization should multiply with color underneath.\r\n * Defaults to true.\r\n */\r\n multiply?: boolean;\r\n /**\r\n * Diffuse color used to shade the mesh.\r\n * Defaults to (1.0, 1.0, 1.0).\r\n */\r\n shadedDiffuseColor?: Color3;\r\n /**\r\n * Specular color used to shade the mesh.\r\n * Defaults to (0.8, 0.8, 0.8).\r\n */\r\n shadedSpecularColor?: Color3;\r\n /**\r\n * Specular power used to shade the mesh.\r\n * Defaults to 10.\r\n */\r\n shadedSpecularPower?: number;\r\n /**\r\n * Width of edge lines in TRIANGLES and TRIANGLE_VERTICES modes.\r\n * Defaults to 0.7.\r\n */\r\n wireframeThickness?: number;\r\n /**\r\n * Color of edge lines in TRIANGLES mode.\r\n * Defaults to (0.0, 0.0, 0.0).\r\n */\r\n wireframeTrianglesColor?: Color3;\r\n /**\r\n * Color of edge lines in TRIANGLES_VERTICES modes.\r\n * Defaults to (0.8, 0.8, 0.8).\r\n */\r\n wireframeVerticesColor?: Color3;\r\n /**\r\n * Color of vertices in TRIANGLES_VERTICES and VERTICES mode.\r\n * Defaults to (0.0, 0.0, 0.0).\r\n */\r\n vertexColor?: Color3;\r\n /**\r\n * Radius of dots drawn over vertices in TRIANGLE_VERTICES and VERTICES mode.\r\n * Defaults to 1.2.\r\n */\r\n vertexRadius?: number;\r\n /**\r\n * Size of tiles in UV1 or UV2 modes.\r\n * Defaults to 20.\r\n */\r\n uvScale?: number;\r\n /**\r\n * 1st color of checkerboard grid in UV1 or UV2 modes.\r\n * Defaults to (1.0, 1.0, 1.0).\r\n */\r\n uvPrimaryColor?: Color3;\r\n /**\r\n * 2nd color of checkerboard grid in UV1 or UV2 modes.\r\n * Defaults to (0.5, 0.5, 0.5).\r\n */\r\n uvSecondaryColor?: Color3;\r\n}\r\n\r\n/** @internal */\r\nclass MeshDebugDefines extends MaterialDefines {\r\n /**\r\n * Current mesh debug visualization.\r\n * Defaults to NONE.\r\n */\r\n DBG_MODE: MeshDebugMode = MeshDebugMode.NONE;\r\n /**\r\n * Whether the mesh debug visualization multiplies with colors underneath.\r\n * Defaults to true.\r\n */\r\n DBG_MULTIPLY: boolean = true;\r\n /**\r\n * Whether the mesh debug plugin is enabled in the material.\r\n * Defaults to true.\r\n */\r\n DBG_ENABLED: boolean = true;\r\n}\r\n\r\n/**\r\n * Plugin that implements various mesh debug visualizations,\r\n * List of available visualizations can be found in MeshDebugMode enum.\r\n */\r\nexport class MeshDebugPluginMaterial extends MaterialPluginBase {\r\n /**\r\n * Total number of instances of the plugin.\r\n * Starts at 0.\r\n */\r\n private static _PluginCount: number = 0;\r\n\r\n /**\r\n * Color palette used for MATERIALIDS mode.\r\n * Defaults to `defaultMaterialColors`\r\n */\r\n public static MaterialColors: Color3[] = defaultMaterialColors;\r\n\r\n /**\r\n * Options for the plugin.\r\n * See MeshDebugOptions interface for defaults.\r\n */\r\n private _options: Required<MeshDebugOptions>;\r\n\r\n /**\r\n * Material ID color of this plugin instance.\r\n * Taken from index `_PluginCount` of `MaterialColors` at time of instantiation.\r\n */\r\n @serializeAsColor3()\r\n private _materialColor: Color3;\r\n\r\n /**\r\n * Whether the mesh debug plugin is enabled in the material.\r\n * Defaults to true in constructor.\r\n */\r\n @serialize()\r\n private _isEnabled = false;\r\n\r\n private _mode: MeshDebugMode = MeshDebugMode.NONE;\r\n /**\r\n * Current mesh debug visualization.\r\n * Defaults to NONE.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllDefinesAsDirty\")\r\n public mode: MeshDebugMode = MeshDebugMode.NONE;\r\n\r\n private _multiply: boolean = true;\r\n /**\r\n * Whether the mesh debug visualization multiplies with colors underneath.\r\n * Defaults to true.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllDefinesAsDirty\")\r\n public multiply: boolean = true;\r\n\r\n /** @internal */\r\n protected _markAllDefinesAsDirty(): void {\r\n this._enable(this._isEnabled);\r\n this.markAllDefinesAsDirty();\r\n }\r\n\r\n /**\r\n * Creates a new MeshDebugPluginMaterial\r\n * @param material Material to attach the mesh debug plugin to\r\n * @param options Options for the mesh debug plugin\r\n */\r\n constructor(material: PBRBaseMaterial | StandardMaterial, options?: MeshDebugOptions) {\r\n options = options ?? {};\r\n\r\n const defines = new MeshDebugDefines();\r\n defines.DBG_MODE = options.mode ?? defines.DBG_MODE;\r\n defines.DBG_MULTIPLY = options.multiply ?? defines.DBG_MULTIPLY;\r\n super(material, \"MeshDebug\", 200, defines, true, true);\r\n\r\n const defaults: Required<MeshDebugOptions> = {\r\n mode: defines.DBG_MODE,\r\n multiply: defines.DBG_MULTIPLY,\r\n shadedDiffuseColor: new Color3(1, 1, 1),\r\n shadedSpecularColor: new Color3(0.8, 0.8, 0.8),\r\n shadedSpecularPower: 10,\r\n wireframeThickness: 0.7,\r\n wireframeTrianglesColor: new Color3(0, 0, 0),\r\n wireframeVerticesColor: new Color3(0.8, 0.8, 0.8),\r\n vertexColor: new Color3(0, 0, 0),\r\n vertexRadius: 1.2,\r\n uvScale: 20,\r\n uvPrimaryColor: new Color3(1, 1, 1),\r\n uvSecondaryColor: new Color3(0.5, 0.5, 0.5),\r\n };\r\n\r\n this._mode = defines.DBG_MODE;\r\n this._multiply = defines.DBG_MULTIPLY;\r\n this._options = { ...defaults, ...options };\r\n this._materialColor = MeshDebugPluginMaterial.MaterialColors[MeshDebugPluginMaterial._PluginCount++ % MeshDebugPluginMaterial.MaterialColors.length];\r\n this.isEnabled = true;\r\n }\r\n\r\n /**\r\n * Get the class name\r\n * @returns Class name\r\n */\r\n public getClassName() {\r\n return \"MeshDebugPluginMaterial\";\r\n }\r\n\r\n /**\r\n * Gets whether the mesh debug plugin is enabled in the material.\r\n */\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n /**\r\n * Sets whether the mesh debug plugin is enabled in the material.\r\n * @param value enabled\r\n */\r\n public set isEnabled(value: boolean) {\r\n if (this._isEnabled === value) {\r\n return;\r\n }\r\n if (this._material.getScene().getEngine().webGLVersion == 1) {\r\n Logger.Error(\"MeshDebugPluginMaterial is not supported on WebGL 1.0.\");\r\n this._isEnabled = false;\r\n return;\r\n }\r\n this._isEnabled = value;\r\n this._markAllDefinesAsDirty();\r\n }\r\n\r\n /**\r\n * Prepare the defines\r\n * @param defines Mesh debug defines\r\n * @param scene Scene\r\n * @param mesh Mesh associated with material\r\n */\r\n public prepareDefines(defines: MeshDebugDefines, scene: Scene, mesh: AbstractMesh) {\r\n if (\r\n (this._mode == MeshDebugMode.VERTICES || this._mode == MeshDebugMode.TRIANGLES || this._mode == MeshDebugMode.TRIANGLES_VERTICES) &&\r\n !mesh.isVerticesDataPresent(\"dbg_initialPass\")\r\n ) {\r\n Logger.Warn(\r\n \"For best results with TRIANGLES, TRIANGLES_VERTICES, or VERTICES modes, please use MeshDebugPluginMaterial.PrepareMeshForTrianglesAndVerticesMode() on mesh.\",\r\n 1\r\n );\r\n }\r\n\r\n defines.DBG_MODE = this._mode;\r\n defines.DBG_MULTIPLY = this._multiply;\r\n defines.DBG_ENABLED = this._isEnabled;\r\n }\r\n\r\n /**\r\n * Get the shader attributes\r\n * @param attributes Array of attributes\r\n */\r\n public getAttributes(attributes: string[]) {\r\n attributes.push(\"dbg_initialPass\");\r\n }\r\n\r\n /**\r\n * Get the shader uniforms\r\n * @returns Uniforms\r\n */\r\n public getUniforms() {\r\n return {\r\n ubo: [\r\n { name: \"dbg_shadedDiffuseColor\", size: 3, type: \"vec3\" },\r\n { name: \"dbg_shadedSpecularColorPower\", size: 4, type: \"vec4\" }, // shadedSpecularColor, shadedSpecularPower\r\n { name: \"dbg_thicknessRadiusScale\", size: 3, type: \"vec3\" }, // wireframeThickness, vertexRadius, uvScale\r\n { name: \"dbg_wireframeTrianglesColor\", size: 3, type: \"vec3\" },\r\n { name: \"dbg_wireframeVerticesColor\", size: 3, type: \"vec3\" },\r\n { name: \"dbg_vertexColor\", size: 3, type: \"vec3\" },\r\n { name: \"dbg_uvPrimaryColor\", size: 3, type: \"vec3\" },\r\n { name: \"dbg_uvSecondaryColor\", size: 3, type: \"vec3\" },\r\n { name: \"dbg_materialColor\", size: 3, type: \"vec3\" },\r\n ],\r\n fragment: fragmentUniforms,\r\n };\r\n }\r\n\r\n /**\r\n * Bind the uniform buffer\r\n * @param uniformBuffer Uniform buffer\r\n */\r\n public bindForSubMesh(uniformBuffer: UniformBuffer): void {\r\n if (!this._isEnabled) {\r\n return;\r\n }\r\n uniformBuffer.updateFloat3(\"dbg_shadedDiffuseColor\", this._options.shadedDiffuseColor.r, this._options.shadedDiffuseColor.g, this._options.shadedDiffuseColor.b);\r\n uniformBuffer.updateFloat4(\r\n \"dbg_shadedSpecularColorPower\",\r\n this._options.shadedSpecularColor.r,\r\n this._options.shadedSpecularColor.g,\r\n this._options.shadedSpecularColor.b,\r\n this._options.shadedSpecularPower\r\n );\r\n uniformBuffer.updateFloat3(\"dbg_thicknessRadiusScale\", this._options.wireframeThickness, this._options.vertexRadius, this._options.uvScale);\r\n uniformBuffer.updateColor3(\"dbg_wireframeTrianglesColor\", this._options.wireframeTrianglesColor);\r\n uniformBuffer.updateColor3(\"dbg_wireframeVerticesColor\", this._options.wireframeVerticesColor);\r\n uniformBuffer.updateColor3(\"dbg_vertexColor\", this._options.vertexColor);\r\n uniformBuffer.updateColor3(\"dbg_uvPrimaryColor\", this._options.uvPrimaryColor);\r\n uniformBuffer.updateColor3(\"dbg_uvSecondaryColor\", this._options.uvSecondaryColor);\r\n uniformBuffer.updateColor3(\"dbg_materialColor\", this._materialColor);\r\n }\r\n\r\n /**\r\n * Get shader code\r\n * @param shaderType \"vertex\" or \"fragment\"\r\n * @returns Shader code\r\n */\r\n public getCustomCode(shaderType: string): Nullable<{ [pointName: string]: string }> {\r\n return shaderType === \"vertex\"\r\n ? {\r\n CUSTOM_VERTEX_DEFINITIONS: vertexDefinitions,\r\n CUSTOM_VERTEX_MAIN_END: vertexMainEnd,\r\n }\r\n : {\r\n CUSTOM_FRAGMENT_DEFINITIONS: fragmentDefinitions,\r\n CUSTOM_FRAGMENT_MAIN_END: fragmentMainEnd,\r\n };\r\n }\r\n\r\n /**\r\n * Serializes this plugin material\r\n * @returns serialized object\r\n */\r\n public serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.shadedDiffuseColor = this._options.shadedDiffuseColor.asArray();\r\n serializationObject.shadedSpecularColor = this._options.shadedSpecularColor.asArray();\r\n serializationObject.shadedSpecularPower = this._options.shadedSpecularPower;\r\n serializationObject.wireframeThickness = this._options.wireframeThickness;\r\n serializationObject.wireframeTrianglesColor = this._options.wireframeTrianglesColor.asArray();\r\n serializationObject.wireframeVerticesColor = this._options.wireframeVerticesColor.asArray();\r\n serializationObject.vertexColor = this._options.vertexColor.asArray();\r\n serializationObject.vertexRadius = this._options.vertexRadius;\r\n serializationObject.uvScale = this._options.uvScale;\r\n serializationObject.uvPrimaryColor = this._options.uvPrimaryColor.asArray();\r\n serializationObject.uvSecondaryColor = this._options.uvSecondaryColor.asArray();\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Parses a serialized object\r\n * @param serializationObject serialized object\r\n * @param scene scene\r\n * @param rootUrl root url for textures\r\n */\r\n public parse(serializationObject: any, scene: Scene, rootUrl: string): void {\r\n super.parse(serializationObject, scene, rootUrl);\r\n\r\n this._options.mode = serializationObject.mode;\r\n this._options.multiply = serializationObject.multiply;\r\n this._options.shadedDiffuseColor = Color3.FromArray(serializationObject.shadedDiffuseColor);\r\n this._options.shadedSpecularColor = Color3.FromArray(serializationObject.shadedSpecularColor);\r\n this._options.shadedSpecularPower = serializationObject.shadedSpecularPower;\r\n this._options.wireframeThickness = serializationObject.wireframeThickness;\r\n this._options.wireframeTrianglesColor = Color3.FromArray(serializationObject.wireframeTrianglesColor);\r\n this._options.wireframeVerticesColor = Color3.FromArray(serializationObject.wireframeVerticesColor);\r\n this._options.vertexColor = Color3.FromArray(serializationObject.vertexColor);\r\n this._options.vertexRadius = serializationObject.vertexRadius;\r\n this._options.uvScale = serializationObject.uvScale;\r\n this._options.uvPrimaryColor = Color3.FromArray(serializationObject.uvPrimaryColor);\r\n this._options.uvSecondaryColor = Color3.FromArray(serializationObject.uvSecondaryColor);\r\n\r\n this.markAllDefinesAsDirty();\r\n }\r\n\r\n /**\r\n * Resets static variables of the plugin to their original state\r\n */\r\n public static Reset(): void {\r\n this._PluginCount = 0;\r\n this.MaterialColors = defaultMaterialColors;\r\n }\r\n\r\n /**\r\n * Renders triangles in a mesh 3 times by tripling the indices in the index buffer.\r\n * Used to prepare a mesh to be rendered in `TRIANGLES`, `VERTICES`, or `TRIANGLES_VERTICES` modes.\r\n * NOTE: This is a destructive operation. The mesh's index buffer and vertex buffers are modified, and a new vertex buffer is allocated.\r\n * If you'd like the ability to revert these changes, toggle the optional `returnRollback` flag.\r\n * @param mesh the mesh to target\r\n * @param returnRollback whether or not to return a function that reverts mesh to its initial state. Default: false.\r\n * @returns a rollback function if `returnRollback` is true, otherwise an empty function.\r\n */\r\n public static PrepareMeshForTrianglesAndVerticesMode(mesh: Mesh, returnRollback: boolean = false): () => void {\r\n let rollback = () => {};\r\n\r\n if (mesh.getTotalIndices() == 0) return rollback;\r\n\r\n if (returnRollback) {\r\n const kinds = mesh.getVerticesDataKinds();\r\n const indices = mesh.getIndices()!;\r\n const data: { [kind: string]: FloatArray } = {};\r\n for (const kind of kinds) {\r\n data[kind] = mesh.getVerticesData(kind)!;\r\n }\r\n\r\n rollback = function () {\r\n mesh.setIndices(indices);\r\n for (const kind of kinds) {\r\n mesh.setVerticesData(kind, data[kind]);\r\n }\r\n mesh.removeVerticesData(\"dbg_initialPass\");\r\n };\r\n }\r\n\r\n let indices = Array.from(mesh.getIndices()!);\r\n const newIndices1 = [];\r\n for (let i = 0; i < indices.length; i += 3) {\r\n newIndices1.push(indices[i + 1], indices[i + 2], indices[i + 0]);\r\n }\r\n mesh.setIndices(indices.concat(newIndices1));\r\n\r\n mesh.convertToUnIndexedMesh();\r\n\r\n mesh.isUnIndexed = false;\r\n\r\n indices = Array.from(mesh.getIndices()!);\r\n const newIndices2 = [];\r\n for (let i = indices.length / 2; i < indices.length; i += 3) {\r\n newIndices2.push(indices[i + 1], indices[i + 2], indices[i + 0]);\r\n }\r\n mesh.setIndices(indices.concat(newIndices2));\r\n\r\n const num = mesh.getTotalVertices();\r\n const mid = num / 2;\r\n const pass = new Array(num).fill(1, 0, mid).fill(0, mid, num);\r\n mesh.setVerticesData(\"dbg_initialPass\", pass, false, 1);\r\n\r\n return rollback;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.MeshDebugPluginMaterial\", MeshDebugPluginMaterial);\r\n"]}
|
package/Maths/math.color.d.ts
CHANGED
|
@@ -237,9 +237,9 @@ export declare class Color3 {
|
|
|
237
237
|
private static _BlackReadOnly;
|
|
238
238
|
/**
|
|
239
239
|
* Converts Hue, saturation and value to a Color3 (RGB)
|
|
240
|
-
* @param hue defines the hue
|
|
241
|
-
* @param saturation defines the saturation
|
|
242
|
-
* @param value defines the value
|
|
240
|
+
* @param hue defines the hue (value between 0 and 360)
|
|
241
|
+
* @param saturation defines the saturation (value between 0 and 1)
|
|
242
|
+
* @param value defines the value (value between 0 and 1)
|
|
243
243
|
* @param result defines the Color3 where to store the RGB values
|
|
244
244
|
*/
|
|
245
245
|
static HSVtoRGBToRef(hue: number, saturation: number, value: number, result: Color3): void;
|
package/Maths/math.color.js
CHANGED
|
@@ -406,9 +406,9 @@ export class Color3 {
|
|
|
406
406
|
}
|
|
407
407
|
/**
|
|
408
408
|
* Converts Hue, saturation and value to a Color3 (RGB)
|
|
409
|
-
* @param hue defines the hue
|
|
410
|
-
* @param saturation defines the saturation
|
|
411
|
-
* @param value defines the value
|
|
409
|
+
* @param hue defines the hue (value between 0 and 360)
|
|
410
|
+
* @param saturation defines the saturation (value between 0 and 1)
|
|
411
|
+
* @param value defines the value (value between 0 and 1)
|
|
412
412
|
* @param result defines the Color3 where to store the RGB values
|
|
413
413
|
*/
|
|
414
414
|
static HSVtoRGBToRef(hue, saturation, value, result) {
|