From 4e038031c1f8c94b520a95fce6403e4888b64d36 Mon Sep 17 00:00:00 2001 From: Paul Connelly <22944042+pmconne@users.noreply.github.com> Date: Tue, 8 Mar 2022 09:58:02 -0500 Subject: [PATCH 1/2] u_texturesPresent is a lie. --- core/frontend/src/render/webgl/RealityMesh.ts | 2 ++ core/frontend/src/render/webgl/glsl/RealityMesh.ts | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/core/frontend/src/render/webgl/RealityMesh.ts b/core/frontend/src/render/webgl/RealityMesh.ts index 66b589674149..1e562d612512 100644 --- a/core/frontend/src/render/webgl/RealityMesh.ts +++ b/core/frontend/src/render/webgl/RealityMesh.ts @@ -218,6 +218,7 @@ export class RealityMeshGeometryParams extends IndexedGeometryParams { /** @internal */ export class RealityMeshGeometry extends IndexedGeometry implements IDisposable, RenderMemory.Consumer { + public readonly hasTextures: boolean; public override get asRealityMesh(): RealityMeshGeometry | undefined { return this; } public override get isDisposed(): boolean { return this._realityMeshParams.isDisposed; } public get uvQParams() { return this._realityMeshParams.uvParams.params; } @@ -228,6 +229,7 @@ export class RealityMeshGeometry extends IndexedGeometry implements IDisposable, private constructor(private _realityMeshParams: RealityMeshGeometryParams, public textureParams: RealityTextureParams | undefined, private readonly _transform: Transform | undefined, public readonly baseColor: ColorDef | undefined, private _baseIsTransparent: boolean, private _isTerrain: boolean) { super(_realityMeshParams); + this.hasTextures = undefined !== textureParams && textureParams.params.some((x) => undefined !== x.texture); } public override dispose() { diff --git a/core/frontend/src/render/webgl/glsl/RealityMesh.ts b/core/frontend/src/render/webgl/glsl/RealityMesh.ts index 2a7022297764..b48f885df6c8 100644 --- a/core/frontend/src/render/webgl/glsl/RealityMesh.ts +++ b/core/frontend/src/render/webgl/glsl/RealityMesh.ts @@ -130,8 +130,7 @@ function addTextures(builder: ProgramBuilder, maxTexturesPerMesh: number) { builder.frag.addUniform("u_texturesPresent", VariableType.Boolean, (program) => { program.addGraphicUniform("u_texturesPresent", (uniform, params) => { - const textureCount = params.geometry.asRealityMesh!.textureParams?.params.length; - uniform.setUniform1i(textureCount ? 1 : 0); + uniform.setUniform1i(params.geometry.asRealityMesh!.hasTextures ? 1 : 0); }); }); From a6ca1cf1bab2bc6eb020a17af42f4f3587d05e20 Mon Sep 17 00:00:00 2001 From: Paul Connelly <22944042+pmconne@users.noreply.github.com> Date: Tue, 8 Mar 2022 09:58:02 -0500 Subject: [PATCH 2/2] u_texturesPresent is a lie. --- .../fix-background-base-color_2022-03-08-15-02.json | 10 ++++++++++ core/frontend/src/render/webgl/RealityMesh.ts | 2 ++ core/frontend/src/render/webgl/glsl/RealityMesh.ts | 3 +-- 3 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 common/changes/@itwin/core-frontend/fix-background-base-color_2022-03-08-15-02.json diff --git a/common/changes/@itwin/core-frontend/fix-background-base-color_2022-03-08-15-02.json b/common/changes/@itwin/core-frontend/fix-background-base-color_2022-03-08-15-02.json new file mode 100644 index 000000000000..88adbed5edb6 --- /dev/null +++ b/common/changes/@itwin/core-frontend/fix-background-base-color_2022-03-08-15-02.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@itwin/core-frontend", + "comment": "Fix regression that caused solid color background map base to fail to display.", + "type": "none" + } + ], + "packageName": "@itwin/core-frontend" +} \ No newline at end of file diff --git a/core/frontend/src/render/webgl/RealityMesh.ts b/core/frontend/src/render/webgl/RealityMesh.ts index 66b589674149..1e562d612512 100644 --- a/core/frontend/src/render/webgl/RealityMesh.ts +++ b/core/frontend/src/render/webgl/RealityMesh.ts @@ -218,6 +218,7 @@ export class RealityMeshGeometryParams extends IndexedGeometryParams { /** @internal */ export class RealityMeshGeometry extends IndexedGeometry implements IDisposable, RenderMemory.Consumer { + public readonly hasTextures: boolean; public override get asRealityMesh(): RealityMeshGeometry | undefined { return this; } public override get isDisposed(): boolean { return this._realityMeshParams.isDisposed; } public get uvQParams() { return this._realityMeshParams.uvParams.params; } @@ -228,6 +229,7 @@ export class RealityMeshGeometry extends IndexedGeometry implements IDisposable, private constructor(private _realityMeshParams: RealityMeshGeometryParams, public textureParams: RealityTextureParams | undefined, private readonly _transform: Transform | undefined, public readonly baseColor: ColorDef | undefined, private _baseIsTransparent: boolean, private _isTerrain: boolean) { super(_realityMeshParams); + this.hasTextures = undefined !== textureParams && textureParams.params.some((x) => undefined !== x.texture); } public override dispose() { diff --git a/core/frontend/src/render/webgl/glsl/RealityMesh.ts b/core/frontend/src/render/webgl/glsl/RealityMesh.ts index 2a7022297764..b48f885df6c8 100644 --- a/core/frontend/src/render/webgl/glsl/RealityMesh.ts +++ b/core/frontend/src/render/webgl/glsl/RealityMesh.ts @@ -130,8 +130,7 @@ function addTextures(builder: ProgramBuilder, maxTexturesPerMesh: number) { builder.frag.addUniform("u_texturesPresent", VariableType.Boolean, (program) => { program.addGraphicUniform("u_texturesPresent", (uniform, params) => { - const textureCount = params.geometry.asRealityMesh!.textureParams?.params.length; - uniform.setUniform1i(textureCount ? 1 : 0); + uniform.setUniform1i(params.geometry.asRealityMesh!.hasTextures ? 1 : 0); }); });