Castor3D 0.12.0
Multiplatform 3D engine
Public Member Functions | Static Public Member Functions | List of all members
castor3d::shader::PhongLightingModel Class Reference

#include <GlslPhongLighting.hpp>

Inheritance diagram for castor3d::shader::PhongLightingModel:
Inheritance graph
[legend]
Collaboration diagram for castor3d::shader::PhongLightingModel:
Collaboration graph
[legend]

Public Member Functions

C3D_API PhongLightingModel (sdw::ShaderWriter &writer, Utils &utils, ShadowOptions shadowOptions, SssProfiles const *sssProfiles, bool isOpaqueProgram, bool isBlinnPhong)
 
C3D_API sdw::Vec3 combine (sdw::Vec3 const &directDiffuse, sdw::Vec3 const &indirectDiffuse, sdw::Vec3 const &directSpecular, sdw::Vec3 const &indirectSpecular, sdw::Vec3 const &ambient, sdw::Vec3 const &indirectAmbient, sdw::Float const &ambientOcclusion, sdw::Vec3 const &emissive, sdw::Vec3 const &reflected, sdw::Vec3 const &refracted, sdw::Vec3 const &materialAlbedo) override
 
C3D_API std::unique_ptr< LightMaterialdeclMaterial (std::string const &name) override
 
C3D_API ReflectionModelPtr getReflectionModel (uint32_t &envMapBinding, uint32_t envMapSet) const override
 

Diffuse + Specular

C3D_API void compute (DirectionalLight const &light, LightMaterial const &material, Surface const &surface, sdw::Vec3 const &worldEye, sdw::Int const &receivesShadows, OutputComponents &output) const override
 
C3D_API void compute (PointLight const &light, LightMaterial const &material, Surface const &surface, sdw::Vec3 const &worldEye, sdw::Int const &receivesShadows, OutputComponents &output) const override
 
C3D_API void compute (SpotLight const &light, LightMaterial const &material, Surface const &surface, sdw::Vec3 const &worldEye, sdw::Int const &receivesShadows, OutputComponents &output) const override
 
C3D_API void computeMapContributions (PassFlags const &passFlags, TextureFlagsArray const &textures, TextureConfigurations const &textureConfigs, TextureAnimations const &textureAnims, sdw::Array< sdw::CombinedImage2DRgba32 > const &maps, sdw::UVec4 const &textures0, sdw::UVec4 const &textures1, sdw::Vec3 &texCoords, sdw::Vec3 &normal, sdw::Vec3 &tangent, sdw::Vec3 &bitangent, sdw::Vec3 &emissive, sdw::Float &opacity, sdw::Float &occlusion, sdw::Float &transmittance, LightMaterial &lightMat, sdw::Vec3 &tangentSpaceViewPosition, sdw::Vec3 &tangentSpaceFragPosition) override
 
- Public Member Functions inherited from castor3d::shader::LightingModel
C3D_API LightingModel (sdw::ShaderWriter &writer, Utils &utils, ShadowOptions shadowOptions, SssProfiles const *sssProfiles, bool isOpaqueProgram, std::string prefix)
 
virtual C3D_API ~LightingModel ()=default
 
virtual C3D_API sdw::Vec3 combine (sdw::Vec3 const &directDiffuse, sdw::Vec3 const &indirectDiffuse, sdw::Vec3 const &directSpecular, sdw::Vec3 const &indirectSpecular, sdw::Vec3 const &ambient, sdw::Vec3 const &indirectAmbient, sdw::Float const &ambientOcclusion, sdw::Vec3 const &emissive, sdw::Vec3 const &reflected, sdw::Vec3 const &refracted, sdw::Vec3 const &materialAlbedo)=0
 
virtual C3D_API std::unique_ptr< LightMaterialdeclMaterial (std::string const &name)=0
 
virtual C3D_API ReflectionModelPtr getReflectionModel (uint32_t &envMapBinding, uint32_t envMapSet) const =0
 
C3D_API void declareDirectionalModel (bool lightUbo, uint32_t lightBinding, uint32_t lightSet, uint32_t &shadowMapBinding, uint32_t shadowMapSet)
 
C3D_API void declarePointModel (bool lightUbo, uint32_t lightBinding, uint32_t lightSet, uint32_t &shadowMapBinding, uint32_t shadowMapSet)
 
C3D_API void declareSpotModel (bool lightUbo, uint32_t lightBinding, uint32_t lightSet, uint32_t &shadowMapBinding, uint32_t shadowMapSet)
 
