OGRE  2.2.4
Object-Oriented Graphics Rendering Engine
Ogre::HlmsPbsMobileDatablock Class Reference

Contains information needed by PBS (Physically Based Shading) for OpenGL ES 2.0. More...

#include <OgreHlmsPbsMobileDatablock.h>

+ Inheritance diagram for Ogre::HlmsPbsMobileDatablock:

Public Member Functions

 HlmsPbsMobileDatablock (IdString name, Hlms *creator, const HlmsMacroblock *macroblock, const HlmsBlendblock *blendblock, const HlmsParamVec &params)
 Valid parameters in params: More...
 
virtual ~HlmsPbsMobileDatablock ()
 
int _calculateNumUvAtlas (bool casterPass) const
 
void _linkRenderable (Renderable *renderable)
 
void _unlinkRenderable (Renderable *renderable)
 
virtual void calculateHash ()
 Calculates the hashes needed for sorting by the RenderQueue (i.e. mTextureHash) More...
 
HlmsDatablockclone (String name) const
 Creates a copy of this datablock with the same settings, but a different name. More...
 
CompareFunction getAlphaTest (void) const
 
bool getAlphaTestShadowCasterOnly (void) const
 
float getAlphaTestThreshold (void) const
 
const HlmsBlendblockgetBlendblock (bool casterBlock=false) const
 
HlmsgetCreator (void) const
 
const Vector4getDetailMapOffsetScale (uint8 detailMap) const
 
Real getDetailMapWeight (uint8 detailMap) const
 
Real getDetailNormalWeight (uint8 detailNormalMapIdx) const
 Returns the detail normal maps' weight. More...
 
Vector3 getDiffuse (void) const
 
virtual ColourValue getDiffuseColour (void) const
 Returns the closest match for a diffuse colour, if applicable by the actual implementation. More...
 
virtual TextureGpugetDiffuseTexture (void) const
 Returns the closest match for a diffuse texture, if applicable by the actual implementation. More...
 
virtual ColourValue getEmissiveColour (void) const
 Returns the closest match for a emissive colour, if applicable by the actual implementation. More...
 
virtual TextureGpugetEmissiveTexture (void) const
 Returns the closest match for a emissive texture, if applicable by the actual implementation. More...
 
void getFilenameAndResourceGroup (String const **outFilename, String const **outResourceGroup) const
 
Vector3 getFresnel (void) const
 Returns the current fresnel. More...
 
const vector< Renderable * >::type & getLinkedRenderables (void) const
 
const HlmsMacroblockgetMacroblock (bool casterBlock=false) const
 
IdString getName (void) const
 
const StringgetNameStr (void) const
 
Real getNormalMapWeight (void) const
 Returns the detail normal maps' weight. More...
 
float getRoughness (void) const
 
const HlmsSamplerblockgetSamplerblock (PbsMobileTextureTypes texType) const
 
Vector3 getSpecular (void) const
 
virtual bool hasCustomShadowMacroblock (void) const
 
bool hasSeparateFresnel (void) const
 Whether the same fresnel term is used for RGB, or individual ones for each channel. More...
 
void operator delete (void *ptr)
 
void operator delete (void *ptr, void *)
 
void operator delete (void *ptr, const char *, int, const char *)
 
void operator delete[] (void *ptr)
 
void operator delete[] (void *ptr, const char *, int, const char *)
 
void * operator new (size_t sz, const char *file, int line, const char *func)
 operator new, with debug line info More...
 
void * operator new (size_t sz)
 
void * operator new (size_t sz, void *ptr)
 placement operator new More...
 
void * operator new[] (size_t sz, const char *file, int line, const char *func)
 array operator new, with debug line info More...
 
void * operator new[] (size_t sz)
 
virtual void saveTextures (const String &folderPath, set< String >::type &savedTextures, bool saveOitd, bool saveOriginal, HlmsTextureExportListener *listener)
 
virtual void setAlphaTest (CompareFunction compareFunction)
 
