CustomShader
A user defined GLSL shader used with Model as well as Cesium3DTileset.
If texture uniforms are used, additional resource management must be done:
The
update
function must be called each frame. When a custom shader is passed to a Model or a Cesium3DTileset, this step is handled automaticalyCustomShader.destroy must be called when the custom shader is no longer needed to clean up GPU resources properly. The application is responsible for calling this method.
See the Custom Shader Guide for more detailed documentation.
const customShader = new CustomShader({
uniforms: {
u_colorIndex: {
type: UniformType.FLOAT,
value: 1.0
},
u_normalMap: {
type: UniformType.SAMPLER_2D,
value: new TextureUniform({
url: "http://example.com/normal.png"
})
}
},
varyings: {
v_selectedColor: VaryingType.VEC3
},
vertexShaderText: `
void vertexMain(VertexInput vsInput, inout czm_modelVertexOutput vsOutput) {
v_selectedColor = mix(vsInput.attributes.color_0, vsInput.attributes.color_1, u_colorIndex);
vsOutput.positionMC += 0.1 * vsInput.attributes.normal;
}
`,
fragmentShaderText: `
void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material) {
material.normal = texture(u_normalMap, fsInput.attributes.texCoord_0);
material.diffuse = v_selectedColor;
}
`
});
Parameters
An object with the following options
See also
Types
Properties
The user-defined GLSL code for the fragment shader
The lighting model to use when using the custom shader. This is used by CustomShaderPipelineStage
A value determining how the custom shader interacts with the overall fragment shader. This is used by CustomShaderPipelineStage
The translucency mode, which determines how the custom shader will be applied. If the value is CustomShaderTransulcencyMode.OPAQUE or CustomShaderTransulcencyMode.TRANSLUCENT, the custom shader will override settings from the model's material. If the value isCustomShaderTransulcencyMode.INHERIT, the custom shader will render as either opaque or translucent depending on the primitive's material settings.
Additional uniforms as declared by the user.
Additional varyings as declared by the user. This is used by CustomShaderPipelineStage
The user-defined GLSL code for the vertex shader