C3D_API DirectionalLight getDirectionalLight (sdw::UInt const &index) const
 
C3D_API PointLight getPointLight (sdw::UInt const &index) const
 
C3D_API SpotLight getSpotLight (sdw::UInt const &index) const
 
ShadowgetShadowModel () const
 
C3D_API void declareModel (uint32_t lightsBufBinding, uint32_t lightsBufSet, uint32_t &shadowMapBinding, uint32_t shadowMapSet)
 
C3D_API void computeCombined (LightMaterial const &material, SceneData const &sceneData, Surface const &surface, sdw::Vec3 const &worldEye, sdw::Int const &receivesShadows, OutputComponents &output) const
 
C3D_API void declareDiffuseModel (uint32_t lightsBufBinding, uint32_t lightsBufSet, uint32_t &shadowMapBinding, uint32_t shadowMapSet)
 
C3D_API sdw::Vec3 computeCombinedDiffuse (LightMaterial const &material, SceneData const &sceneData, Surface const &surface, sdw::Vec3 const &worldEye, sdw::Int const &receivesShadows) const
 

Static Public Member Functions

static C3D_API LightingModelPtr create (sdw::ShaderWriter &writer, Utils &utils, ShadowOptions shadowOptions, SssProfiles const *sssProfiles, bool isOpaqueProgram)
 
- Static Public Member Functions inherited from castor3d::shader::LightingModel
static C3D_API LightingModelPtr createModel (Utils &utils, castor::String const &name, uint32_t lightsBufBinding, uint32_t lightsBufSet, ShadowOptions const &shadows, SssProfiles const *sssProfiles, uint32_t &shadowMapBinding, uint32_t shadowMapSet, bool isOpaqueProgram)
 
template<typename LightsBufBindingT >
static LightingModelPtr createModelT (Utils &utils, castor::String const &name, LightsBufBindingT lightsBufBinding, uint32_t lightsBufSet, ShadowOptions const &shadows, SssProfiles const *sssProfiles, uint32_t &shadowMapBinding, uint32_t shadowMapSet, bool isOpaqueProgram)
 
template<typename LightBindingT >
static LightingModelPtr createModel (Utils &utils, castor::String const &name, LightType light, LightBindingT lightBinding, uint32_t lightSet, bool lightUbo, ShadowOptions const &shadows, SssProfiles const *sssProfiles, uint32_t &shadowMapBinding, uint32_t shadowMapSet)
 
static C3D_API LightingModelPtr createDiffuseModel (Utils &utils, castor::String const &name, uint32_t lightsBufBinding, uint32_t lightsBufSet, ShadowOptions const &shadows, uint32_t &shadowMapBinding, uint32_t shadowMapSet, bool isOpaqueProgram)
 
template<typename LightsBufBindingT >
static LightingModelPtr createDiffuseModelT (Utils &utils, castor::String const &name, LightsBufBindingT lightsBufBinding, uint32_t lightsBufSet, ShadowOptions const &shadows, uint32_t &shadowMapBinding, uint32_t shadowMapSet, bool isOpaqueProgram)
 

Diffuse only

bool m_isBlinnPhong {}
 
std::string m_prefix
 
sdw::Function< sdw::Vec3, InLight, InPhongLightMaterial, InSurface, sdw::InVec3, sdw::InVec3, OutputComponents & > m_computeLight
 
sdw::Function< sdw::Void, InDirectionalLight, InPhongLightMaterial, InSurface, sdw::InVec3, sdw::InInt, OutputComponents & > m_computeDirectional
 
sdw::Function< sdw::Void, InPointLight, InPhongLightMaterial, InSurface, sdw::InVec3, sdw::InInt, OutputComponents & > m_computePoint
 
sdw::Function< sdw::Void, InSpotLight, InPhongLightMaterial, InSurface, sdw::InVec3, sdw::InInt, OutputComponents & > m_computeSpot
 
sdw::Function< sdw::Vec3, InLight, InPhongLightMaterial, InSurface, sdw::InVec3, sdw::InVec3 > m_computeLightDiffuse
 
sdw::Function< sdw::Vec3, InOutDirectionalLight, InPhongLightMaterial, InSurface, sdw::InVec3, sdw::InInt > m_computeDirectionalDiffuse
 
