new CustomShader(options)
A user defined GLSL shader used with Model as well
as Cesium3DTileset.
If texture uniforms are used, additional resource management must be done:
-
The
updatefunction must be called each frame. When a custom shader is passed to aModelor aCesium3DTileset, this step is handled automaticaly -
CustomShader#destroymust 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.
| Name | Type | Description | ||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
options |
object |
An object with the following options
|
Example
const customShader = new CustomShader({
uniforms: {
u_colorIndex: {
type: Cesium.UniformType.FLOAT,
value: 1.0
},
u_normalMap: {
type: Cesium.UniformType.SAMPLER_2D,
value: new Cesium.TextureUniform({
url: "normal.png"
})
}
},
varyings: {
v_selectedColor: Cesium.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;
}
`
});
Members
-
readonly fragmentShaderTextstring
-
The user-defined GLSL code for the fragment shader
-
readonly lightingModelLightingModel
-
The lighting model to use when using the custom shader. This is used by
CustomShaderPipelineStage -
readonly modeCustomShaderMode
-
A value determining how the custom shader interacts with the overall fragment shader. This is used by
CustomShaderPipelineStage -
readonly translucencyModeCustomShaderTranslucencyMode
-
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.
- Default Value: CustomShaderTranslucencyMode.INHERIT
readonly uniformsObject.<string, UniformSpecifier>
Additional uniforms as declared by the user.
readonly varyings
Additional varyings as declared by the user.
This is used by CustomShaderPipelineStage
readonly vertexShaderTextstring
The user-defined GLSL code for the vertex shader
Methods
-
setUniform(uniformName, value)
-
Update the value of a uniform declared in the shader
Name Type Description uniformNamestring The GLSL name of the uniform. This must match one of the uniforms declared in the constructor
valueboolean | number | Cartesian2 | Cartesian3 | Cartesian4 | Matrix2 | Matrix3 | Matrix4 | string | Resource | TextureUniform The new value of the uniform.