virtual void setAlphaTest (CompareFunction compareFunction, bool shadowCasterOnly=false)
 Sets the alpha test to the given compare function. More...
 
virtual void setAlphaTestThreshold (float threshold)
 Alpha test's threshold. More...
 
void setBlendblock (const HlmsBlendblock &blendblock, bool casterBlock=false)
 Sets a new blendblock that matches the same parameter as the input. More...
 
void setBlendblock (const HlmsBlendblock *blendblock, bool casterBlock=false)
 Sets the blendblock from the given pointer that was already retrieved from the HlmsManager. More...
 
void setDetailMapBlendMode (uint8 detailMapIdx, PbsMobileBlendModes blendMode)
 Changes the blend mode of the detail map. More...
 
void setDetailMapOffsetScale (uint8 detailMap, const Vector4 &offsetScale)
 Sets the scale and offset of the detail map. More...
 
void setDetailMapWeight (uint8 detailMap, Real weight)
 Sets the weight of detail map. More...
 
void setDetailNormalWeight (uint8 detailNormalMapIdx, Real weight)
 Sets the normal mapping weight. More...
 
void setDiffuse (const Vector3 &diffuseColour)
 Sets the diffuse colour. The colour will be divided by PI for energy conservation. More...
 
void setFresnel (const Vector3 &fresnel, bool separateFresnel)
 Sets the fresnel (F0) directly, instead of using the IOR. More...
 
void setIndexOfRefraction (const Vector3 &refractionIdx, bool separateFresnel)
 Calculates fresnel (F0 in most books) based on the IOR. More...
 
void setMacroblock (const HlmsMacroblock &macroblock, bool casterBlock=false)
 Sets a new macroblock that matches the same parameter as the input. More...
 
void setMacroblock (const HlmsMacroblock *macroblock, bool casterBlock=false)
 Sets the macroblock from the given pointer that was already retrieved from the HlmsManager. More...
 
void setNormalMapWeight (Real weight)
 setDetailNormalWeight. This is the same, but for the main normal map. More...
 
void setRoughness (float roughness)
 Sets the roughness. More...
 