sdw::Function< sdw::Vec3, InOutPointLight, InPhongLightMaterial, InSurface, sdw::InVec3, sdw::InInt > m_computePointDiffuse
 
sdw::Function< sdw::Vec3, InOutSpotLight, InPhongLightMaterial, InSurface, sdw::InVec3, sdw::InInt > m_computeSpotDiffuse
 
C3D_API sdw::Vec3 computeDiffuse (DirectionalLight const &light, LightMaterial const &material, Surface const &surface, sdw::Vec3 const &worldEye, sdw::Int const &receivesShadows) const override
 
C3D_API sdw::Vec3 computeDiffuse (PointLight const &light, LightMaterial const &material, Surface const &surface, sdw::Vec3 const &worldEye, sdw::Int const &receivesShadows) const override
 
C3D_API sdw::Vec3 computeDiffuse (SpotLight const &light, LightMaterial const &material, Surface const &surface, sdw::Vec3 const &worldEye, sdw::Int const &receivesShadows) const override
 
C3D_API void computeMapDiffuseContributions (PassFlags const &passFlags, TextureFlagsArray const &textures, TextureConfigurations const &textureConfigs, TextureAnimations const &textureAnims, sdw::Array< sdw::CombinedImage2DRgba32 > const &maps, sdw::UVec4 const &textures0, sdw::UVec4 const &textures1, sdw::Vec3 const &texCoords, sdw::Vec3 &emissive, sdw::Float &opacity, sdw::Float &occlusion, LightMaterial &lightMat) override
 
bool isBlinnPhong () const
 
static C3D_API castor::String getName ()
 
void doDeclareModel () override
 
void doDeclareComputeDirectionalLight () override
 
void doDeclareComputePointLight () override
 
void doDeclareComputeSpotLight () override
 
void doDeclareDiffuseModel () override
 
void doDeclareComputeDirectionalLightDiffuse () override
 
void doDeclareComputePointLightDiffuse () override
 
void doDeclareComputeSpotLightDiffuse () override
 

Additional Inherited Members

- Protected Member Functions inherited from castor3d::shader::LightingModel
C3D_API Light getBaseLight (sdw::UInt &offset) const
 
C3D_API void doDeclareLightsBuffer (uint32_t binding, uint32_t set)
 
C3D_API void doDeclareDirectionalLightUbo (uint32_t binding, uint32_t set)
 
C3D_API void doDeclarePointLightUbo (uint32_t binding, uint32_t set)
 
C3D_API void doDeclareSpotLightUbo (uint32_t binding, uint32_t set)
 
C3D_API void doDeclareGetBaseLight ()
 
C3D_API void doDeclareGetDirectionalLight ()
 
C3D_API void doDeclareGetPointLight ()
 
C3D_API void doDeclareGetSpotLight ()
 
C3D_API void doDeclareGetCascadeFactors ()
 
- Protected Attributes inherited from castor3d::shader::LightingModel
sdw::ShaderWriter & m_writer
 
Utilsm_utils
 
std::unique_ptr< sdw::Struct > m_type
 
std::unique_ptr< sdw::Ssbo > m_ssbo
 
std::unique_ptr< sdw::RImageBufferRgba32 > m_tbo
 
bool m_isOpaqueProgram
 
std::string m_prefix
 
std::shared_ptr< Shadowm_shadowModel
 
std::shared_ptr< SssTransmittancem_sssTransmittance
 
sdw::Function< sdw::Vec3, sdw::InVec3, sdw::InVec4, sdw::InUInt > m_getCascadeFactors
 
sdw::Function< sdw::Vec3, sdw::InVec3, sdw::InVec4Array, sdw::InUInt > m_getTileFactors
 
sdw::Function< shader::Light, sdw::InOutUInt > m_getBaseLight
 
sdw::Function< shader::DirectionalLight, sdw::InUInt > m_getDirectionalLight
 
sdw::Function< shader::PointLight, sdw::InUInt > m_getPointLight
 
sdw::Function< shader::SpotLight, sdw::InUInt > m_getSpotLight
 

Constructor & Destructor Documentation

◆ PhongLightingModel()

C3D_API castor3d::shader::PhongLightingModel::PhongLightingModel ( sdw::ShaderWriter &  writer,
Utils utils,
ShadowOptions  shadowOptions,
SssProfiles const *  sssProfiles,
bool  isOpaqueProgram,
bool  isBlinnPhong 
)

Member Function Documentation

◆ combine()

