|
VisuTwin Canvas
C++ 3D Engine — Metal Backend
|
Base class for GPU materials — owns uniform data, texture bindings, blend/depth state, and shader compilation. More...
#include <scene/materials/material.h>
Public Types | |
| using | ParameterValue = std::variant<float, int32_t, uint32_t, bool, Color, Vector2, Vector3, Vector4, Matrix4, Texture*> |
Public Member Functions | |
| float | alphaCutoff () const |
| AlphaMode | alphaMode () const |
| const Color & | baseColorFactor () const |
| Texture * | baseColorTexture () const |
| const TextureTransform & | baseColorTransform () const |
| int | baseColorUvSet () const |
| const std::shared_ptr< BlendState > & | blendState () const |
| void | clearParameters () |
| CullMode | cullMode () const |
| virtual const void * | customUniformData (size_t &outSize) const |
| const std::shared_ptr< DepthState > & | depthState () const |
| const Color & | emissiveFactor () const |
| Texture * | emissiveTexture () const |
| const TextureTransform & | emissiveTransform () const |
| int | emissiveUvSet () const |
| virtual void | getTextureSlots (std::vector< TextureSlot > &slots) const |
| bool | hasBaseColorTexture () const |
| bool | hasEmissiveTexture () const |
| bool | hasMetallicRoughnessTexture () const |
| bool | hasNormalTexture () const |
| bool | hasOcclusionTexture () const |
| bool | isSkybox () const |
| Material () | |
| float | metallicFactor () const |
| Texture * | metallicRoughnessTexture () const |
| int | metallicRoughnessUvSet () const |
| const TextureTransform & | metalRoughTransform () const |
| const std::string & | name () const |
| float | normalScale () const |
| Texture * | normalTexture () const |
| const TextureTransform & | normalTransform () const |
| int | normalUvSet () const |
| bool | occludeDirect () const |
| uint32_t | occludeSpecular () const |
| float | occludeSpecularIntensity () const |
| float | occlusionStrength () const |
| Texture * | occlusionTexture () const |
| const TextureTransform & | occlusionTransform () const |
| int | occlusionUvSet () const |
| const ParameterValue * | parameter (const std::string &name) const |
| const std::unordered_map< std::string, ParameterValue > & | parameters () const |
| bool | removeParameter (const std::string &name) |
| float | roughnessFactor () const |
| void | setAlphaCutoff (const float value) |
| void | setAlphaMode (const AlphaMode mode) |
| void | setBaseColorFactor (const Color &value) |
| void | setBaseColorTexture (Texture *texture) |
| void | setBaseColorTransform (const TextureTransform &t) |
| void | setBaseColorUvSet (const int uvSet) |
| void | setBlendState (const std::shared_ptr< BlendState > &blendState) |
| void | setCullMode (const CullMode mode) |
| void | setDepthState (const std::shared_ptr< DepthState > &depthState) |
| void | setEmissiveFactor (const Color &value) |
| void | setEmissiveTexture (Texture *texture) |
| void | setEmissiveTransform (const TextureTransform &t) |
| void | setEmissiveUvSet (const int uvSet) |
| void | setHasBaseColorTexture (const bool value) |
| void | setHasEmissiveTexture (const bool value) |
| void | setHasMetallicRoughnessTexture (const bool value) |
| void | setHasNormalTexture (const bool value) |
| void | setHasOcclusionTexture (const bool value) |
| void | setIsSkybox (const bool value) |
| void | setMetallicFactor (const float value) |
| void | setMetallicRoughnessTexture (Texture *texture) |
| void | setMetallicRoughnessUvSet (const int uvSet) |
| void | setMetalRoughTransform (const TextureTransform &t) |
| void | setName (const std::string &name) |
| void | setNormalScale (const float value) |
| void | setNormalTexture (Texture *texture) |
| void | setNormalTransform (const TextureTransform &t) |
| void | setNormalUvSet (const int uvSet) |
| void | setOccludeDirect (const bool value) |
| void | setOccludeSpecular (const uint32_t value) |
| void | setOccludeSpecularIntensity (const float value) |
| void | setOcclusionStrength (const float value) |
| void | setOcclusionTexture (Texture *texture) |
| void | setOcclusionTransform (const TextureTransform &t) |
| void | setOcclusionUvSet (const int uvSet) |
| void | setParameter (const std::string &name, const ParameterValue &value) |
| void | setRoughnessFactor (const float value) |
| void | setShaderOverride (const std::shared_ptr< Shader > &shader) |
| void | setShaderVariantKey (const uint64_t value) |
| void | setTransparent (const bool value) |
| const std::shared_ptr< Shader > & | shaderOverride () const |
| uint64_t | shaderVariantKey () const |
| uint64_t | sortKey () const |
| bool | transparent () const |
| virtual void | updateUniforms (MaterialUniforms &uniforms) const |
| virtual | ~Material ()=default |
Base class for GPU materials — owns uniform data, texture bindings, blend/depth state, and shader compilation.
A Material determines how a particular MeshInstance is rendered. It specifies a render state including uniforms (MaterialUniforms), textures, shader defines, blend mode, and depth/stencil configuration. This is a base class; use StandardMaterial for PBR surfaces or ShaderMaterial for custom Metal shaders.
Definition at line 142 of file material.h.
| using visutwin::canvas::Material::ParameterValue = std::variant<float, int32_t, uint32_t, bool, Color, Vector2, Vector3, Vector4, Matrix4, Texture*> |
Definition at line 145 of file material.h.
| visutwin::canvas::Material::Material | ( | ) |
Definition at line 149 of file material.cpp.
|
virtualdefault |
|
inline |
Definition at line 245 of file material.h.
|
inline |
Definition at line 242 of file material.h.
Referenced by visutwin::canvas::shouldRenderShadowMeshInstance().
|
inline |
Definition at line 172 of file material.h.
|
inline |
Definition at line 175 of file material.h.
Referenced by visutwin::canvas::StandardMaterial::updateUniforms().
|
inline |
Definition at line 231 of file material.h.
|
inline |
Definition at line 180 of file material.h.
|
inline |
Definition at line 163 of file material.h.
Referenced by visutwin::canvas::ProgramLibrary::bindMaterial(), and setBlendState().
| void visutwin::canvas::Material::clearParameters | ( | ) |
Definition at line 171 of file material.cpp.
|
inline |
Definition at line 169 of file material.h.
|
inlinevirtual |
Override to provide custom uniform data with a size different from MaterialUniforms. Returns nullptr by default, in which case updateUniforms() is used. When non-null, the returned data is copied directly to the GPU uniform ring buffer at buffer(3), bypassing the standard MaterialUniforms path.
The shader must interpret the raw bytes correctly (e.g., GlobeTileData instead of MaterialData). The ring buffer slot size (based on LightingUniforms) is large enough to accommodate extended uniform structs.
| outSize | Set to the size of the returned data in bytes. |
Definition at line 276 of file material.h.
|
inline |
Definition at line 166 of file material.h.
Referenced by visutwin::canvas::ProgramLibrary::bindMaterial(), and setDepthState().
|
inline |
Definition at line 221 of file material.h.
|
inline |
Definition at line 223 of file material.h.
|
inline |
Definition at line 239 of file material.h.
|
inline |
Definition at line 227 of file material.h.
Referenced by updateUniforms().
|
virtual |
Populates the list of textures this material wants bound to fragment shader slots. Slot assignment: 0=baseColor, 1=normal, 3=metalRoughness, 4=occlusion, 5=emissive, 7=clearCoat, 13=clearCoatGloss, 14=clearCoatNormal. Slots 2, 6 are scene-global (envAtlas, shadow) and not material-owned.
Reimplemented in visutwin::canvas::StandardMaterial.
Definition at line 330 of file material.cpp.
Referenced by visutwin::canvas::StandardMaterial::getTextureSlots().
|
inline |
Definition at line 178 of file material.h.
|
inline |
Definition at line 225 of file material.h.
|
inline |
Definition at line 201 of file material.h.
|
inline |
Definition at line 188 of file material.h.
|
inline |
Definition at line 208 of file material.h.
|
inline |
Definition at line 248 of file material.h.
|
inline |
Definition at line 193 of file material.h.
|
inline |
Definition at line 199 of file material.h.
|
inline |
Definition at line 203 of file material.h.
|
inline |
Definition at line 235 of file material.h.
|
inline |
Definition at line 151 of file material.h.
Referenced by parameter(), removeParameter(), setName(), and setParameter().
|
inline |
Definition at line 185 of file material.h.
|
inline |
Definition at line 183 of file material.h.
|
inline |
Definition at line 233 of file material.h.
|
inline |
Definition at line 190 of file material.h.
Referenced by updateUniforms().
|
inline |
Definition at line 214 of file material.h.
Referenced by updateUniforms().
|
inline |
Definition at line 216 of file material.h.
|
inline |
Definition at line 218 of file material.h.
|
inline |
Definition at line 212 of file material.h.
|
inline |
Definition at line 206 of file material.h.
|
inline |
Definition at line 237 of file material.h.
|
inline |
Definition at line 210 of file material.h.
Referenced by updateUniforms().
| const Material::ParameterValue * visutwin::canvas::Material::parameter | ( | const std::string & | name | ) | const |
Definition at line 176 of file material.cpp.
References name().
|
inline |
Definition at line 254 of file material.h.
| bool visutwin::canvas::Material::removeParameter | ( | const std::string & | name | ) |
Definition at line 163 of file material.cpp.
References name().
|
inline |
Definition at line 196 of file material.h.
|
inline |
Definition at line 246 of file material.h.
Referenced by visutwin::canvas::StandardMaterial::reset().
|
inline |
Definition at line 243 of file material.h.
Referenced by visutwin::canvas::StandardMaterial::reset().
|
inline |
Definition at line 173 of file material.h.
|
inline |
Definition at line 176 of file material.h.
|
inline |
Definition at line 232 of file material.h.
|
inline |
Definition at line 181 of file material.h.
|
inline |
Definition at line 164 of file material.h.
References blendState().
|
inline |
Definition at line 170 of file material.h.
Referenced by visutwin::canvas::StandardMaterial::reset().
|
inline |
Definition at line 167 of file material.h.
References depthState().
|
inline |
Definition at line 222 of file material.h.
|
inline |
Definition at line 224 of file material.h.
|
inline |
Definition at line 240 of file material.h.
|
inline |
Definition at line 228 of file material.h.
|
inline |
Definition at line 179 of file material.h.
|
inline |
Definition at line 226 of file material.h.
|
inline |
Definition at line 202 of file material.h.
|
inline |
Definition at line 189 of file material.h.
|
inline |
Definition at line 209 of file material.h.
|
inline |
Definition at line 249 of file material.h.
|
inline |
Definition at line 194 of file material.h.
|
inline |
Definition at line 200 of file material.h.
|
inline |
Definition at line 204 of file material.h.
|
inline |
Definition at line 236 of file material.h.
|
inline |
Definition at line 152 of file material.h.
References name().
Referenced by visutwin::canvas::ShaderMaterial::ShaderMaterial().
|
inline |
Definition at line 186 of file material.h.
|
inline |
Definition at line 184 of file material.h.
|
inline |
Definition at line 234 of file material.h.
|
inline |
Definition at line 191 of file material.h.
|
inline |
Definition at line 215 of file material.h.
Referenced by visutwin::canvas::StandardMaterial::reset().
|
inline |
Definition at line 217 of file material.h.
Referenced by visutwin::canvas::StandardMaterial::reset().
|
inline |
Definition at line 219 of file material.h.
Referenced by visutwin::canvas::StandardMaterial::reset().
|
inline |
Definition at line 213 of file material.h.
|
inline |
Definition at line 207 of file material.h.
|
inline |
Definition at line 238 of file material.h.
|
inline |
Definition at line 211 of file material.h.
| void visutwin::canvas::Material::setParameter | ( | const std::string & | name, |
| const ParameterValue & | value ) |
Definition at line 155 of file material.cpp.
References name().
|
inline |
Definition at line 197 of file material.h.
|
inline |
Definition at line 161 of file material.h.
Referenced by visutwin::canvas::ShaderMaterial::ShaderMaterial().
|
inline |
Definition at line 158 of file material.h.
|
inline |
Definition at line 155 of file material.h.
Referenced by visutwin::canvas::StandardMaterial::reset(), and visutwin::canvas::ShaderMaterial::ShaderMaterial().
|
inline |
Definition at line 160 of file material.h.
Referenced by visutwin::canvas::ProgramLibrary::bindMaterial().
|
inline |
Definition at line 157 of file material.h.
| uint64_t visutwin::canvas::Material::sortKey | ( | ) | const |
Definition at line 356 of file material.cpp.
|
inline |
Definition at line 154 of file material.h.
Referenced by visutwin::canvas::shouldRenderShadowMeshInstance().
|
virtual |
Packs material properties into a GPU-ready MaterialUniforms struct. Base implementation reads from typed properties and custom parameter overrides.
Reimplemented in visutwin::canvas::StandardMaterial.
Definition at line 182 of file material.cpp.
References visutwin::canvas::MaterialUniforms::alphaCutoff, visutwin::canvas::MaterialUniforms::anisotropy, visutwin::canvas::MaterialUniforms::baseColor, visutwin::canvas::MaterialUniforms::baseColorTransform0, visutwin::canvas::MaterialUniforms::baseColorTransform1, visutwin::canvas::CULLFACE_NONE, visutwin::canvas::MaterialUniforms::detailDisplacementParams, visutwin::canvas::MaterialUniforms::emissiveColor, visutwin::canvas::MaterialUniforms::emissiveTransform0, visutwin::canvas::MaterialUniforms::emissiveTransform1, emissiveUvSet(), visutwin::canvas::MaterialUniforms::flags, visutwin::canvas::MaterialUniforms::heightMapFactor, visutwin::canvas::MaterialUniforms::iridescenceParams, visutwin::canvas::MASK, visutwin::canvas::MaterialUniforms::metallicFactor, visutwin::canvas::MaterialUniforms::metalRoughTransform0, visutwin::canvas::MaterialUniforms::metalRoughTransform1, visutwin::canvas::MaterialUniforms::normalScale, visutwin::canvas::MaterialUniforms::normalTransform0, visutwin::canvas::MaterialUniforms::normalTransform1, normalUvSet(), occludeDirect(), visutwin::canvas::MaterialUniforms::occludeSpecularIntensity, visutwin::canvas::MaterialUniforms::occludeSpecularMode, visutwin::canvas::MaterialUniforms::occlusionStrength, visutwin::canvas::MaterialUniforms::occlusionTransform0, visutwin::canvas::MaterialUniforms::occlusionTransform1, occlusionUvSet(), visutwin::canvas::MaterialUniforms::refractionIndex, visutwin::canvas::MaterialUniforms::roughnessFactor, visutwin::canvas::MaterialUniforms::sheenColor, visutwin::canvas::MaterialUniforms::specGlossParams, visutwin::canvas::SPECOCC_GLOSSDEPENDENT, visutwin::canvas::SPECOCC_NONE, visutwin::canvas::MaterialUniforms::thickness, and visutwin::canvas::MaterialUniforms::transmissionFactor.
Referenced by visutwin::canvas::StandardMaterial::updateUniforms().