void setSamplerblock (PbsMobileTextureTypes texType, const HlmsSamplerblock &params)
 Sets a new sampler block to be associated with the texture (i.e. More...
 
void setSpecular (const Vector3 &specularColour)
 Sets the specular colour. More...
 
void setTexture (PbsMobileTextureTypes texType, TexturePtr &newTexture, const PbsUvAtlasParams &atlasParams)
 Sets a new texture for rendering. More...
 
void setTextureUvSource (PbsMobileTextureTypes sourceType, uint8 uvSet)
 Sets which UV set to use for the given texture. More...
 

Static Public Member Functions

static const char * getCmpString (CompareFunction compareFunction)
 
static HlmsTextureManager::TextureMapType suggestMapTypeBasedOnTextureType (PbsMobileTextureTypes type)
 Suggests the TextureMapType (aka texture category) for each type of texture (i.e. More...
 
static PbsUvAtlasParams textureLocationToAtlasParams (const HlmsTextureManager::TextureLocation &texLocation)
 

Public Attributes

bool mAllowTextureResidencyChange
 When false, we won't try to have Textures become resident. More...
 
float mkDb
 
float mkDg
 
float mkDr
 
float mkSb
 
float mkSg
 
float mkSr
 
uint16 mMacroblockHash [2]
 
float mRoughness
 
float mShadowConstantBias
 
uint32 mTextureHash
 
uint8 mType
 

Friends

class HlmsPbsMobile
 

Detailed Description

Contains information needed by PBS (Physically Based Shading) for OpenGL ES 2.0.

Constructor & Destructor Documentation

◆ HlmsPbsMobileDatablock()

Ogre::HlmsPbsMobileDatablock::HlmsPbsMobileDatablock ( IdString  name,
Hlms creator,
const HlmsMacroblock macroblock,
const HlmsBlendblock blendblock,
const HlmsParamVec params 
)

Valid parameters in params:

Parameters
paramsfresnel <value [g, b]> The IOR. setIndexOfRefraction When specifying three values, the fresnel is separate for each colour component

fresnel_coeff <value [g, b]> Directly sets the fresnel values, instead of using IORs "F0" in most books about PBS

roughness

Specifies the roughness value. Should be in range (0; inf) Note: Values extremely close to zero could cause NaNs and INFs in the pixel shader, also depends on the GPU's precision.

diffuse <r g="" b>=""> Specifies the RGB diffuse colour. "kD" in most books about PBS Default: diffuse 1 1 1 1 Note: Internally the diffuse colour is divided by PI.

diffuse_map <texture name>=""> Name of the diffuse texture for the base image (optional)

specular <r g="" b>=""> Specifies the RGB specular colour. "kS" in most books about PBS Default: specular 1 1 1 1

specular_map <texture name>=""> Name of the specular texture for the base image (optional).

roughness_map <texture name>=""> Name of the roughness texture for the base image (optional) Note: Only the Red channel will be used, and the texture will be converted to an efficient monochrome representation.

normal_map <texture name>=""> Name of the normal texture for the base image (optional) for normal mapping

detail_weight_map <texture name>=""> Texture that when present, will be used as mask/weight for the 4 detail maps. The R channel is used for detail map #0; the G for detail map #1, B for #2, and Alpha for #3. This affects both the diffuse and normal-mapped detail maps.

detail_map0 <texture name>=""> Similar: detail_map1, detail_map2, detail_map3 Name of the detail map to be used on top of the diffuse colour. There can be gaps (i.e. set detail maps 0 and 2 but not 1)

detail_blend_mode0 <blend_mode> Similar: detail_blend_mode1, detail_blend_mode2, detail_blend_mode3 Blend mode to use for each detail map. Valid values are: "NormalNonPremul", "NormalPremul", "Add", "Subtract", "Multiply", "Multiply2x", "Screen", "Overlay", "Lighten", "Darken", "GrainExtract", "GrainMerge", "Difference"

detail_offset_scale0 <offset_u> <offset_v> <scale_u> <scale_v> Similar: detail_offset_scale1, detail_offset_scale2, detail_offset_scale3 Sets the UV offset and scale of the detail maps.

detail_normal_map0 <texture name>=""> Similar: detail_normal_map1, detail_normal_map2, detail_normal_map3 Name of the detail map's normal map to be used. It's not affected by blend mode. May be used even if there is no detail_map

detail_normal_offset_scale0 <offset_u> <offset_v> <scale_u> <scale_v> Similar: detail_normal_offset_scale1, detail_normal_offset_scale2, detail_normal_offset_scale3 Sets the UV offset and scale of the detail normal maps.

reflection_map <texture name>=""> Name of the reflection map. Must be a cubemap. Doesn't use an UV set because the tex. coords are automatically calculated.

uv_diffuse_map <uv> Similar: uv_specular_map, uv_normal_map, uv_detail_mapN, uv_detail_normal_mapN, uv_detail_weight_map where N is a number between 0 and 3. UV set to use for the particular texture map. The UV value must be in range [0; 8)

◆ ~HlmsPbsMobileDatablock()

virtual Ogre::HlmsPbsMobileDatablock::~HlmsPbsMobileDatablock ( )
virtual

Member Function Documentation

◆ _calculateNumUvAtlas()

int Ogre::HlmsPbsMobileDatablock::_calculateNumUvAtlas ( bool  casterPass) const

◆ _linkRenderable()

void Ogre::HlmsDatablock::_linkRenderable ( Renderable renderable)
inherited

◆ _unlinkRenderable()

void Ogre::HlmsDatablock::_unlinkRenderable ( Renderable renderable)
inherited

◆ calculateHash()

virtual void Ogre::HlmsPbsMobileDatablock::calculateHash ( )
virtual

Calculates the hashes needed for sorting by the RenderQueue (i.e. mTextureHash)

Reimplemented from Ogre::HlmsDatablock.

◆ clone()

HlmsDatablock* Ogre::HlmsDatablock::clone ( String  name) const
inherited

Creates a copy of this datablock with the same settings, but a different name.

Parameters
nameName of the cloned datablock.

◆ getAlphaTest()

CompareFunction Ogre::HlmsDatablock::getAlphaTest ( void  ) const
inherited

◆ getAlphaTestShadowCasterOnly()

bool Ogre::HlmsDatablock::getAlphaTestShadowCasterOnly ( void  ) const
inherited

◆ getAlphaTestThreshold()

float Ogre::HlmsDatablock::getAlphaTestThreshold ( void  ) const
inlineinherited

◆ getBlendblock()

const HlmsBlendblock* Ogre::HlmsDatablock::getBlendblock ( bool  casterBlock = false) const
inlineinherited

◆ getCmpString()

static const char* Ogre::HlmsDatablock::getCmpString ( CompareFunction  compareFunction)
staticinherited

◆ getCreator()

Hlms* Ogre::HlmsDatablock::getCreator ( void  ) const
inlineinherited

◆ getDetailMapOffsetScale()

const Vector4& Ogre::HlmsPbsMobileDatablock::getDetailMapOffsetScale ( uint8  detailMap) const

◆ getDetailMapWeight()

Real Ogre::HlmsPbsMobileDatablock::getDetailMapWeight ( uint8  detailMap) const

◆ getDetailNormalWeight()

Real Ogre::HlmsPbsMobileDatablock::getDetailNormalWeight ( uint8  detailNormalMapIdx) const

Returns the detail normal maps' weight.

◆ getDiffuse()

Vector3 Ogre::HlmsPbsMobileDatablock::getDiffuse ( void  ) const

◆ getDiffuseColour()

virtual ColourValue Ogre::HlmsDatablock::getDiffuseColour ( void  ) const
virtualinherited

Returns the closest match for a diffuse colour, if applicable by the actual implementation.

Note that Unlit implementation returns 0 as diffuse, since it's considered emissive instead due to being bright even in the absence lights.

◆ getDiffuseTexture()

virtual TextureGpu* Ogre::HlmsDatablock::getDiffuseTexture ( void  ) const
virtualinherited

Returns the closest match for a diffuse texture, if applicable by the actual implementation.

See HlmsDatablock::getDiffuseColour

◆ getEmissiveColour()

virtual ColourValue Ogre::HlmsDatablock::getEmissiveColour ( void  ) const
virtualinherited

Returns the closest match for a emissive colour, if applicable by the actual implementation.

See HlmsDatablock::getDiffuseColour

◆ getEmissiveTexture()

virtual TextureGpu* Ogre::HlmsDatablock::getEmissiveTexture ( void  ) const
virtualinherited

Returns the closest match for a emissive texture, if applicable by the actual implementation.

See HlmsDatablock::getDiffuseColour

◆ getFilenameAndResourceGroup()

void Ogre::HlmsDatablock::getFilenameAndResourceGroup ( String const **  outFilename,
String const **  outResourceGroup 
) const
inherited
See also
Hlms::getFilenameAndResourceGroup. This operations is NOT fast. Might return null (if the datablock was removed from the Hlms but somehow is still alive) Usage: String const *filename; String const *resourceGroup; datablock->getFilenameAndResourceGroup( &filename, &resourceGroup ); if( filename && resourceGroup && !filename->empty() && !resourceGroup->empty() ) { //Valid filename & resource group. }

◆ getFresnel()

Vector3 Ogre::HlmsPbsMobileDatablock::getFresnel ( void  ) const

Returns the current fresnel.

Note: when hasSeparateFresnel returns false, the Y and Z components still correspond to mFresnelG & mFresnelB just in case you want to preserve this data (i.e. toggling separate fresnel often (which is not a good idea though, in terms of performance)

◆ getLinkedRenderables()

const vector<Renderable*>::type& Ogre::HlmsDatablock::getLinkedRenderables ( void  ) const
inlineinherited

◆ getMacroblock()

const HlmsMacroblock* Ogre::HlmsDatablock::getMacroblock ( bool  casterBlock = false) const
inlineinherited

◆ getName()

IdString Ogre::HlmsDatablock::getName ( void  ) const
inlineinherited

◆ getNameStr()

const String* Ogre::HlmsDatablock::getNameStr ( void  ) const
inherited
See also
Hlms::getNameStr. This operations is NOT fast. Might return null (if the datablock was removed from the Hlms but somehow is still alive)

◆ getNormalMapWeight()

Real Ogre::HlmsPbsMobileDatablock::getNormalMapWeight ( void  ) const

Returns the detail normal maps' weight.

◆ getRoughness()

float Ogre::HlmsPbsMobileDatablock::getRoughness ( void  ) const

◆ getSamplerblock()

const HlmsSamplerblock* Ogre::HlmsPbsMobileDatablock::getSamplerblock ( PbsMobileTextureTypes  texType) const

◆ getSpecular()

Vector3 Ogre::HlmsPbsMobileDatablock::getSpecular ( void  ) const

◆ hasCustomShadowMacroblock()

virtual bool Ogre::HlmsDatablock::hasCustomShadowMacroblock ( void  ) const
virtualinherited

◆ hasSeparateFresnel()

bool Ogre::HlmsPbsMobileDatablock::hasSeparateFresnel ( void  ) const

Whether the same fresnel term is used for RGB, or individual ones for each channel.

◆ operator delete() [1/3]

template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete ( void *  ptr)
inlineinherited

◆ operator delete() [2/3]

template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete ( void *  ptr,
void *   
)
inlineinherited

◆ operator delete() [3/3]

template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete ( void *  ptr,
const char *  ,
int  ,
const char *   
)
inlineinherited

◆ operator delete[]() [1/2]

template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete[] ( void *  ptr)
inlineinherited

◆ operator delete[]() [2/2]

template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete[] ( void *  ptr,
const char *  ,
int  ,
const char *   
)
inlineinherited

◆ operator new() [1/3]

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new ( size_t  sz,
const char *  file,
int  line,
const char *  func 
)
inlineinherited

operator new, with debug line info

◆ operator new() [2/3]

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new ( size_t  sz)
inlineinherited

◆ operator new() [3/3]

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new ( size_t  sz,
void *  ptr 
)
inlineinherited

placement operator new

◆ operator new[]() [1/2]

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new[] ( size_t  sz,
const char *  file,
int  line,
const char *  func 
)
inlineinherited

array operator new, with debug line info

◆ operator new[]() [2/2]

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new[] ( size_t  sz)
inlineinherited

◆ saveTextures()

virtual void Ogre::HlmsDatablock::saveTextures ( const String folderPath,
set< String >::type &  savedTextures,
bool  saveOitd,
bool  saveOriginal,
HlmsTextureExportListener listener 
)
virtualinherited
Remarks
It's possible to set both saveOitd & saveOriginal to true, but will likely double storage requirements (2x as many textures). Setting both to true is useful for troubleshooting obscure Ogre bugs.
Parameters
folderPathFolder where to dump the textures.
savedTextures[in/out] Set of texture names. Textures whose name is already in the set won't be saved again. Textures that were saved will be inserted into the set.
saveOitdWhen true, we will download the texture from GPU and save it in OITD format. OITD is faster to load as it's stored in Ogre's native format it understands, but it cannot be opened by traditional image editors; also OITD is not backwards compatible with older versions of Ogre.
saveOriginalWhen true, we will attempt to read the raw filestream of the original texture and save it (i.e. copy the original png/dds/etc file).

Reimplemented in Ogre::OGRE_HLMS_TEXTURE_BASE_CLASS.

◆ setAlphaTest() [1/2]

virtual void Ogre::HlmsPbsMobileDatablock::setAlphaTest ( CompareFunction  compareFunction)
virtual
See also
HlmsDatablock::setAlphaTest
Remarks
Alpha testing works on the alpha channel of the diffuse texture. If there is no diffuse texture, the first diffuse detail map after applying the blend weights (texture + params) is used. If there are no diffuse nor detail-diffuse maps, the alpha test is compared against the value 1.0

◆ setAlphaTest() [2/2]

virtual void Ogre::HlmsDatablock::setAlphaTest ( CompareFunction  compareFunction,
bool  shadowCasterOnly = false 
)
virtualinherited

Sets the alpha test to the given compare function.

CMPF_ALWAYS_PASS means disabled.

See also
mAlphaTestThreshold. Calling this function triggers a HlmsDatablock::flushRenderables
Remarks
It is to the derived implementation to actually implement the alpha test.
Parameters
compareFunctionCompare function to use. Default is CMPF_ALWAYS_PASS, which means disabled. Note: CMPF_ALWAYS_FAIL is not supported. Set a negative threshold to workaround this issue.

◆ setAlphaTestThreshold()

virtual void Ogre::HlmsPbsMobileDatablock::setAlphaTestThreshold ( float  threshold)
virtual

Alpha test's threshold.

See also
setAlphaTest
Parameters
thresholdValue typically in the range [0; 1)

Reimplemented from Ogre::HlmsDatablock.

◆ setBlendblock() [1/2]

void Ogre::HlmsDatablock::setBlendblock ( const HlmsBlendblock blendblock,
bool  casterBlock = false 
)
inherited

Sets a new blendblock that matches the same parameter as the input.

Decreases the reference count of the previous mBlendblock. Runs an O(N) search to get the right block. Calling this function triggers a HlmsDatablock::flushRenderables

Parameters
blendblockHlmsManager::getBlendblock
casterBlockTrue to directly set the blendblock to be used during the shadow mapping's caster pass. Note that when false, it will reset the caster block to the same as the regular one.

◆ setBlendblock() [2/2]

void Ogre::HlmsDatablock::setBlendblock ( const HlmsBlendblock blendblock,
bool  casterBlock = false 
)
inherited

Sets the blendblock from the given pointer that was already retrieved from the HlmsManager.

Unlike the other overload, this operation is O(1). Calling this function triggers a HlmsDatablock::flushRenderables

Parameters
blendblockA valid block. The reference count is increased inside this function.
casterBlockTrue to directly set the blendblock to be used during the shadow mapping's caster pass. Note that when false, it will reset the caster block to the same as the regular one.

◆ setDetailMapBlendMode()

void Ogre::HlmsPbsMobileDatablock::setDetailMapBlendMode ( uint8  detailMapIdx,
PbsMobileBlendModes  blendMode 
)

Changes the blend mode of the detail map.

Calling this function triggers a HlmsDatablock::flushRenderables even if you never use detail maps (they affect the cache's hash)

Remarks
This parameter only affects the diffuse detail map. Not the normal map.
Parameters
detailMapIdxValue in the range [0; 4)
blendModeBlend mode

◆ setDetailMapOffsetScale()

void Ogre::HlmsPbsMobileDatablock::setDetailMapOffsetScale ( uint8  detailMap,
const Vector4 offsetScale 
)

Sets the scale and offset of the detail map.

Remarks
A value of Vector4( 0, 0, 1, 1 ) will cause a flushRenderables as we remove the code from the shader.
Parameters
detailMapValue in the range [0; 8) Range [0; 4) affects diffuse maps. Range [4; 8) affects normal maps.
offsetScaleXY = Contains the UV offset. ZW = Constains the UV scale. Default value is Vector4( 0, 0, 1, 1 )

◆ setDetailMapWeight()

void Ogre::HlmsPbsMobileDatablock::setDetailMapWeight ( uint8  detailMap,
Real  weight 
)

Sets the weight of detail map.

Affects both diffuse and normal at the same time.

Remarks
A value of 1 will cause a flushRenderables as we remove the code from the shader. The weight from
See also
setNormalMapWeight is multiplied against this value when it comes to the detail normal map.
Parameters
detailMapValue in the range [0; 4)
weightThe weight for the detail map. Usual values are in range [0; 1] but any value is accepted and valid. Default value is 1

◆ setDetailNormalWeight()

void Ogre::HlmsPbsMobileDatablock::setDetailNormalWeight ( uint8  detailNormalMapIdx,
Real  weight 
)

Sets the normal mapping weight.

The range doesn't necessarily have to be in [0; 1]

Remarks
An exact value of 1 will generate a shader without the weighting math, while any other value will generate another shader that uses this weight (i.e. will cause a flushRenderables)
Parameters
detailNormalMapIdxValue in the range [0; 4)
weightThe weight for the normal map. A value of 0 means no effect (tangent space normal is 0, 0, 1); and would be the same as disabling the normal map texture. A value of 1 means full normal map effect. A value outside the [0; 1] range extrapolates. Default value is 1.

◆ setDiffuse()

void Ogre::HlmsPbsMobileDatablock::setDiffuse ( const Vector3 diffuseColour)

Sets the diffuse colour. The colour will be divided by PI for energy conservation.

◆ setFresnel()

void Ogre::HlmsPbsMobileDatablock::setFresnel ( const Vector3 fresnel,
bool  separateFresnel 
)

Sets the fresnel (F0) directly, instead of using the IOR.

setIndexOfRefraction

Remarks
If "separateFresnel" was different from the current setting, it will call
See also
HlmsDatablock::flushRenderables. If the another shader must be created, it could cause a stall.
Parameters
refractionIdxThe fresnel of the material for each colour component. When separateFresnel = false, the Y and Z components are ignored.
separateFresnelWhether to use the same fresnel term for RGB channel, or individual ones.

◆ setIndexOfRefraction()

void Ogre::HlmsPbsMobileDatablock::setIndexOfRefraction ( const Vector3 refractionIdx,
bool  separateFresnel 
)

Calculates fresnel (F0 in most books) based on the IOR.

The formula used is ( (1 - idx) / 1 + idx )²

Remarks
If "separateFresnel" was different from the current setting, it will call
See also
HlmsDatablock::flushRenderables. If the another shader must be created, it could cause a stall.
Parameters
refractionIdxThe index of refraction of the material for each colour component. When separateFresnel = false, the Y and Z components are ignored.
separateFresnelWhether to use the same fresnel term for RGB channel, or individual ones.

◆ setMacroblock() [1/2]

void Ogre::HlmsDatablock::setMacroblock ( const HlmsMacroblock macroblock,
bool  casterBlock = false 
)
inherited

Sets a new macroblock that matches the same parameter as the input.

Decreases the reference count of the previously set one. Runs an O(N) search to get the right block. Calling this function triggers a HlmsDatablock::flushRenderables

Parameters
macroblockHlmsManager::getMacroblock
casterBlockTrue to directly set the macroblock to be used during the shadow mapping's caster pass. Note that when false, it will automatically reset the caster's block according to HlmsManager::setShadowMappingUseBackFaces setting.

◆ setMacroblock() [2/2]

void Ogre::HlmsDatablock::setMacroblock ( const HlmsMacroblock macroblock,
bool  casterBlock = false 
)
inherited

Sets the macroblock from the given pointer that was already retrieved from the HlmsManager.

Unlike the other overload, this operation is O(1). Calling this function triggers a HlmsDatablock::flushRenderables

Parameters
macroblockA valid block. The reference count is increased inside this function.
casterBlockTrue to directly set the macroblock to be used during the shadow mapping's caster pass. Note that when false, it will automatically reset the caster's block according to HlmsManager::setShadowMappingUseBackFaces setting.

◆ setNormalMapWeight()

void Ogre::HlmsPbsMobileDatablock::setNormalMapWeight ( Real  weight)

setDetailNormalWeight. This is the same, but for the main normal map.

◆ setRoughness()

void Ogre::HlmsPbsMobileDatablock::setRoughness ( float  roughness)

Sets the roughness.

◆ setSamplerblock()

void Ogre::HlmsPbsMobileDatablock::setSamplerblock ( PbsMobileTextureTypes  texType,
const HlmsSamplerblock params 
)

Sets a new sampler block to be associated with the texture (i.e.

filtering mode, addressing modes, etc).

Parameters
texTypeType of texture.
paramsThe sampler block to use as reference.

◆ setSpecular()

void Ogre::HlmsPbsMobileDatablock::setSpecular ( const Vector3 specularColour)

Sets the specular colour.

◆ setTexture()

void Ogre::HlmsPbsMobileDatablock::setTexture ( PbsMobileTextureTypes  texType,
TexturePtr &  newTexture,
const PbsUvAtlasParams atlasParams 
)

Sets a new texture for rendering.

Parameters
UvAtlasParamsType of the texture.
newTextureTexture to change to. If it is null and previously wasn't (or viceversa), will trigger HlmsDatablock::flushRenderables.
atlasParamsThe atlas offsets in case this texture is an atlas or an array texture Doesn't apply to certain texture types (i.e. PBSM_REFLECTION)

◆ setTextureUvSource()

void Ogre::HlmsPbsMobileDatablock::setTextureUvSource ( PbsMobileTextureTypes  sourceType,
uint8  uvSet 
)

Sets which UV set to use for the given texture.

Calling this function triggers a HlmsDatablock::flushRenderables.

Parameters
sourceTypeSource texture to modify. Note that we don't enforce PBSM_SOURCE_DETAIL0 = PBSM_SOURCE_DETAIL_NM0, but you probably want to have both textures using the same UV source. Must be lower than NUM_PBSM_SOURCES.
uvSetUV coordinate set. Value must be between in range [0; 8)

◆ suggestMapTypeBasedOnTextureType()

static HlmsTextureManager::TextureMapType Ogre::HlmsPbsMobileDatablock::suggestMapTypeBasedOnTextureType ( PbsMobileTextureTypes  type)
static

Suggests the TextureMapType (aka texture category) for each type of texture (i.e.

normals should load from TEXTURE_TYPE_NORMALS).

Remarks
Remember that if "myTexture" was loaded as TEXTURE_TYPE_DIFFUSE and then you try to load it as TEXTURE_TYPE_NORMALS, the first one will prevail until it's removed. You could create an alias however, and thus have two copies of the same texture with different loading parameters.

◆ textureLocationToAtlasParams()

static PbsUvAtlasParams Ogre::HlmsPbsMobileDatablock::textureLocationToAtlasParams ( const HlmsTextureManager::TextureLocation texLocation)
static

Friends And Related Function Documentation

◆ HlmsPbsMobile

friend class HlmsPbsMobile
friend

Member Data Documentation

◆ mAllowTextureResidencyChange

bool Ogre::HlmsDatablock::mAllowTextureResidencyChange
inherited

When false, we won't try to have Textures become resident.

◆ mkDb

float Ogre::HlmsPbsMobileDatablock::mkDb

◆ mkDg

float Ogre::HlmsPbsMobileDatablock::mkDg

◆ mkDr

float Ogre::HlmsPbsMobileDatablock::mkDr

◆ mkSb

float Ogre::HlmsPbsMobileDatablock::mkSb

◆ mkSg

float Ogre::HlmsPbsMobileDatablock::mkSg

◆ mkSr

float Ogre::HlmsPbsMobileDatablock::mkSr

◆ mMacroblockHash

uint16 Ogre::HlmsDatablock::mMacroblockHash[2]
inherited

◆ mRoughness

float Ogre::HlmsPbsMobileDatablock::mRoughness

◆ mShadowConstantBias

float Ogre::HlmsDatablock::mShadowConstantBias
inherited

◆ mTextureHash

uint32 Ogre::HlmsDatablock::mTextureHash
inherited

◆ mType

uint8 Ogre::HlmsDatablock::mType
inherited

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