VisuTwin Canvas
C++ 3D Engine — Metal Backend
Loading...
Searching...
No Matches
visutwin::canvas::Material Class Reference

Base class for GPU materials — owns uniform data, texture bindings, blend/depth state, and shader compilation. More...

#include <scene/materials/material.h>

Inheritance diagram for visutwin::canvas::Material:
[legend]

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 ColorbaseColorFactor () const
TexturebaseColorTexture () const
const TextureTransformbaseColorTransform () 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 ColoremissiveFactor () const
TextureemissiveTexture () const
const TextureTransformemissiveTransform () 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
TexturemetallicRoughnessTexture () const
int metallicRoughnessUvSet () const
const TextureTransformmetalRoughTransform () const
const std::string & name () const
float normalScale () const
TexturenormalTexture () const
const TextureTransformnormalTransform () const
int normalUvSet () const
bool occludeDirect () const
uint32_t occludeSpecular () const
float occludeSpecularIntensity () const
float occlusionStrength () const
TextureocclusionTexture () const
const TextureTransformocclusionTransform () const
int occlusionUvSet () const
const ParameterValueparameter (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

Detailed Description

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.

Member Typedef Documentation

◆ ParameterValue

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.

Constructor & Destructor Documentation

◆ Material()

visutwin::canvas::Material::Material ( )

Definition at line 149 of file material.cpp.

◆ ~Material()

virtual visutwin::canvas::Material::~Material ( )
virtualdefault

Member Function Documentation

◆ alphaCutoff()

float visutwin::canvas::Material::alphaCutoff ( ) const
inline

Definition at line 245 of file material.h.

◆ alphaMode()

AlphaMode visutwin::canvas::Material::alphaMode ( ) const
inline

Definition at line 242 of file material.h.

Referenced by visutwin::canvas::shouldRenderShadowMeshInstance().

◆ baseColorFactor()

const Color & visutwin::canvas::Material::baseColorFactor ( ) const
inline

Definition at line 172 of file material.h.

◆ baseColorTexture()

Texture * visutwin::canvas::Material::baseColorTexture ( ) const
inline

Definition at line 175 of file material.h.

Referenced by visutwin::canvas::StandardMaterial::updateUniforms().

◆ baseColorTransform()

const TextureTransform & visutwin::canvas::Material::baseColorTransform ( ) const
inline

Definition at line 231 of file material.h.

◆ baseColorUvSet()

int visutwin::canvas::Material::baseColorUvSet ( ) const
inline

Definition at line 180 of file material.h.

◆ blendState()

const std::shared_ptr< BlendState > & visutwin::canvas::Material::blendState ( ) const
inline

Definition at line 163 of file material.h.

Referenced by visutwin::canvas::ProgramLibrary::bindMaterial(), and setBlendState().

◆ clearParameters()

void visutwin::canvas::Material::clearParameters ( )

Definition at line 171 of file material.cpp.

◆ cullMode()

CullMode visutwin::canvas::Material::cullMode ( ) const
inline

Definition at line 169 of file material.h.

◆ customUniformData()

virtual const void * visutwin::canvas::Material::customUniformData ( size_t & outSize) const
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.

Parameters
outSizeSet to the size of the returned data in bytes.
Returns
Pointer to uniform data, or nullptr to use updateUniforms() path.

Definition at line 276 of file material.h.

◆ depthState()

const std::shared_ptr< DepthState > & visutwin::canvas::Material::depthState ( ) const
inline

Definition at line 166 of file material.h.

Referenced by visutwin::canvas::ProgramLibrary::bindMaterial(), and setDepthState().

◆ emissiveFactor()

const Color & visutwin::canvas::Material::emissiveFactor ( ) const
inline

Definition at line 221 of file material.h.

◆ emissiveTexture()

Texture * visutwin::canvas::Material::emissiveTexture ( ) const
inline

Definition at line 223 of file material.h.

◆ emissiveTransform()

const TextureTransform & visutwin::canvas::Material::emissiveTransform ( ) const
inline

Definition at line 239 of file material.h.

◆ emissiveUvSet()

int visutwin::canvas::Material::emissiveUvSet ( ) const
inline

Definition at line 227 of file material.h.

Referenced by updateUniforms().

◆ getTextureSlots()

void visutwin::canvas::Material::getTextureSlots ( std::vector< TextureSlot > & slots) const
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().

◆ hasBaseColorTexture()

bool visutwin::canvas::Material::hasBaseColorTexture ( ) const
inline

Definition at line 178 of file material.h.

◆ hasEmissiveTexture()

bool visutwin::canvas::Material::hasEmissiveTexture ( ) const
inline

Definition at line 225 of file material.h.

◆ hasMetallicRoughnessTexture()

bool visutwin::canvas::Material::hasMetallicRoughnessTexture ( ) const
inline

Definition at line 201 of file material.h.

◆ hasNormalTexture()

bool visutwin::canvas::Material::hasNormalTexture ( ) const
inline

Definition at line 188 of file material.h.

◆ hasOcclusionTexture()

bool visutwin::canvas::Material::hasOcclusionTexture ( ) const
inline

Definition at line 208 of file material.h.

◆ isSkybox()

bool visutwin::canvas::Material::isSkybox ( ) const
inline

Definition at line 248 of file material.h.

◆ metallicFactor()

float visutwin::canvas::Material::metallicFactor ( ) const
inline

Definition at line 193 of file material.h.

◆ metallicRoughnessTexture()

Texture * visutwin::canvas::Material::metallicRoughnessTexture ( ) const
inline

Definition at line 199 of file material.h.

◆ metallicRoughnessUvSet()

int visutwin::canvas::Material::metallicRoughnessUvSet ( ) const
inline

Definition at line 203 of file material.h.

◆ metalRoughTransform()

const TextureTransform & visutwin::canvas::Material::metalRoughTransform ( ) const
inline

Definition at line 235 of file material.h.

◆ name()

const std::string & visutwin::canvas::Material::name ( ) const
inline

Definition at line 151 of file material.h.

Referenced by parameter(), removeParameter(), setName(), and setParameter().

◆ normalScale()

float visutwin::canvas::Material::normalScale ( ) const
inline

Definition at line 185 of file material.h.

◆ normalTexture()

Texture * visutwin::canvas::Material::normalTexture ( ) const
inline

Definition at line 183 of file material.h.

◆ normalTransform()

const TextureTransform & visutwin::canvas::Material::normalTransform ( ) const
inline

Definition at line 233 of file material.h.

◆ normalUvSet()

int visutwin::canvas::Material::normalUvSet ( ) const
inline

Definition at line 190 of file material.h.

Referenced by updateUniforms().

◆ occludeDirect()

bool visutwin::canvas::Material::occludeDirect ( ) const
inline

Definition at line 214 of file material.h.

Referenced by updateUniforms().

◆ occludeSpecular()

uint32_t visutwin::canvas::Material::occludeSpecular ( ) const
inline

Definition at line 216 of file material.h.

◆ occludeSpecularIntensity()

float visutwin::canvas::Material::occludeSpecularIntensity ( ) const
inline

Definition at line 218 of file material.h.

◆ occlusionStrength()

float visutwin::canvas::Material::occlusionStrength ( ) const
inline

Definition at line 212 of file material.h.

◆ occlusionTexture()

Texture * visutwin::canvas::Material::occlusionTexture ( ) const
inline

Definition at line 206 of file material.h.

◆ occlusionTransform()

const TextureTransform & visutwin::canvas::Material::occlusionTransform ( ) const
inline

Definition at line 237 of file material.h.

◆ occlusionUvSet()

int visutwin::canvas::Material::occlusionUvSet ( ) const
inline

Definition at line 210 of file material.h.

Referenced by updateUniforms().

◆ parameter()

const Material::ParameterValue * visutwin::canvas::Material::parameter ( const std::string & name) const

Definition at line 176 of file material.cpp.

References name().

◆ parameters()

const std::unordered_map< std::string, ParameterValue > & visutwin::canvas::Material::parameters ( ) const
inline

Definition at line 254 of file material.h.

◆ removeParameter()

bool visutwin::canvas::Material::removeParameter ( const std::string & name)

Definition at line 163 of file material.cpp.

References name().

◆ roughnessFactor()

float visutwin::canvas::Material::roughnessFactor ( ) const
inline

Definition at line 196 of file material.h.

◆ setAlphaCutoff()

void visutwin::canvas::Material::setAlphaCutoff ( const float value)
inline

Definition at line 246 of file material.h.

Referenced by visutwin::canvas::StandardMaterial::reset().

◆ setAlphaMode()

void visutwin::canvas::Material::setAlphaMode ( const AlphaMode mode)
inline

Definition at line 243 of file material.h.

Referenced by visutwin::canvas::StandardMaterial::reset().

◆ setBaseColorFactor()

void visutwin::canvas::Material::setBaseColorFactor ( const Color & value)
inline

Definition at line 173 of file material.h.

◆ setBaseColorTexture()

void visutwin::canvas::Material::setBaseColorTexture ( Texture * texture)
inline

Definition at line 176 of file material.h.

◆ setBaseColorTransform()

void visutwin::canvas::Material::setBaseColorTransform ( const TextureTransform & t)
inline

Definition at line 232 of file material.h.

◆ setBaseColorUvSet()

void visutwin::canvas::Material::setBaseColorUvSet ( const int uvSet)
inline

Definition at line 181 of file material.h.

◆ setBlendState()

void visutwin::canvas::Material::setBlendState ( const std::shared_ptr< BlendState > & blendState)
inline

Definition at line 164 of file material.h.

References blendState().

◆ setCullMode()

void visutwin::canvas::Material::setCullMode ( const CullMode mode)
inline

Definition at line 170 of file material.h.

Referenced by visutwin::canvas::StandardMaterial::reset().

◆ setDepthState()

void visutwin::canvas::Material::setDepthState ( const std::shared_ptr< DepthState > & depthState)
inline

Definition at line 167 of file material.h.

References depthState().

◆ setEmissiveFactor()

void visutwin::canvas::Material::setEmissiveFactor ( const Color & value)
inline

Definition at line 222 of file material.h.

◆ setEmissiveTexture()

void visutwin::canvas::Material::setEmissiveTexture ( Texture * texture)
inline

Definition at line 224 of file material.h.

◆ setEmissiveTransform()

void visutwin::canvas::Material::setEmissiveTransform ( const TextureTransform & t)
inline

Definition at line 240 of file material.h.

◆ setEmissiveUvSet()

void visutwin::canvas::Material::setEmissiveUvSet ( const int uvSet)
inline

Definition at line 228 of file material.h.

◆ setHasBaseColorTexture()

void visutwin::canvas::Material::setHasBaseColorTexture ( const bool value)
inline

Definition at line 179 of file material.h.

◆ setHasEmissiveTexture()

void visutwin::canvas::Material::setHasEmissiveTexture ( const bool value)
inline

Definition at line 226 of file material.h.

◆ setHasMetallicRoughnessTexture()

void visutwin::canvas::Material::setHasMetallicRoughnessTexture ( const bool value)
inline

Definition at line 202 of file material.h.

◆ setHasNormalTexture()

void visutwin::canvas::Material::setHasNormalTexture ( const bool value)
inline

Definition at line 189 of file material.h.

◆ setHasOcclusionTexture()

void visutwin::canvas::Material::setHasOcclusionTexture ( const bool value)
inline

Definition at line 209 of file material.h.

◆ setIsSkybox()

void visutwin::canvas::Material::setIsSkybox ( const bool value)
inline

Definition at line 249 of file material.h.

◆ setMetallicFactor()

void visutwin::canvas::Material::setMetallicFactor ( const float value)
inline

Definition at line 194 of file material.h.

◆ setMetallicRoughnessTexture()

void visutwin::canvas::Material::setMetallicRoughnessTexture ( Texture * texture)
inline

Definition at line 200 of file material.h.

◆ setMetallicRoughnessUvSet()

void visutwin::canvas::Material::setMetallicRoughnessUvSet ( const int uvSet)
inline

Definition at line 204 of file material.h.

◆ setMetalRoughTransform()

void visutwin::canvas::Material::setMetalRoughTransform ( const TextureTransform & t)
inline

Definition at line 236 of file material.h.

◆ setName()

void visutwin::canvas::Material::setName ( const std::string & name)
inline

Definition at line 152 of file material.h.

References name().

Referenced by visutwin::canvas::ShaderMaterial::ShaderMaterial().

◆ setNormalScale()

void visutwin::canvas::Material::setNormalScale ( const float value)
inline

Definition at line 186 of file material.h.

◆ setNormalTexture()

void visutwin::canvas::Material::setNormalTexture ( Texture * texture)
inline

Definition at line 184 of file material.h.

◆ setNormalTransform()

void visutwin::canvas::Material::setNormalTransform ( const TextureTransform & t)
inline

Definition at line 234 of file material.h.

◆ setNormalUvSet()

void visutwin::canvas::Material::setNormalUvSet ( const int uvSet)
inline

Definition at line 191 of file material.h.

◆ setOccludeDirect()

void visutwin::canvas::Material::setOccludeDirect ( const bool value)
inline

Definition at line 215 of file material.h.

Referenced by visutwin::canvas::StandardMaterial::reset().

◆ setOccludeSpecular()

void visutwin::canvas::Material::setOccludeSpecular ( const uint32_t value)
inline

Definition at line 217 of file material.h.

Referenced by visutwin::canvas::StandardMaterial::reset().

◆ setOccludeSpecularIntensity()

void visutwin::canvas::Material::setOccludeSpecularIntensity ( const float value)
inline

Definition at line 219 of file material.h.

Referenced by visutwin::canvas::StandardMaterial::reset().

◆ setOcclusionStrength()

void visutwin::canvas::Material::setOcclusionStrength ( const float value)
inline

Definition at line 213 of file material.h.

◆ setOcclusionTexture()

void visutwin::canvas::Material::setOcclusionTexture ( Texture * texture)
inline

Definition at line 207 of file material.h.

◆ setOcclusionTransform()

void visutwin::canvas::Material::setOcclusionTransform ( const TextureTransform & t)
inline

Definition at line 238 of file material.h.

◆ setOcclusionUvSet()

void visutwin::canvas::Material::setOcclusionUvSet ( const int uvSet)
inline

Definition at line 211 of file material.h.

◆ setParameter()

void visutwin::canvas::Material::setParameter ( const std::string & name,
const ParameterValue & value )

Definition at line 155 of file material.cpp.

References name().

◆ setRoughnessFactor()

void visutwin::canvas::Material::setRoughnessFactor ( const float value)
inline

Definition at line 197 of file material.h.

◆ setShaderOverride()

void visutwin::canvas::Material::setShaderOverride ( const std::shared_ptr< Shader > & shader)
inline

Definition at line 161 of file material.h.

Referenced by visutwin::canvas::ShaderMaterial::ShaderMaterial().

◆ setShaderVariantKey()

void visutwin::canvas::Material::setShaderVariantKey ( const uint64_t value)
inline

Definition at line 158 of file material.h.

◆ setTransparent()

void visutwin::canvas::Material::setTransparent ( const bool value)
inline

◆ shaderOverride()

const std::shared_ptr< Shader > & visutwin::canvas::Material::shaderOverride ( ) const
inline

Definition at line 160 of file material.h.

Referenced by visutwin::canvas::ProgramLibrary::bindMaterial().

◆ shaderVariantKey()

uint64_t visutwin::canvas::Material::shaderVariantKey ( ) const
inline

Definition at line 157 of file material.h.

◆ sortKey()

uint64_t visutwin::canvas::Material::sortKey ( ) const

Definition at line 356 of file material.cpp.

◆ transparent()

bool visutwin::canvas::Material::transparent ( ) const
inline

Definition at line 154 of file material.h.

Referenced by visutwin::canvas::shouldRenderShadowMeshInstance().

◆ updateUniforms()

void visutwin::canvas::Material::updateUniforms ( MaterialUniforms & uniforms) const
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().


The documentation for this class was generated from the following files: