import { AlphaMode, AlphaPipelineStage, BlendingState, ModelAlphaOptions, Pass, ShaderBuilder, } from "../../../Source/Cesium.js"; describe("Scene/ModelExperimental/AlphaPipelineStage", function () { var mockModel = { opaquePass: Pass.CESIUM_3D_TILE, }; var mockPrimitive = {}; var mockFrameState = {}; it("Defaults to the model's pass if not specified", function () { var renderResources = { model: mockModel, shaderBuilder: new ShaderBuilder(), alphaOptions: new ModelAlphaOptions(), uniformMap: {}, renderStateOptions: {}, }; expect(renderResources.alphaOptions.pass).not.toBeDefined(); AlphaPipelineStage.process(renderResources, mockPrimitive, mockFrameState); expect(renderResources.alphaOptions.pass).toBe(mockModel.opaquePass); }); it("handles alphaMode = OPAQUE", function () { var shaderBuilder = new ShaderBuilder(); var renderResources = { model: mockModel, shaderBuilder: shaderBuilder, alphaOptions: new ModelAlphaOptions(), uniformMap: {}, renderStateOptions: {}, }; renderResources.alphaOptions.pass = Pass.OPAQUE; renderResources.alphaOptions.alphaMode = AlphaMode.OPAQUE; AlphaPipelineStage.process(renderResources, mockPrimitive, mockFrameState); expect(shaderBuilder._fragmentShaderParts.defineLines).toEqual([ "ALPHA_MODE_OPAQUE", ]); expect(renderResources.uniformMap).toEqual({}); expect(renderResources.renderStateOptions.blending).toEqual( BlendingState.DISABLED ); }); it("handles alphaMode = MASK", function () { var shaderBuilder = new ShaderBuilder(); var renderResources = { model: mockModel, shaderBuilder: shaderBuilder, alphaOptions: new ModelAlphaOptions(), uniformMap: {}, renderStateOptions: {}, }; var cutoff = 0.6; renderResources.alphaOptions.pass = Pass.TRANSLUCENT; renderResources.alphaOptions.alphaCutoff = cutoff; renderResources.alphaOptions.alphaMode = AlphaMode.MASK; AlphaPipelineStage.process(renderResources, mockPrimitive, mockFrameState); expect(shaderBuilder._fragmentShaderParts.defineLines).toEqual([ "ALPHA_MODE_MASK", ]); expect(shaderBuilder._fragmentShaderParts.uniformLines).toEqual([ "uniform float u_alphaCutoff;", ]); expect(renderResources.uniformMap.u_alphaCutoff()).toBe(cutoff); expect(renderResources.renderStateOptions.blending).toEqual( BlendingState.ALPHA_BLEND ); }); it("handles alphaMode = BLEND", function () { var shaderBuilder = new ShaderBuilder(); var renderResources = { model: mockModel, shaderBuilder: shaderBuilder, alphaOptions: new ModelAlphaOptions(), uniformMap: {}, renderStateOptions: {}, }; renderResources.alphaOptions.pass = Pass.TRANSLUCENT; renderResources.alphaOptions.alphaMode = AlphaMode.BLEND; AlphaPipelineStage.process(renderResources, mockPrimitive, mockFrameState); expect(shaderBuilder._fragmentShaderParts.defineLines).toEqual([ "ALPHA_MODE_BLEND", ]); expect(renderResources.uniformMap).toEqual({}); expect(renderResources.renderStateOptions.blending).toEqual( BlendingState.ALPHA_BLEND ); }); });