@itwin/core-frontend 4.0.0-dev.56 → 4.0.0-dev.58
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/lib/cjs/render/webgl/BranchUniforms.d.ts +0 -2
- package/lib/cjs/render/webgl/BranchUniforms.d.ts.map +1 -1
- package/lib/cjs/render/webgl/BranchUniforms.js +7 -10
- package/lib/cjs/render/webgl/BranchUniforms.js.map +1 -1
- package/lib/cjs/render/webgl/MeshData.d.ts +4 -0
- package/lib/cjs/render/webgl/MeshData.d.ts.map +1 -1
- package/lib/cjs/render/webgl/MeshData.js +23 -7
- package/lib/cjs/render/webgl/MeshData.js.map +1 -1
- package/lib/cjs/render/webgl/RenderFlags.d.ts +3 -1
- package/lib/cjs/render/webgl/RenderFlags.d.ts.map +1 -1
- package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
- package/lib/cjs/render/webgl/SurfaceGeometry.d.ts.map +1 -1
- package/lib/cjs/render/webgl/SurfaceGeometry.js +2 -0
- package/lib/cjs/render/webgl/SurfaceGeometry.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/CopyStencil.js +0 -1
- package/lib/cjs/render/webgl/glsl/CopyStencil.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Surface.js +94 -20
- package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Vertex.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Vertex.js +24 -26
- package/lib/cjs/render/webgl/glsl/Vertex.js.map +1 -1
- package/lib/esm/render/webgl/BranchUniforms.d.ts +0 -2
- package/lib/esm/render/webgl/BranchUniforms.d.ts.map +1 -1
- package/lib/esm/render/webgl/BranchUniforms.js +7 -10
- package/lib/esm/render/webgl/BranchUniforms.js.map +1 -1
- package/lib/esm/render/webgl/MeshData.d.ts +4 -0
- package/lib/esm/render/webgl/MeshData.d.ts.map +1 -1
- package/lib/esm/render/webgl/MeshData.js +23 -7
- package/lib/esm/render/webgl/MeshData.js.map +1 -1
- package/lib/esm/render/webgl/RenderFlags.d.ts +3 -1
- package/lib/esm/render/webgl/RenderFlags.d.ts.map +1 -1
- package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
- package/lib/esm/render/webgl/SurfaceGeometry.d.ts.map +1 -1
- package/lib/esm/render/webgl/SurfaceGeometry.js +2 -0
- package/lib/esm/render/webgl/SurfaceGeometry.js.map +1 -1
- package/lib/esm/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/CopyStencil.js +0 -1
- package/lib/esm/render/webgl/glsl/CopyStencil.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Surface.js +94 -20
- package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Vertex.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Vertex.js +24 -26
- package/lib/esm/render/webgl/glsl/Vertex.js.map +1 -1
- package/package.json +19 -19
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SurfaceGeometry.js","sourceRoot":"","sources":["../../../../src/render/webgl/SurfaceGeometry.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert, dispose } from \"@itwin/core-bentley\";\r\nimport { FillFlags, RenderMode, TextureTransparency, ViewFlags } from \"@itwin/core-common\";\r\nimport { SurfaceType } from \"../primitives/SurfaceParams\";\r\nimport { VertexIndices } from \"../primitives/VertexTable\";\r\nimport { RenderMemory } from \"../RenderMemory\";\r\nimport { AttributeMap } from \"./AttributeMap\";\r\nimport { ShaderProgramParams } from \"./DrawCommand\";\r\nimport { GL } from \"./GL\";\r\nimport { BufferHandle, BufferParameters, BuffersContainer } from \"./AttributeBuffers\";\r\nimport { MaterialInfo } from \"./Material\";\r\nimport { Pass, RenderOrder, RenderPass, SurfaceBitIndex } from \"./RenderFlags\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport { TechniqueId } from \"./TechniqueId\";\r\nimport { MeshData } from \"./MeshData\";\r\nimport { MeshGeometry } from \"./MeshGeometry\";\r\n\r\n/** @internal */\r\nexport function wantMaterials(vf: ViewFlags): boolean {\r\n return vf.materials && RenderMode.SmoothShade === vf.renderMode;\r\n}\r\n\r\nfunction wantLighting(vf: ViewFlags) {\r\n return RenderMode.SmoothShade === vf.renderMode && vf.lighting;\r\n}\r\n\r\n/** @internal */\r\nexport class SurfaceGeometry extends MeshGeometry {\r\n private readonly _buffers: BuffersContainer;\r\n private readonly _indices: BufferHandle;\r\n\r\n public get lutBuffers() { return this._buffers; }\r\n\r\n public static create(mesh: MeshData, indices: VertexIndices): SurfaceGeometry | undefined {\r\n const indexBuffer = BufferHandle.createArrayBuffer(indices.data);\r\n return undefined !== indexBuffer ? new SurfaceGeometry(indexBuffer, indices.length, mesh) : undefined;\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return this._buffers.isDisposed\r\n && this._indices.isDisposed;\r\n }\r\n\r\n public dispose() {\r\n dispose(this._buffers);\r\n dispose(this._indices);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n stats.addSurface(this._indices.bytesUsed);\r\n }\r\n\r\n public get isLit() { return SurfaceType.Lit === this.surfaceType || SurfaceType.TexturedLit === this.surfaceType; }\r\n public get isTexturedType() { return SurfaceType.Textured === this.surfaceType || SurfaceType.TexturedLit === this.surfaceType; }\r\n public get hasTexture() { return this.isTexturedType && undefined !== this.texture; }\r\n public get hasNormalMap() { return this.isLit && this.isTexturedType && undefined !== this.normalMap; }\r\n public get isGlyph() { return this.mesh.isGlyph; }\r\n public override get alwaysRenderTranslucent() { return this.isGlyph; }\r\n public get isTileSection() { return undefined !== this.texture && this.texture.isTileSection; }\r\n public get isClassifier() { return SurfaceType.VolumeClassifier === this.surfaceType; }\r\n public override get supportsThematicDisplay() {\r\n return !this.isGlyph;\r\n }\r\n\r\n public override get allowColorOverride() {\r\n // Text background color should not be overridden by feature symbology overrides - otherwise it becomes unreadable...\r\n // We don't actually know if we have text.\r\n // We do know that text background color uses blanking fill. So do ImageGraphics, so they're also going to forbid overriding their color.\r\n return FillFlags.Blanking !== (this.fillFlags & FillFlags.Blanking);\r\n }\r\n\r\n public override get asSurface() { return this; }\r\n public override get asEdge() { return undefined; }\r\n public override get asSilhouette() { return undefined; }\r\n\r\n protected _draw(numInstances: number, instanceBuffersContainer?: BuffersContainer): void {\r\n const system = System.instance;\r\n\r\n // If we can't write depth in the fragment shader, use polygonOffset to force blanking regions to draw behind.\r\n const offset = RenderOrder.BlankingRegion === this.renderOrder && !system.supportsLogZBuffer;\r\n if (offset) {\r\n system.context.enable(GL.POLYGON_OFFSET_FILL);\r\n system.context.polygonOffset(1.0, 1.0);\r\n }\r\n\r\n const bufs = instanceBuffersContainer !== undefined ? instanceBuffersContainer : this._buffers;\r\n bufs.bind();\r\n system.drawArrays(GL.PrimitiveType.Triangles, 0, this._numIndices, numInstances);\r\n bufs.unbind();\r\n\r\n if (offset)\r\n system.context.disable(GL.POLYGON_OFFSET_FILL);\r\n }\r\n\r\n public override wantMixMonochromeColor(target: Target): boolean {\r\n // Text relies on white-on-white reversal.\r\n return !this.isGlyph && (this.isLitSurface || this.wantTextures(target, this.hasTexture));\r\n }\r\n\r\n public get techniqueId(): TechniqueId { return TechniqueId.Surface; }\r\n public override get isLitSurface() { return this.isLit; }\r\n public override get hasBakedLighting() { return this.mesh.hasBakedLighting; }\r\n public get renderOrder(): RenderOrder {\r\n if (FillFlags.Behind === (this.fillFlags & FillFlags.Behind))\r\n return RenderOrder.BlankingRegion;\r\n\r\n let order = this.isLit ? RenderOrder.LitSurface : RenderOrder.UnlitSurface;\r\n if (this.isPlanar)\r\n order = order | RenderOrder.PlanarBit;\r\n\r\n return order;\r\n }\r\n\r\n public override getColor(target: Target) {\r\n if (FillFlags.Background === (this.fillFlags & FillFlags.Background))\r\n return target.uniforms.style.backgroundColorInfo;\r\n else\r\n return this.colorInfo;\r\n }\r\n\r\n public override getPass(target: Target): Pass {\r\n // Classifiers have a dedicated pass\r\n if (this.isClassifier)\r\n return \"classification\";\r\n\r\n let opaquePass: Pass = this.isPlanar ? \"opaque-planar\" : \"opaque\";\r\n\r\n // When reading pixels, glyphs are always opaque. Otherwise always transparent (for anti-aliasing).\r\n if (this.isGlyph)\r\n return target.isReadPixelsInProgress ? opaquePass : \"translucent\";\r\n\r\n const vf = target.currentViewFlags;\r\n\r\n // When rendering thematic isolines, we need translucency because they have anti-aliasing.\r\n if (target.wantThematicDisplay && this.supportsThematicDisplay && target.uniforms.thematic.wantIsoLines)\r\n return \"translucent\";\r\n\r\n // In wireframe, unless fill is explicitly enabled for planar region, surface does not draw\r\n if (RenderMode.Wireframe === vf.renderMode && !this.mesh.isTextureAlwaysDisplayed) {\r\n const fillFlags = this.fillFlags;\r\n const showFill = FillFlags.Always === (fillFlags & FillFlags.Always) || (vf.fill && FillFlags.ByView === (fillFlags & FillFlags.ByView));\r\n if (!showFill)\r\n return \"none\";\r\n }\r\n\r\n // If transparency disabled by render mode or view flag, always draw opaque.\r\n if (!vf.transparency || RenderMode.SolidFill === vf.renderMode || RenderMode.HiddenLine === vf.renderMode)\r\n return opaquePass;\r\n\r\n // We have 3 sources of alpha: the material, the texture, and the color.\r\n // Base alpha comes from the material if it overrides it; otherwise from the color.\r\n // The texture's alpha is multiplied by the base alpha.\r\n // So we must draw in the translucent pass if the texture has transparency OR the base alpha is less than 1.\r\n let hasAlpha = false;\r\n const mat = wantMaterials(vf) ? this.mesh.materialInfo : undefined;\r\n if (undefined !== mat && mat.overridesAlpha)\r\n hasAlpha = mat.hasTranslucency;\r\n else\r\n hasAlpha = this.getColor(target).hasTranslucency;\r\n\r\n if (!hasAlpha) {\r\n // ###TODO handle TextureTransparency.Mixed; remove Texture.hasTranslucency.\r\n const tex = this.wantTextures(target, true) ? this.texture : undefined;\r\n switch (tex?.transparency) {\r\n case TextureTransparency.Translucent:\r\n hasAlpha = true;\r\n break;\r\n case TextureTransparency.Mixed:\r\n opaquePass = `${opaquePass}-translucent`;\r\n break;\r\n }\r\n }\r\n\r\n return hasAlpha ? \"translucent\" : opaquePass;\r\n }\r\n\r\n protected _wantWoWReversal(target: Target): boolean {\r\n const fillFlags = this.fillFlags;\r\n if (FillFlags.None !== (fillFlags & FillFlags.Background))\r\n return false; // fill color explicitly from background\r\n\r\n if (FillFlags.None !== (fillFlags & FillFlags.Always))\r\n return true; // fill displayed even in wireframe\r\n\r\n const vf = target.currentViewFlags;\r\n if (RenderMode.Wireframe === vf.renderMode || vf.visibleEdges)\r\n return false; // never invert surfaces when edges are displayed\r\n\r\n if (this.isLit && wantLighting(vf))\r\n return false;\r\n\r\n // Don't invert white pixels of textures...\r\n return !this.wantTextures(target, this.hasTexture);\r\n }\r\n\r\n public override get materialInfo(): MaterialInfo | undefined { return this.mesh.materialInfo; }\r\n\r\n public useTexture(params: ShaderProgramParams): boolean {\r\n return this.wantTextures(params.target, this.hasTexture);\r\n }\r\n\r\n public useNormalMap(params: ShaderProgramParams): boolean {\r\n return this.wantNormalMaps(params.target, this.hasNormalMap);\r\n }\r\n\r\n public computeSurfaceFlags(params: ShaderProgramParams, flags: Int32Array): void {\r\n const target = params.target;\r\n const vf = target.currentViewFlags;\r\n\r\n const useMaterial = wantMaterials(vf);\r\n flags[SurfaceBitIndex.IgnoreMaterial] = useMaterial ? 0 : 1;\r\n flags[SurfaceBitIndex.HasMaterialAtlas] = useMaterial && this.hasMaterialAtlas ? 1 : 0;\r\n\r\n flags[SurfaceBitIndex.ApplyLighting] = 0;\r\n flags[SurfaceBitIndex.HasColorAndNormal] = 0;\r\n if (this.isLit) {\r\n flags[SurfaceBitIndex.HasNormals] = 1;\r\n if (wantLighting(vf))\r\n flags[SurfaceBitIndex.ApplyLighting] = 1;\r\n\r\n // Textured meshes store normal in place of color index.\r\n // Untextured lit meshes store normal where textured meshes would store UV coords.\r\n // Tell shader where to find normal.\r\n if (!this.isTexturedType) {\r\n flags[SurfaceBitIndex.HasColorAndNormal] = 1;\r\n }\r\n } else {\r\n flags[SurfaceBitIndex.HasNormals] = 0;\r\n }\r\n\r\n flags[SurfaceBitIndex.HasTexture] = this.useTexture(params) ? 1 : 0;\r\n flags[SurfaceBitIndex.HasNormalMap] = this.useNormalMap(params) ? 1 : 0;\r\n\r\n // The transparency threshold controls how transparent a surface must be to allow light to pass through; more opaque surfaces cast shadows.\r\n flags[SurfaceBitIndex.TransparencyThreshold] = params.target.isDrawingShadowMap ? 1 : 0;\r\n flags[SurfaceBitIndex.BackgroundFill] = 0;\r\n switch (params.renderPass) {\r\n // NB: We need this for opaque pass due to SolidFill (must compute transparency, discard below threshold, render opaque at or above threshold)\r\n case RenderPass.OpaqueLinear:\r\n case RenderPass.OpaquePlanar:\r\n case RenderPass.OpaqueGeneral:\r\n case RenderPass.Translucent:\r\n case RenderPass.WorldOverlay:\r\n case RenderPass.OpaqueLayers:\r\n case RenderPass.TranslucentLayers:\r\n case RenderPass.OverlayLayers: {\r\n const mode = vf.renderMode;\r\n if (!this.isGlyph && (RenderMode.HiddenLine === mode || RenderMode.SolidFill === mode)) {\r\n flags[SurfaceBitIndex.TransparencyThreshold] = 1;\r\n if (RenderMode.HiddenLine === mode && FillFlags.Always !== (this.fillFlags & FillFlags.Always)) {\r\n // fill flags test for text - doesn't render with bg fill in hidden line mode.\r\n flags[SurfaceBitIndex.BackgroundFill] = 1;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n private constructor(indices: BufferHandle, numIndices: number, mesh: MeshData) {\r\n super(mesh, numIndices);\r\n this._buffers = BuffersContainer.create();\r\n const attrPos = AttributeMap.findAttribute(\"a_pos\", TechniqueId.Surface, false);\r\n assert(undefined !== attrPos);\r\n this._buffers.addBuffer(indices, [BufferParameters.create(attrPos.location, 3, GL.DataType.UnsignedByte, false, 0, 0, false)]);\r\n this._indices = indices;\r\n }\r\n\r\n private wantTextures(target: Target, surfaceTextureExists: boolean): boolean {\r\n if (this.hasScalarAnimation && undefined !== target.analysisTexture)\r\n return true;\r\n\r\n if (!surfaceTextureExists)\r\n return false;\r\n\r\n if (this.mesh.isTextureAlwaysDisplayed)\r\n return true;\r\n\r\n if (this.supportsThematicDisplay && target.wantThematicDisplay)\r\n return false;\r\n\r\n const fill = this.fillFlags;\r\n const flags = target.currentViewFlags;\r\n\r\n // ###TODO need to distinguish between gradient fill and actual textures...\r\n switch (flags.renderMode) {\r\n case RenderMode.SmoothShade:\r\n return flags.textures;\r\n case RenderMode.Wireframe:\r\n return FillFlags.Always === (fill & FillFlags.Always) || (flags.fill && FillFlags.ByView === (fill & FillFlags.ByView));\r\n default:\r\n return FillFlags.Always === (fill & FillFlags.Always);\r\n }\r\n }\r\n\r\n private wantNormalMaps(target: Target, normalMapExists: boolean): boolean {\r\n if (!normalMapExists || !target.displayNormalMaps)\r\n return false;\r\n\r\n const flags = target.currentViewFlags;\r\n\r\n switch (flags.renderMode) {\r\n case RenderMode.SmoothShade:\r\n return flags.textures;\r\n default:\r\n return false;\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"SurfaceGeometry.js","sourceRoot":"","sources":["../../../../src/render/webgl/SurfaceGeometry.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert, dispose } from \"@itwin/core-bentley\";\r\nimport { FillFlags, RenderMode, TextureTransparency, ViewFlags } from \"@itwin/core-common\";\r\nimport { SurfaceType } from \"../primitives/SurfaceParams\";\r\nimport { VertexIndices } from \"../primitives/VertexTable\";\r\nimport { RenderMemory } from \"../RenderMemory\";\r\nimport { AttributeMap } from \"./AttributeMap\";\r\nimport { ShaderProgramParams } from \"./DrawCommand\";\r\nimport { GL } from \"./GL\";\r\nimport { BufferHandle, BufferParameters, BuffersContainer } from \"./AttributeBuffers\";\r\nimport { MaterialInfo } from \"./Material\";\r\nimport { Pass, RenderOrder, RenderPass, SurfaceBitIndex } from \"./RenderFlags\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport { TechniqueId } from \"./TechniqueId\";\r\nimport { MeshData } from \"./MeshData\";\r\nimport { MeshGeometry } from \"./MeshGeometry\";\r\n\r\n/** @internal */\r\nexport function wantMaterials(vf: ViewFlags): boolean {\r\n return vf.materials && RenderMode.SmoothShade === vf.renderMode;\r\n}\r\n\r\nfunction wantLighting(vf: ViewFlags) {\r\n return RenderMode.SmoothShade === vf.renderMode && vf.lighting;\r\n}\r\n\r\n/** @internal */\r\nexport class SurfaceGeometry extends MeshGeometry {\r\n private readonly _buffers: BuffersContainer;\r\n private readonly _indices: BufferHandle;\r\n\r\n public get lutBuffers() { return this._buffers; }\r\n\r\n public static create(mesh: MeshData, indices: VertexIndices): SurfaceGeometry | undefined {\r\n const indexBuffer = BufferHandle.createArrayBuffer(indices.data);\r\n return undefined !== indexBuffer ? new SurfaceGeometry(indexBuffer, indices.length, mesh) : undefined;\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return this._buffers.isDisposed\r\n && this._indices.isDisposed;\r\n }\r\n\r\n public dispose() {\r\n dispose(this._buffers);\r\n dispose(this._indices);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n stats.addSurface(this._indices.bytesUsed);\r\n }\r\n\r\n public get isLit() { return SurfaceType.Lit === this.surfaceType || SurfaceType.TexturedLit === this.surfaceType; }\r\n public get isTexturedType() { return SurfaceType.Textured === this.surfaceType || SurfaceType.TexturedLit === this.surfaceType; }\r\n public get hasTexture() { return this.isTexturedType && undefined !== this.texture; }\r\n public get hasNormalMap() { return this.isLit && this.isTexturedType && undefined !== this.normalMap; }\r\n public get isGlyph() { return this.mesh.isGlyph; }\r\n public override get alwaysRenderTranslucent() { return this.isGlyph; }\r\n public get isTileSection() { return undefined !== this.texture && this.texture.isTileSection; }\r\n public get isClassifier() { return SurfaceType.VolumeClassifier === this.surfaceType; }\r\n public override get supportsThematicDisplay() {\r\n return !this.isGlyph;\r\n }\r\n\r\n public override get allowColorOverride() {\r\n // Text background color should not be overridden by feature symbology overrides - otherwise it becomes unreadable...\r\n // We don't actually know if we have text.\r\n // We do know that text background color uses blanking fill. So do ImageGraphics, so they're also going to forbid overriding their color.\r\n return FillFlags.Blanking !== (this.fillFlags & FillFlags.Blanking);\r\n }\r\n\r\n public override get asSurface() { return this; }\r\n public override get asEdge() { return undefined; }\r\n public override get asSilhouette() { return undefined; }\r\n\r\n protected _draw(numInstances: number, instanceBuffersContainer?: BuffersContainer): void {\r\n const system = System.instance;\r\n\r\n // If we can't write depth in the fragment shader, use polygonOffset to force blanking regions to draw behind.\r\n const offset = RenderOrder.BlankingRegion === this.renderOrder && !system.supportsLogZBuffer;\r\n if (offset) {\r\n system.context.enable(GL.POLYGON_OFFSET_FILL);\r\n system.context.polygonOffset(1.0, 1.0);\r\n }\r\n\r\n const bufs = instanceBuffersContainer !== undefined ? instanceBuffersContainer : this._buffers;\r\n bufs.bind();\r\n system.drawArrays(GL.PrimitiveType.Triangles, 0, this._numIndices, numInstances);\r\n bufs.unbind();\r\n\r\n if (offset)\r\n system.context.disable(GL.POLYGON_OFFSET_FILL);\r\n }\r\n\r\n public override wantMixMonochromeColor(target: Target): boolean {\r\n // Text relies on white-on-white reversal.\r\n return !this.isGlyph && (this.isLitSurface || this.wantTextures(target, this.hasTexture));\r\n }\r\n\r\n public get techniqueId(): TechniqueId { return TechniqueId.Surface; }\r\n public override get isLitSurface() { return this.isLit; }\r\n public override get hasBakedLighting() { return this.mesh.hasBakedLighting; }\r\n public get renderOrder(): RenderOrder {\r\n if (FillFlags.Behind === (this.fillFlags & FillFlags.Behind))\r\n return RenderOrder.BlankingRegion;\r\n\r\n let order = this.isLit ? RenderOrder.LitSurface : RenderOrder.UnlitSurface;\r\n if (this.isPlanar)\r\n order = order | RenderOrder.PlanarBit;\r\n\r\n return order;\r\n }\r\n\r\n public override getColor(target: Target) {\r\n if (FillFlags.Background === (this.fillFlags & FillFlags.Background))\r\n return target.uniforms.style.backgroundColorInfo;\r\n else\r\n return this.colorInfo;\r\n }\r\n\r\n public override getPass(target: Target): Pass {\r\n // Classifiers have a dedicated pass\r\n if (this.isClassifier)\r\n return \"classification\";\r\n\r\n let opaquePass: Pass = this.isPlanar ? \"opaque-planar\" : \"opaque\";\r\n\r\n // When reading pixels, glyphs are always opaque. Otherwise always transparent (for anti-aliasing).\r\n if (this.isGlyph)\r\n return target.isReadPixelsInProgress ? opaquePass : \"translucent\";\r\n\r\n const vf = target.currentViewFlags;\r\n\r\n // When rendering thematic isolines, we need translucency because they have anti-aliasing.\r\n if (target.wantThematicDisplay && this.supportsThematicDisplay && target.uniforms.thematic.wantIsoLines)\r\n return \"translucent\";\r\n\r\n // In wireframe, unless fill is explicitly enabled for planar region, surface does not draw\r\n if (RenderMode.Wireframe === vf.renderMode && !this.mesh.isTextureAlwaysDisplayed) {\r\n const fillFlags = this.fillFlags;\r\n const showFill = FillFlags.Always === (fillFlags & FillFlags.Always) || (vf.fill && FillFlags.ByView === (fillFlags & FillFlags.ByView));\r\n if (!showFill)\r\n return \"none\";\r\n }\r\n\r\n // If transparency disabled by render mode or view flag, always draw opaque.\r\n if (!vf.transparency || RenderMode.SolidFill === vf.renderMode || RenderMode.HiddenLine === vf.renderMode)\r\n return opaquePass;\r\n\r\n // We have 3 sources of alpha: the material, the texture, and the color.\r\n // Base alpha comes from the material if it overrides it; otherwise from the color.\r\n // The texture's alpha is multiplied by the base alpha.\r\n // So we must draw in the translucent pass if the texture has transparency OR the base alpha is less than 1.\r\n let hasAlpha = false;\r\n const mat = wantMaterials(vf) ? this.mesh.materialInfo : undefined;\r\n if (undefined !== mat && mat.overridesAlpha)\r\n hasAlpha = mat.hasTranslucency;\r\n else\r\n hasAlpha = this.getColor(target).hasTranslucency;\r\n\r\n if (!hasAlpha) {\r\n // ###TODO handle TextureTransparency.Mixed; remove Texture.hasTranslucency.\r\n const tex = this.wantTextures(target, true) ? this.texture : undefined;\r\n switch (tex?.transparency) {\r\n case TextureTransparency.Translucent:\r\n hasAlpha = true;\r\n break;\r\n case TextureTransparency.Mixed:\r\n opaquePass = `${opaquePass}-translucent`;\r\n break;\r\n }\r\n }\r\n\r\n return hasAlpha ? \"translucent\" : opaquePass;\r\n }\r\n\r\n protected _wantWoWReversal(target: Target): boolean {\r\n const fillFlags = this.fillFlags;\r\n if (FillFlags.None !== (fillFlags & FillFlags.Background))\r\n return false; // fill color explicitly from background\r\n\r\n if (FillFlags.None !== (fillFlags & FillFlags.Always))\r\n return true; // fill displayed even in wireframe\r\n\r\n const vf = target.currentViewFlags;\r\n if (RenderMode.Wireframe === vf.renderMode || vf.visibleEdges)\r\n return false; // never invert surfaces when edges are displayed\r\n\r\n if (this.isLit && wantLighting(vf))\r\n return false;\r\n\r\n // Don't invert white pixels of textures...\r\n return !this.wantTextures(target, this.hasTexture);\r\n }\r\n\r\n public override get materialInfo(): MaterialInfo | undefined { return this.mesh.materialInfo; }\r\n\r\n public useTexture(params: ShaderProgramParams): boolean {\r\n return this.wantTextures(params.target, this.hasTexture);\r\n }\r\n\r\n public useNormalMap(params: ShaderProgramParams): boolean {\r\n return this.wantNormalMaps(params.target, this.hasNormalMap);\r\n }\r\n\r\n public computeSurfaceFlags(params: ShaderProgramParams, flags: Int32Array): void {\r\n const target = params.target;\r\n const vf = target.currentViewFlags;\r\n\r\n const useMaterial = wantMaterials(vf);\r\n flags[SurfaceBitIndex.IgnoreMaterial] = useMaterial ? 0 : 1;\r\n flags[SurfaceBitIndex.HasMaterialAtlas] = useMaterial && this.hasMaterialAtlas ? 1 : 0;\r\n\r\n flags[SurfaceBitIndex.ApplyLighting] = 0;\r\n flags[SurfaceBitIndex.HasColorAndNormal] = 0;\r\n if (this.isLit) {\r\n flags[SurfaceBitIndex.HasNormals] = 1;\r\n if (wantLighting(vf))\r\n flags[SurfaceBitIndex.ApplyLighting] = 1;\r\n\r\n // Textured meshes store normal in place of color index.\r\n // Untextured lit meshes store normal where textured meshes would store UV coords.\r\n // Tell shader where to find normal.\r\n if (!this.isTexturedType) {\r\n flags[SurfaceBitIndex.HasColorAndNormal] = 1;\r\n }\r\n } else {\r\n flags[SurfaceBitIndex.HasNormals] = 0;\r\n }\r\n\r\n flags[SurfaceBitIndex.HasTexture] = this.useTexture(params) ? 1 : 0;\r\n flags[SurfaceBitIndex.HasNormalMap] = this.useNormalMap(params) ? 1 : 0;\r\n flags[SurfaceBitIndex.UseConstantLodTextureMapping] = this.mesh.textureUsesConstantLod ? 1 : 0;\r\n flags[SurfaceBitIndex.UseConstantLodNormalMapMapping] = this.mesh.normalMapUsesConstantLod ? 1 : 0;\r\n\r\n // The transparency threshold controls how transparent a surface must be to allow light to pass through; more opaque surfaces cast shadows.\r\n flags[SurfaceBitIndex.TransparencyThreshold] = params.target.isDrawingShadowMap ? 1 : 0;\r\n flags[SurfaceBitIndex.BackgroundFill] = 0;\r\n switch (params.renderPass) {\r\n // NB: We need this for opaque pass due to SolidFill (must compute transparency, discard below threshold, render opaque at or above threshold)\r\n case RenderPass.OpaqueLinear:\r\n case RenderPass.OpaquePlanar:\r\n case RenderPass.OpaqueGeneral:\r\n case RenderPass.Translucent:\r\n case RenderPass.WorldOverlay:\r\n case RenderPass.OpaqueLayers:\r\n case RenderPass.TranslucentLayers:\r\n case RenderPass.OverlayLayers: {\r\n const mode = vf.renderMode;\r\n if (!this.isGlyph && (RenderMode.HiddenLine === mode || RenderMode.SolidFill === mode)) {\r\n flags[SurfaceBitIndex.TransparencyThreshold] = 1;\r\n if (RenderMode.HiddenLine === mode && FillFlags.Always !== (this.fillFlags & FillFlags.Always)) {\r\n // fill flags test for text - doesn't render with bg fill in hidden line mode.\r\n flags[SurfaceBitIndex.BackgroundFill] = 1;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n private constructor(indices: BufferHandle, numIndices: number, mesh: MeshData) {\r\n super(mesh, numIndices);\r\n this._buffers = BuffersContainer.create();\r\n const attrPos = AttributeMap.findAttribute(\"a_pos\", TechniqueId.Surface, false);\r\n assert(undefined !== attrPos);\r\n this._buffers.addBuffer(indices, [BufferParameters.create(attrPos.location, 3, GL.DataType.UnsignedByte, false, 0, 0, false)]);\r\n this._indices = indices;\r\n }\r\n\r\n private wantTextures(target: Target, surfaceTextureExists: boolean): boolean {\r\n if (this.hasScalarAnimation && undefined !== target.analysisTexture)\r\n return true;\r\n\r\n if (!surfaceTextureExists)\r\n return false;\r\n\r\n if (this.mesh.isTextureAlwaysDisplayed)\r\n return true;\r\n\r\n if (this.supportsThematicDisplay && target.wantThematicDisplay)\r\n return false;\r\n\r\n const fill = this.fillFlags;\r\n const flags = target.currentViewFlags;\r\n\r\n // ###TODO need to distinguish between gradient fill and actual textures...\r\n switch (flags.renderMode) {\r\n case RenderMode.SmoothShade:\r\n return flags.textures;\r\n case RenderMode.Wireframe:\r\n return FillFlags.Always === (fill & FillFlags.Always) || (flags.fill && FillFlags.ByView === (fill & FillFlags.ByView));\r\n default:\r\n return FillFlags.Always === (fill & FillFlags.Always);\r\n }\r\n }\r\n\r\n private wantNormalMaps(target: Target, normalMapExists: boolean): boolean {\r\n if (!normalMapExists || !target.displayNormalMaps)\r\n return false;\r\n\r\n const flags = target.currentViewFlags;\r\n\r\n switch (flags.renderMode) {\r\n case RenderMode.SmoothShade:\r\n return flags.textures;\r\n default:\r\n return false;\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CopyStencil.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/CopyStencil.ts"],"names":[],"mappings":"AAIA;;GAEG;AAOH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAiDjD,gBAAgB;AAChB,wBAAgB,sCAAsC,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAqBrG;AAED,gBAAgB;AAChB,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"CopyStencil.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/CopyStencil.ts"],"names":[],"mappings":"AAIA;;GAEG;AAOH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAiDjD,gBAAgB;AAChB,wBAAgB,sCAAsC,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAqBrG;AAED,gBAAgB;AAChB,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CA6BzF;AAED,gBAAgB;AAChB,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAkD5F;AAED,gBAAgB;AAChB,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAoBzF"}
|
|
@@ -88,7 +88,6 @@ export function createVolClassCopyZProgram(context) {
|
|
|
88
88
|
Texture2DHandle.bindSampler(uniform, geom.texture, TextureUnit.Zero);
|
|
89
89
|
});
|
|
90
90
|
});
|
|
91
|
-
frag.addExtension("GL_EXT_frag_depth");
|
|
92
91
|
frag.set(18 /* FragmentShaderComponent.FinalizeDepth */, depthFromTexture);
|
|
93
92
|
builder.vert.headerComment = "//!V! VolClassCopyZ";
|
|
94
93
|
builder.frag.headerComment = "//!F! VolClassCopyZ";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CopyStencil.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/CopyStencil.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { ColorDef, SpatialClassifierInsideDisplay, SpatialClassifierOutsideDisplay } from \"@itwin/core-common\";\r\nimport { BoundaryType, SingleTexturedViewportQuadGeometry, VolumeClassifierGeometry } from \"../CachedGeometry\";\r\nimport { FloatRgb, FloatRgba } from \"../FloatRGBA\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ShaderBuilder, VariableType } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { Texture2DHandle } from \"../Texture\";\r\nimport { assignFragColor } from \"./Fragment\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\n\r\nconst computehiliteColor = \"return vec4(u_hilite_color.rgb, 1.0);\";\r\n\r\nconst computeSetBlendColor = \"return u_blend_color;\";\r\n\r\nconst computeBlendTextureColor = \"return TEXTURE(u_blendTexture, v_texCoord);\";\r\n\r\nconst computeTexCoord = \"v_texCoord = (rawPosition.xy + 1.0) * 0.5;\";\r\n\r\nconst checkDiscardBackgroundByZ = `\r\n if (u_boundaryType == kBoundaryType_Out)\r\n return TEXTURE(u_depthTexture, v_texCoord).r == 1.0;\r\n return false;\r\n`;\r\n\r\nconst depthFromTexture = \"return TEXTURE(u_depthTexture, v_texCoord).r;\";\r\n\r\nconst scratchColor = FloatRgba.fromColorDef(ColorDef.white);\r\n\r\n/** @internal */\r\nfunction addBoundaryTypeConstants(builder: ShaderBuilder): void {\r\n // NB: These are the bit positions of each flag in OvrFlags enum - not the flag values\r\n builder.addConstant(\"kBoundaryType_Out\", VariableType.Int, \"0\");\r\n builder.addConstant(\"kBoundaryType_In\", VariableType.Int, \"1\");\r\n builder.addConstant(\"kBoundaryType_Selected\", VariableType.Int, \"2\");\r\n}\r\n\r\n/** @internal */\r\nfunction setScratchColor(display: number, hilite: FloatRgb, hAlpha: number): void {\r\n switch (display) {\r\n case SpatialClassifierOutsideDisplay.Dimmed:\r\n scratchColor.set(0.0, 0.0, 0.0, 0.3);\r\n break;\r\n case SpatialClassifierOutsideDisplay.Off:\r\n scratchColor.set(0.0, 0.0, 0.0, 0.8);\r\n break;\r\n case SpatialClassifierOutsideDisplay.On:\r\n scratchColor.set(0.0, 0.0, 0.0, 0.0);\r\n break;\r\n default: // Hilite or ByElementColor (though ByElementColor should never use this shader)\r\n scratchColor.set(hilite.red, hilite.green, hilite.blue, hAlpha);\r\n break;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createVolClassColorUsingStencilProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(false);\r\n const frag = builder.frag;\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computehiliteColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n frag.addUniform(\"u_hilite_color\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_hilite_color\", (uniform, params) => {\r\n const useLighting = params.geometry.getFlashMode(params);\r\n if (useLighting) {\r\n const hiliteColor = params.target.uniforms.hilite.hiliteColor;\r\n scratchColor.set(hiliteColor.red, hiliteColor.green, hiliteColor.blue, 1.0);\r\n } else\r\n scratchColor.set(1.0, 1.0, 1.0, 0.0);\r\n scratchColor.bind(uniform);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! VolClassColorUsingStencil\";\r\n builder.frag.headerComment = \"//!F! VolClassColorUsingStencil\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n/** @internal */\r\nexport function createVolClassCopyZProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n\r\n builder.addInlineComputedVarying(\"v_texCoord\", VariableType.Vec2, computeTexCoord); // TODO: I think this is not necessary because it's already added from the create above\r\n\r\n const frag = builder.frag;\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSetBlendColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_blend_color\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_blend_color\", (uniform, _params) => {\r\n scratchColor.set(0.0, 0.0, 0.0, 0.0);\r\n scratchColor.bind(uniform);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as SingleTexturedViewportQuadGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.texture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.addExtension(\"GL_EXT_frag_depth\");\r\n frag.set(FragmentShaderComponent.FinalizeDepth, depthFromTexture);\r\n\r\n builder.vert.headerComment = \"//!V! VolClassCopyZ\";\r\n builder.frag.headerComment = \"//!F! VolClassCopyZ\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n/** @internal */\r\nexport function createVolClassSetBlendProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n\r\n builder.addInlineComputedVarying(\"v_texCoord\", VariableType.Vec2, computeTexCoord);\r\n\r\n const frag = builder.frag;\r\n addBoundaryTypeConstants(frag);\r\n frag.set(FragmentShaderComponent.CheckForEarlyDiscard, checkDiscardBackgroundByZ);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSetBlendColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_boundaryType\", VariableType.Int, (prog) => {\r\n prog.addGraphicUniform(\"u_boundaryType\", (uniform, params) => {\r\n const geom = params.geometry as VolumeClassifierGeometry;\r\n uniform.setUniform1i(geom.boundaryType);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_blend_color\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_blend_color\", (uniform, params) => {\r\n const geom = params.geometry as VolumeClassifierGeometry;\r\n const hiliteColor = params.target.uniforms.hilite.hiliteColor;\r\n const hiliteAlpha = params.target.uniforms.hilite.hiliteSettings.visibleRatio;\r\n switch (geom.boundaryType) {\r\n case BoundaryType.Outside:\r\n setScratchColor(params.target.activeVolumeClassifierProps!.flags.outside, hiliteColor, hiliteAlpha);\r\n break;\r\n case BoundaryType.Inside:\r\n setScratchColor(params.target.activeVolumeClassifierProps!.flags.inside, hiliteColor, hiliteAlpha);\r\n break;\r\n case BoundaryType.Selected:\r\n // setScratchColor(params.target.activeVolumeClassifierProps!.flags.selected, hiliteColor, hiliteAlpha);\r\n setScratchColor(SpatialClassifierInsideDisplay.Hilite, hiliteColor, hiliteAlpha); // option for how to display selected classifiers has been removed, always just hilite\r\n break;\r\n }\r\n scratchColor.bind(uniform);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as VolumeClassifierGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.texture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! VolClassSetBlend\";\r\n builder.frag.headerComment = \"//!F! VolClassSetBlend\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n/** @internal */\r\nexport function createVolClassBlendProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n\r\n builder.addInlineComputedVarying(\"v_texCoord\", VariableType.Vec2, computeTexCoord);\r\n\r\n const frag = builder.frag;\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeBlendTextureColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_blendTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_blendTexture\", (uniform, params) => {\r\n const geom = params.geometry as SingleTexturedViewportQuadGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.texture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! VolClassBlend\";\r\n builder.frag.headerComment = \"//!F! VolClassBlend\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"CopyStencil.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/CopyStencil.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { ColorDef, SpatialClassifierInsideDisplay, SpatialClassifierOutsideDisplay } from \"@itwin/core-common\";\r\nimport { BoundaryType, SingleTexturedViewportQuadGeometry, VolumeClassifierGeometry } from \"../CachedGeometry\";\r\nimport { FloatRgb, FloatRgba } from \"../FloatRGBA\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ShaderBuilder, VariableType } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { Texture2DHandle } from \"../Texture\";\r\nimport { assignFragColor } from \"./Fragment\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\n\r\nconst computehiliteColor = \"return vec4(u_hilite_color.rgb, 1.0);\";\r\n\r\nconst computeSetBlendColor = \"return u_blend_color;\";\r\n\r\nconst computeBlendTextureColor = \"return TEXTURE(u_blendTexture, v_texCoord);\";\r\n\r\nconst computeTexCoord = \"v_texCoord = (rawPosition.xy + 1.0) * 0.5;\";\r\n\r\nconst checkDiscardBackgroundByZ = `\r\n if (u_boundaryType == kBoundaryType_Out)\r\n return TEXTURE(u_depthTexture, v_texCoord).r == 1.0;\r\n return false;\r\n`;\r\n\r\nconst depthFromTexture = \"return TEXTURE(u_depthTexture, v_texCoord).r;\";\r\n\r\nconst scratchColor = FloatRgba.fromColorDef(ColorDef.white);\r\n\r\n/** @internal */\r\nfunction addBoundaryTypeConstants(builder: ShaderBuilder): void {\r\n // NB: These are the bit positions of each flag in OvrFlags enum - not the flag values\r\n builder.addConstant(\"kBoundaryType_Out\", VariableType.Int, \"0\");\r\n builder.addConstant(\"kBoundaryType_In\", VariableType.Int, \"1\");\r\n builder.addConstant(\"kBoundaryType_Selected\", VariableType.Int, \"2\");\r\n}\r\n\r\n/** @internal */\r\nfunction setScratchColor(display: number, hilite: FloatRgb, hAlpha: number): void {\r\n switch (display) {\r\n case SpatialClassifierOutsideDisplay.Dimmed:\r\n scratchColor.set(0.0, 0.0, 0.0, 0.3);\r\n break;\r\n case SpatialClassifierOutsideDisplay.Off:\r\n scratchColor.set(0.0, 0.0, 0.0, 0.8);\r\n break;\r\n case SpatialClassifierOutsideDisplay.On:\r\n scratchColor.set(0.0, 0.0, 0.0, 0.0);\r\n break;\r\n default: // Hilite or ByElementColor (though ByElementColor should never use this shader)\r\n scratchColor.set(hilite.red, hilite.green, hilite.blue, hAlpha);\r\n break;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createVolClassColorUsingStencilProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(false);\r\n const frag = builder.frag;\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computehiliteColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n frag.addUniform(\"u_hilite_color\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_hilite_color\", (uniform, params) => {\r\n const useLighting = params.geometry.getFlashMode(params);\r\n if (useLighting) {\r\n const hiliteColor = params.target.uniforms.hilite.hiliteColor;\r\n scratchColor.set(hiliteColor.red, hiliteColor.green, hiliteColor.blue, 1.0);\r\n } else\r\n scratchColor.set(1.0, 1.0, 1.0, 0.0);\r\n scratchColor.bind(uniform);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! VolClassColorUsingStencil\";\r\n builder.frag.headerComment = \"//!F! VolClassColorUsingStencil\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n/** @internal */\r\nexport function createVolClassCopyZProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n\r\n builder.addInlineComputedVarying(\"v_texCoord\", VariableType.Vec2, computeTexCoord); // TODO: I think this is not necessary because it's already added from the create above\r\n\r\n const frag = builder.frag;\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSetBlendColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_blend_color\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_blend_color\", (uniform, _params) => {\r\n scratchColor.set(0.0, 0.0, 0.0, 0.0);\r\n scratchColor.bind(uniform);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as SingleTexturedViewportQuadGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.texture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.set(FragmentShaderComponent.FinalizeDepth, depthFromTexture);\r\n\r\n builder.vert.headerComment = \"//!V! VolClassCopyZ\";\r\n builder.frag.headerComment = \"//!F! VolClassCopyZ\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n/** @internal */\r\nexport function createVolClassSetBlendProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n\r\n builder.addInlineComputedVarying(\"v_texCoord\", VariableType.Vec2, computeTexCoord);\r\n\r\n const frag = builder.frag;\r\n addBoundaryTypeConstants(frag);\r\n frag.set(FragmentShaderComponent.CheckForEarlyDiscard, checkDiscardBackgroundByZ);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSetBlendColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_boundaryType\", VariableType.Int, (prog) => {\r\n prog.addGraphicUniform(\"u_boundaryType\", (uniform, params) => {\r\n const geom = params.geometry as VolumeClassifierGeometry;\r\n uniform.setUniform1i(geom.boundaryType);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_blend_color\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_blend_color\", (uniform, params) => {\r\n const geom = params.geometry as VolumeClassifierGeometry;\r\n const hiliteColor = params.target.uniforms.hilite.hiliteColor;\r\n const hiliteAlpha = params.target.uniforms.hilite.hiliteSettings.visibleRatio;\r\n switch (geom.boundaryType) {\r\n case BoundaryType.Outside:\r\n setScratchColor(params.target.activeVolumeClassifierProps!.flags.outside, hiliteColor, hiliteAlpha);\r\n break;\r\n case BoundaryType.Inside:\r\n setScratchColor(params.target.activeVolumeClassifierProps!.flags.inside, hiliteColor, hiliteAlpha);\r\n break;\r\n case BoundaryType.Selected:\r\n // setScratchColor(params.target.activeVolumeClassifierProps!.flags.selected, hiliteColor, hiliteAlpha);\r\n setScratchColor(SpatialClassifierInsideDisplay.Hilite, hiliteColor, hiliteAlpha); // option for how to display selected classifiers has been removed, always just hilite\r\n break;\r\n }\r\n scratchColor.bind(uniform);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as VolumeClassifierGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.texture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! VolClassSetBlend\";\r\n builder.frag.headerComment = \"//!F! VolClassSetBlend\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n/** @internal */\r\nexport function createVolClassBlendProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n\r\n builder.addInlineComputedVarying(\"v_texCoord\", VariableType.Vec2, computeTexCoord);\r\n\r\n const frag = builder.frag;\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeBlendTextureColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_blendTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_blendTexture\", (uniform, params) => {\r\n const geom = params.geometry as SingleTexturedViewportQuadGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.texture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! VolClassBlend\";\r\n builder.frag.headerComment = \"//!F! VolClassBlend\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Surface.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Surface.ts"],"names":[],"mappings":"AAIA;;GAEG;AAMH,OAAO,EAC2C,cAAc,EAC/D,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACQ,UAAU,EAAE,YAAY,EAAE,WAAW,EAAgB,UAAU,EAAE,YAAY,EAAE,cAAc,EAC3G,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"Surface.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Surface.ts"],"names":[],"mappings":"AAIA;;GAEG;AAMH,OAAO,EAC2C,cAAc,EAC/D,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACQ,UAAU,EAAE,YAAY,EAAE,WAAW,EAAgB,UAAU,EAAE,YAAY,EAAE,cAAc,EAC3G,MAAM,mBAAmB,CAAC;AAkR3B,gBAAgB;AAChB,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,GAAG,cAAc,CAc5H;AAsED,gBAAgB;AAChB,eAAO,MAAM,eAAe,+SAW3B,CAAC;AAgHF,gBAAgB;AAChB,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO,QAoBhH;AAyCD,gBAAgB;AAChB,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,QAsDzI;AAED,eAAO,MAAM,wBAAwB,mWAQpC,CAAC;AA+BF,gBAAgB;AAChB,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CA4G1E;AAED,wBAAgB,oCAAoC,CAAC,OAAO,EAAE,cAAc,QAgB3E"}
|
|
@@ -28,10 +28,45 @@ import { addTranslucency } from "./Translucency";
|
|
|
28
28
|
import { addModelViewMatrix, addNormalMatrix, addProjectionMatrix } from "./Vertex";
|
|
29
29
|
import { wantMaterials } from "../SurfaceGeometry";
|
|
30
30
|
import { addWiremesh } from "./Wiremesh";
|
|
31
|
+
import { Npc } from "@itwin/core-common";
|
|
32
|
+
const constantLodTextureLookup = `
|
|
33
|
+
vec4 constantLodTextureLookup(sampler2D textureSampler) {
|
|
34
|
+
float logDepth = log2(v_uvCustom.z);
|
|
35
|
+
float f = fract(logDepth);
|
|
36
|
+
float p = floor(logDepth);
|
|
37
|
+
// When p changes, both tc1 and tc2 jumped by a power of 2 at that transition (and f goes from ~1 to 0).
|
|
38
|
+
// This caused a line to show up with incorrect tex coords, we believe due to a problem with the derivative
|
|
39
|
+
// that is auto calculated on the tex coords for the mip-map. The below approach attempts to "smooth"
|
|
40
|
+
// the transition of the coord in use at the transition by only changing the coord that is not in use
|
|
41
|
+
// (but by 2 powers of 2) and switching the mix selector to account for it. It does this by using whether
|
|
42
|
+
// p is odd or even to select which way it is going, so it alternates at the boundaries. This fixes the
|
|
43
|
+
// line problem.
|
|
44
|
+
float p1, p2;
|
|
45
|
+
if (0u == (uint(p) & 1u)) { // p is even
|
|
46
|
+
p1 = p;
|
|
47
|
+
p2 = p + 1.0;
|
|
48
|
+
} else { // p is odd
|
|
49
|
+
p1 = p + 1.0;
|
|
50
|
+
p2 = p;
|
|
51
|
+
f = 1.0 - f;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
vec2 tc1 = v_uvCustom.xy / clamp(pow(2.0, p1), float(u_constantLodFParams.x), float(u_constantLodFParams.y)) * u_constantLodFParams.z;
|
|
55
|
+
vec2 tc2 = v_uvCustom.xy / clamp(pow(2.0, p2), float(u_constantLodFParams.x), float(u_constantLodFParams.y)) * u_constantLodFParams.z;
|
|
56
|
+
return mix(TEXTURE(textureSampler, tc1), TEXTURE(textureSampler, tc2), f);
|
|
57
|
+
}
|
|
58
|
+
`;
|
|
31
59
|
// NB: Textures do not contain pre-multiplied alpha.
|
|
32
60
|
const sampleSurfaceTexture = `
|
|
33
61
|
vec4 sampleSurfaceTexture() {
|
|
34
|
-
|
|
62
|
+
vec4 clr;
|
|
63
|
+
if (!isSurfaceBitSet(kSurfaceBit_HasTexture))
|
|
64
|
+
clr = vec4(1.0, 1.0, 1.0, 1.0);
|
|
65
|
+
else if (u_surfaceFlags[kSurfaceBitIndex_UseConstantLodTextureMapping])
|
|
66
|
+
clr = constantLodTextureLookup(s_texture);
|
|
67
|
+
else
|
|
68
|
+
clr = TEXTURE(s_texture, v_texCoord);
|
|
69
|
+
return clr;
|
|
35
70
|
}
|
|
36
71
|
`;
|
|
37
72
|
const applyMaterialColor = `
|
|
@@ -181,6 +216,10 @@ const adjustEyeSpace = `
|
|
|
181
216
|
if (kRenderOrder_BlankingRegion == u_renderOrder)
|
|
182
217
|
v_eyeSpace.z -= blankingRegionOffset * (u_frustum.y - u_frustum.x);
|
|
183
218
|
`;
|
|
219
|
+
const computeConstantLodUvCustom = `
|
|
220
|
+
vec2 worldpos = (u_modelToWorld * vec4(rawPos.xyz, 0.0)).xy;
|
|
221
|
+
v_uvCustom = vec3((u_constantLodVParams.xy + worldpos) * vec2(1.0, -1.0), kFrustumType_Perspective == u_frustum.z ? -v_eyeSpace.z : u_constantLodVParams.z);
|
|
222
|
+
`;
|
|
184
223
|
const computePositionPostlude = `
|
|
185
224
|
return u_proj * pos;
|
|
186
225
|
`;
|
|
@@ -195,17 +234,17 @@ function createCommon(isInstanced, animated, shadowable, isHiliter, positionType
|
|
|
195
234
|
addSolarShadowMap(builder);
|
|
196
235
|
addProjectionMatrix(vert);
|
|
197
236
|
addModelViewMatrix(vert);
|
|
198
|
-
let computePosition;
|
|
199
|
-
if (isHiliter
|
|
200
|
-
computePosition = computePositionPrelude + computePositionPostlude;
|
|
201
|
-
}
|
|
202
|
-
else {
|
|
237
|
+
let computePosition = computePositionPrelude;
|
|
238
|
+
if (!isHiliter || System.instance.supportsLogZBuffer) {
|
|
203
239
|
addFrustum(builder);
|
|
204
240
|
addRenderOrder(builder.vert);
|
|
205
241
|
addRenderOrderConstants(builder.vert);
|
|
206
242
|
builder.addVarying("v_eyeSpace", 4 /* VariableType.Vec3 */);
|
|
207
|
-
computePosition
|
|
243
|
+
computePosition += adjustEyeSpace;
|
|
208
244
|
}
|
|
245
|
+
if (!isHiliter)
|
|
246
|
+
computePosition += computeConstantLodUvCustom;
|
|
247
|
+
computePosition += computePositionPostlude;
|
|
209
248
|
vert.set(10 /* VertexShaderComponent.ComputePosition */, computePosition);
|
|
210
249
|
return builder;
|
|
211
250
|
}
|
|
@@ -239,6 +278,8 @@ function addSurfaceFlagsLookup(builder) {
|
|
|
239
278
|
builder.addConstant("kSurfaceBitIndex_OverrideRgb", 1 /* VariableType.Int */, 7 /* SurfaceBitIndex.OverrideRgb */.toString());
|
|
240
279
|
builder.addConstant("kSurfaceBitIndex_HasNormalMap", 1 /* VariableType.Int */, 8 /* SurfaceBitIndex.HasNormalMap */.toString());
|
|
241
280
|
builder.addConstant("kSurfaceBitIndex_HasMaterialAtlas", 1 /* VariableType.Int */, 9 /* SurfaceBitIndex.HasMaterialAtlas */.toString());
|
|
281
|
+
builder.addConstant("kSurfaceBitIndex_UseConstantLodTextureMapping", 1 /* VariableType.Int */, 10 /* SurfaceBitIndex.UseConstantLodTextureMapping */.toString());
|
|
282
|
+
builder.addConstant("kSurfaceBitIndex_UseConstantLodNormalMapMapping", 1 /* VariableType.Int */, 11 /* SurfaceBitIndex.UseConstantLodNormalMapMapping */.toString());
|
|
242
283
|
// Surface flags which get modified in vertex shader are still passed to fragment shader as a single float & are thus
|
|
243
284
|
// used differently there & so require different constants. Unused constants are commented out.
|
|
244
285
|
builder.addBitFlagConstant("kSurfaceBit_HasTexture", 0 /* SurfaceBitIndex.HasTexture */);
|
|
@@ -323,7 +364,11 @@ const finalizeNormalNormalMap = `
|
|
|
323
364
|
vec3 biTangent = cross (normal, tangent);
|
|
324
365
|
if (flip)
|
|
325
366
|
biTangent = -biTangent;
|
|
326
|
-
vec3 normM
|
|
367
|
+
vec3 normM;
|
|
368
|
+
if (u_surfaceFlags[kSurfaceBitIndex_UseConstantLodNormalMapMapping])
|
|
369
|
+
normM = constantLodTextureLookup(s_normalMap).xyz;
|
|
370
|
+
else
|
|
371
|
+
normM = TEXTURE(s_normalMap, v_texCoord).xyz;
|
|
327
372
|
if (length (normM) > 0.0001) { // check for empty normal texture
|
|
328
373
|
normM = (normM - 0.5) * 2.0;
|
|
329
374
|
normM = normalize (normM);
|
|
@@ -387,7 +432,7 @@ const computeBaseColor = `
|
|
|
387
432
|
surfaceColor.rgb = (u_reverseWhiteOnWhite && isAlmostWhite.r && isAlmostWhite.g && isAlmostWhite.b ? vec3(0.0, 0.0, 0.0) : surfaceColor.rgb);
|
|
388
433
|
return vec4(surfaceColor.rgb * g_surfaceTexel.rgb, g_surfaceTexel.a);
|
|
389
434
|
`;
|
|
390
|
-
const surfaceFlagArray = new Int32Array(
|
|
435
|
+
const surfaceFlagArray = new Int32Array(12 /* SurfaceBitIndex.Count */);
|
|
391
436
|
/** @internal */
|
|
392
437
|
export function addSurfaceFlags(builder, withFeatureOverrides, withFeatureColor) {
|
|
393
438
|
addSurfaceFlagsLookup(builder.vert);
|
|
@@ -398,7 +443,7 @@ export function addSurfaceFlags(builder, withFeatureOverrides, withFeatureColor)
|
|
|
398
443
|
compute += returnSurfaceFlags;
|
|
399
444
|
builder.addFunctionComputedVarying("v_surfaceFlags", 2 /* VariableType.Float */, "computeSurfaceFlags", compute);
|
|
400
445
|
builder.frag.addInitializer("surfaceFlags = uint(floor(v_surfaceFlags + 0.5));");
|
|
401
|
-
builder.addUniformArray("u_surfaceFlags", 0 /* VariableType.Boolean */,
|
|
446
|
+
builder.addUniformArray("u_surfaceFlags", 0 /* VariableType.Boolean */, 12 /* SurfaceBitIndex.Count */, (prog) => {
|
|
402
447
|
prog.addGraphicUniform("u_surfaceFlags", (uniform, params) => {
|
|
403
448
|
assert(undefined !== params.geometry.asSurface);
|
|
404
449
|
const mesh = params.geometry.asSurface;
|
|
@@ -416,17 +461,19 @@ function addNormal(builder, animated) {
|
|
|
416
461
|
builder.frag.addGlobal("g_normal", 4 /* VariableType.Vec3 */);
|
|
417
462
|
let finalizeNormal = finalizeNormalPrelude;
|
|
418
463
|
finalizeNormal += finalizeNormalNormalMap;
|
|
464
|
+
builder.frag.addFunction(constantLodTextureLookup);
|
|
419
465
|
builder.frag.addUniform("u_normalMapScale", 2 /* VariableType.Float */, (prog) => {
|
|
420
466
|
prog.addGraphicUniform("u_normalMapScale", (uniform, params) => {
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
undefined !==
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
467
|
+
if (undefined !== params.geometry.materialInfo && !params.geometry.materialInfo.isAtlas) {
|
|
468
|
+
const normalMapParams = params.geometry.materialInfo.textureMapping?.normalMapParams;
|
|
469
|
+
if (undefined !== normalMapParams) {
|
|
470
|
+
let normalMapScale = 1.0;
|
|
471
|
+
normalMapScale = normalMapParams.scale ?? 1.0;
|
|
472
|
+
if (normalMapParams.greenUp)
|
|
473
|
+
normalMapScale = -normalMapScale;
|
|
474
|
+
uniform.setUniform1f(normalMapScale);
|
|
475
|
+
}
|
|
428
476
|
}
|
|
429
|
-
uniform.setUniform1f(normalMapScale);
|
|
430
477
|
});
|
|
431
478
|
});
|
|
432
479
|
finalizeNormal += finalizeNormalPostlude;
|
|
@@ -462,7 +509,6 @@ export function addTexture(builder, animated, isThematic, isPointCloud, isHilite
|
|
|
462
509
|
}
|
|
463
510
|
});
|
|
464
511
|
});
|
|
465
|
-
builder.frag.addFunction(sampleSurfaceTexture);
|
|
466
512
|
}
|
|
467
513
|
builder.frag.addUniform("s_texture", 8 /* VariableType.Sampler2D */, (prog) => {
|
|
468
514
|
prog.addGraphicUniform("s_texture", (uniform, params) => {
|
|
@@ -541,8 +587,17 @@ export function createSurfaceBuilder(flags) {
|
|
|
541
587
|
opts &= ~16 /* FeatureSymbologyOptions.Alpha */;
|
|
542
588
|
addColorPlanarClassifier(builder, flags.isTranslucent, flags.isThematic);
|
|
543
589
|
}
|
|
544
|
-
if (flags.isThematic)
|
|
590
|
+
if (flags.isThematic) {
|
|
545
591
|
addThematicDisplay(builder);
|
|
592
|
+
}
|
|
593
|
+
else {
|
|
594
|
+
builder.vert.addUniform("u_modelToWorld", 7 /* VariableType.Mat4 */, (prog) => {
|
|
595
|
+
prog.addGraphicUniform("u_modelToWorld", (uniform, params) => {
|
|
596
|
+
if (undefined !== params.geometry.asSurface?.mesh.constantLodVParams)
|
|
597
|
+
params.target.uniforms.branch.bindModelToWorldTransform(uniform, params.geometry, false);
|
|
598
|
+
});
|
|
599
|
+
});
|
|
600
|
+
}
|
|
546
601
|
addFeatureSymbology(builder, feat, opts);
|
|
547
602
|
addSurfaceFlags(builder, 2 /* FeatureMode.Overrides */ === feat, true);
|
|
548
603
|
addSurfaceDiscard(builder, flags);
|
|
@@ -586,6 +641,25 @@ export function createSurfaceBuilder(flags) {
|
|
|
586
641
|
addAltPickBufferOutputs(builder.frag);
|
|
587
642
|
}
|
|
588
643
|
}
|
|
644
|
+
builder.addVarying("v_uvCustom", 4 /* VariableType.Vec3 */);
|
|
645
|
+
builder.vert.addUniform("u_constantLodVParams", 4 /* VariableType.Vec3 */, (prog) => {
|
|
646
|
+
prog.addGraphicUniform("u_constantLodVParams", (uniform, params) => {
|
|
647
|
+
const vParams = params.geometry.asSurface?.mesh.constantLodVParams;
|
|
648
|
+
if (undefined !== vParams) {
|
|
649
|
+
vParams[2] = params.target.planFrustum.points[Npc.LeftTopRear].distance(params.target.planFrustum.points[Npc.RightTopRear]);
|
|
650
|
+
uniform.setUniform3fv(vParams);
|
|
651
|
+
}
|
|
652
|
+
});
|
|
653
|
+
});
|
|
654
|
+
builder.frag.addUniform("u_constantLodFParams", 4 /* VariableType.Vec3 */, (prog) => {
|
|
655
|
+
prog.addGraphicUniform("u_constantLodFParams", (uniform, params) => {
|
|
656
|
+
const fParams = params.geometry.asSurface?.mesh.constantLodFParams;
|
|
657
|
+
if (undefined !== fParams)
|
|
658
|
+
uniform.setUniform3fv(fParams);
|
|
659
|
+
});
|
|
660
|
+
});
|
|
661
|
+
builder.frag.addFunction(constantLodTextureLookup);
|
|
662
|
+
builder.frag.addFunction(sampleSurfaceTexture);
|
|
589
663
|
builder.frag.addGlobal("g_surfaceTexel", 5 /* VariableType.Vec4 */);
|
|
590
664
|
builder.frag.set(1 /* FragmentShaderComponent.ComputeBaseColor */, (flags.isThematic === 0 /* IsThematic.No */) ? computeBaseColor : "return getSurfaceColor();");
|
|
591
665
|
if (flags.isClassified)
|