C3D_API sdw::Vec3 castor3d::shader::PhongLightingModel::combine ( sdw::Vec3 const &  directDiffuse,
sdw::Vec3 const &  indirectDiffuse,
sdw::Vec3 const &  directSpecular,
sdw::Vec3 const &  indirectSpecular,
sdw::Vec3 const &  ambient,
sdw::Vec3 const &  indirectAmbient,
sdw::Float const &  ambientOcclusion,
sdw::Vec3 const &  emissive,
sdw::Vec3 const &  reflected,
sdw::Vec3 const &  refracted,
sdw::Vec3 const &  materialAlbedo 
)
overridevirtual

◆ compute() [1/3]

C3D_API void castor3d::shader::PhongLightingModel::compute ( DirectionalLight const &  light,
LightMaterial const &  material,
Surface const &  surface,
sdw::Vec3 const &  worldEye,
sdw::Int const &  receivesShadows,
OutputComponents output 
) const
overridevirtual

◆ compute() [2/3]

C3D_API void castor3d::shader::PhongLightingModel::compute ( PointLight const &  light,
LightMaterial const &  material,
Surface const &  surface,
sdw::Vec3 const &  worldEye,
sdw::Int const &  receivesShadows,
OutputComponents output 
) const
overridevirtual

◆ compute() [3/3]

C3D_API void castor3d::shader::PhongLightingModel::compute ( SpotLight const &  light,
LightMaterial const &  material,
Surface const &  surface,
sdw::Vec3 const &  worldEye,
sdw::Int const &  receivesShadows,
OutputComponents output 
) const
overridevirtual

◆ computeDiffuse() [1/3]

C3D_API sdw::Vec3 castor3d::shader::PhongLightingModel::computeDiffuse ( DirectionalLight const &  light,
LightMaterial const &  material,
Surface const &  surface,
sdw::Vec3 const &  worldEye,
sdw::Int const &  receivesShadows 
) const
overridevirtual

◆ computeDiffuse() [2/3]

C3D_API sdw::Vec3 castor3d::shader::PhongLightingModel::computeDiffuse ( PointLight const &  light,
LightMaterial const &  material,
Surface const &  surface,
sdw::Vec3 const &  worldEye,
sdw::Int const &  receivesShadows 
) const
overridevirtual

◆ computeDiffuse() [3/3]

C3D_API sdw::Vec3 castor3d::shader::PhongLightingModel::computeDiffuse ( SpotLight const &  light,
LightMaterial const &  material,
Surface const &  surface,
sdw::Vec3 const &  worldEye,
sdw::Int const &  receivesShadows 
) const
overridevirtual

◆ computeMapContributions()

C3D_API void castor3d::shader::PhongLightingModel::computeMapContributions ( PassFlags const &  passFlags,
TextureFlagsArray const &  textures,
TextureConfigurations const &  textureConfigs,
TextureAnimations const &  textureAnims,
sdw::Array< sdw::CombinedImage2DRgba32 > const &  maps,
sdw::UVec4 const &  textures0,
sdw::UVec4 const &  textures1,
sdw::Vec3 &  texCoords,
sdw::Vec3 &  normal,
sdw::Vec3 &  tangent,
sdw::Vec3 &  bitangent,
sdw::Vec3 &  emissive,
sdw::Float &  opacity,
sdw::Float &  occlusion,
sdw::Float &  transmittance,
LightMaterial lightMat,
sdw::Vec3 &  tangentSpaceViewPosition,
sdw::Vec3 &  tangentSpaceFragPosition 
)
overridevirtual

◆ computeMapDiffuseContributions()

C3D_API void castor3d::shader::PhongLightingModel::computeMapDiffuseContributions ( PassFlags const &  passFlags,
TextureFlagsArray const &  textures,
TextureConfigurations const &  textureConfigs,
TextureAnimations const &  textureAnims,
sdw::Array< sdw::CombinedImage2DRgba32 > const &  maps,
sdw::UVec4 const &  textures0,
sdw::UVec4 const &  textures1,
sdw::Vec3 const &  texCoords,
sdw::Vec3 &  emissive,
sdw::Float &  opacity,
sdw::Float &  occlusion,
LightMaterial lightMat 
)
overridevirtual

◆ create()

static C3D_API LightingModelPtr castor3d::shader::PhongLightingModel::create ( sdw::ShaderWriter &  writer,
Utils utils,
ShadowOptions  shadowOptions,
SssProfiles const *  sssProfiles,
bool  isOpaqueProgram 
)
static

◆ declMaterial()

C3D_API std::unique_ptr< LightMaterial > castor3d::shader::PhongLightingModel::declMaterial ( std::string const &  name)
overridevirtual

◆ doDeclareComputeDirectionalLight()

void castor3d::shader::PhongLightingModel::doDeclareComputeDirectionalLight ( )
overrideprotectedvirtual

◆ doDeclareComputeDirectionalLightDiffuse()

void castor3d::shader::PhongLightingModel::doDeclareComputeDirectionalLightDiffuse ( )
overrideprotectedvirtual

◆ doDeclareComputePointLight()

void castor3d::shader::PhongLightingModel::doDeclareComputePointLight ( )
overrideprotectedvirtual

◆ doDeclareComputePointLightDiffuse()

void castor3d::shader::PhongLightingModel::doDeclareComputePointLightDiffuse ( )
overrideprotectedvirtual

◆ doDeclareComputeSpotLight()

void castor3d::shader::PhongLightingModel::doDeclareComputeSpotLight ( )
overrideprotectedvirtual

◆ doDeclareComputeSpotLightDiffuse()

void castor3d::shader::PhongLightingModel::doDeclareComputeSpotLightDiffuse ( )
overrideprotectedvirtual

◆ doDeclareDiffuseModel()

void castor3d::shader::PhongLightingModel::doDeclareDiffuseModel ( )
overrideprotectedvirtual

◆ doDeclareModel()

void castor3d::shader::PhongLightingModel::doDeclareModel ( )
overrideprotectedvirtual

◆ getName()

static C3D_API castor::String castor3d::shader::PhongLightingModel::getName ( )
static

◆ getReflectionModel()

C3D_API ReflectionModelPtr castor3d::shader::PhongLightingModel::getReflectionModel ( uint32_t &  envMapBinding,
uint32_t  envMapSet 
) const
overridevirtual

◆ isBlinnPhong()

bool castor3d::shader::PhongLightingModel::isBlinnPhong ( ) const
inline

References m_isBlinnPhong.

Member Data Documentation

◆ m_computeDirectional

sdw::Function< sdw::Void , InDirectionalLight , InPhongLightMaterial , InSurface , sdw::InVec3 , sdw::InInt , OutputComponents & > castor3d::shader::PhongLightingModel::m_computeDirectional

◆ m_computeDirectionalDiffuse

sdw::Function< sdw::Vec3 , InOutDirectionalLight , InPhongLightMaterial , InSurface , sdw::InVec3 , sdw::InInt > castor3d::shader::PhongLightingModel::m_computeDirectionalDiffuse

◆ m_computeLight

sdw::Function< sdw::Vec3 , InLight , InPhongLightMaterial , InSurface , sdw::InVec3 , sdw::InVec3 , OutputComponents & > castor3d::shader::PhongLightingModel::m_computeLight

◆ m_computeLightDiffuse

sdw::Function< sdw::Vec3 , InLight , InPhongLightMaterial , InSurface , sdw::InVec3 , sdw::InVec3 > castor3d::shader::PhongLightingModel::m_computeLightDiffuse

◆ m_computePoint

sdw::Function< sdw::Void , InPointLight , InPhongLightMaterial , InSurface , sdw::InVec3 , sdw::InInt , OutputComponents & > castor3d::shader::PhongLightingModel::m_computePoint

◆ m_computePointDiffuse

sdw::Function< sdw::Vec3 , InOutPointLight , InPhongLightMaterial , InSurface , sdw::InVec3 , sdw::InInt > castor3d::shader::PhongLightingModel::m_computePointDiffuse

◆ m_computeSpot

sdw::Function< sdw::Void , InSpotLight , InPhongLightMaterial , InSurface , sdw::InVec3 , sdw::InInt , OutputComponents & > castor3d::shader::PhongLightingModel::m_computeSpot

◆ m_computeSpotDiffuse

sdw::Function< sdw::Vec3 , InOutSpotLight , InPhongLightMaterial , InSurface , sdw::InVec3 , sdw::InInt > castor3d::shader::PhongLightingModel::m_computeSpotDiffuse

◆ m_isBlinnPhong

bool castor3d::shader::PhongLightingModel::m_isBlinnPhong {}

Referenced by isBlinnPhong().

◆ m_prefix

std::string castor3d::shader::PhongLightingModel::m_prefix

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