OGRE-Next  4.0.0unstable
Object-Oriented Graphics Rendering Engine
Ogre::HlmsBlendblock Struct Reference

A blend block contains settings that rarely change, and thus are common to many materials. More...

#include <OgreHlmsDatablock.h>

+ Inheritance diagram for Ogre::HlmsBlendblock:

Public Types

enum  A2CSetting { A2cDisabled , A2cEnabled , A2cEnabledMsaaOnly }
 
enum  BlendChannelMasks {
  BlendChannelRed = 0x01 , BlendChannelGreen = 0x02 , BlendChannelBlue = 0x04 , BlendChannelAlpha = 0x08 ,
  BlendChannelAll = BlendChannelRed | BlendChannelGreen | BlendChannelBlue | BlendChannelAlpha , BlendChannelForceDisabled = 0x10
}
 

Public Member Functions

 HlmsBlendblock ()
 
void calculateSeparateBlendMode ()
 Sets mSeparateBlend to true or false based on current settings. More...
 
bool isAlphaToCoverage (const SampleDescription &sd) const
 
bool isAutoTransparent () const
 
bool isForcedTransparent () const
 
bool operator!= (const HlmsBlendblock &_r) const
 
bool operator== (const HlmsBlendblock &_r) const
 
void setBlendType (SceneBlendType blendType)
 Shortcut to set the blend factors to common blending operations. More...
 
void setBlendType (SceneBlendType colour, SceneBlendType alpha)
 Shortcut to set the blend factors to common blending operations. More...
 
void setForceTransparentRenderOrder (bool bForceTransparent)
 Sometimes you want to force the RenderQueue to render back to front even if the object isn't alpha blended (e.g., you're rendering refractive materials) More...
 
- Public Member Functions inherited from Ogre::BasicBlock
 BasicBlock (uint8 blockType)
 

Public Attributes

uint8 mAlphaToCoverage
 
uint8 mBlendChannelMask
 See A2CSetting. More...
 
SceneBlendOperation mBlendOperation
 
SceneBlendOperation mBlendOperationAlpha
 
SceneBlendFactor mDestBlendFactor
 
SceneBlendFactor mDestBlendFactorAlpha
 
uint8 mIsTransparent
 
bool mSeparateBlend
 Used to determine if separate alpha blending should be used for color and alpha channels. More...
 
SceneBlendFactor mSourceBlendFactor
 
SceneBlendFactor mSourceBlendFactorAlpha
 
- Public Attributes inherited from Ogre::BasicBlock
uint8 mAllowGlobalDefaults
 When zero, HlmsManager cannot override the block's values with enforced global settings. More...
 
uint8 mBlockType
 
uint16 mId
 The mId is only valid while mRefCount > 0; which means mRsData may contain valid data, else it's null. More...
 
uint16 mLifetimeId
 Except for HlmsSamplerblocks, mLifetimeId is valid throghout the entire life of HlmsManager. More...
 
uint16 mRefCount
 
void * mRsData
 Render-System specific data. More...
 

Detailed Description

A blend block contains settings that rarely change, and thus are common to many materials.

The reasons this structure isn't joined with HlmsMacroblock is that:

  • The D3D11 API makes this distinction (much higher API overhead if we change i.e. depth settings) due to D3D11_RASTERIZER_DESC.
  • This block contains information of whether the material is transparent. Transparent materials are sorted differently than opaque ones. Up to 32 different blocks are allowed!

Member Enumeration Documentation

◆ A2CSetting

Enumerator
A2cDisabled 

Alpha to Coverage is always disabled.

A2cEnabled 

Alpha to Coverage is always enabled.

A2cEnabledMsaaOnly 

Alpha to Coverage is enabled only if RenderTarget uses MSAA.

◆ BlendChannelMasks

Enumerator
BlendChannelRed 
BlendChannelGreen 
BlendChannelBlue 
BlendChannelAlpha 
BlendChannelAll 
BlendChannelForceDisabled 

Setting mBlendChannelMask = 0 will skip all channels (i.e.

only depth and stencil) But pixel shader may still run due to side effects (e.g. pixel discard/alpha testing UAV outputs). Some drivers may not optimize this case due to the amount of checks needed to see if the PS has side effects or not.

When force-disabled, we will not set a pixel shader, thus you can be certain it's running as optimized as it can be. However beware if you rely on discard/alpha testing or any other side effect, it will not render correctly

Note: BlendChannelForceDisabled will be ignored if any of the other flags are set

Constructor & Destructor Documentation

◆ HlmsBlendblock()

Ogre::HlmsBlendblock::HlmsBlendblock ( )

Member Function Documentation

◆ calculateSeparateBlendMode()

void Ogre::HlmsBlendblock::calculateSeparateBlendMode ( )

Sets mSeparateBlend to true or false based on current settings.

◆ isAlphaToCoverage()

bool Ogre::HlmsBlendblock::isAlphaToCoverage ( const SampleDescription sd) const
inline

◆ isAutoTransparent()

bool Ogre::HlmsBlendblock::isAutoTransparent ( ) const
inline

◆ isForcedTransparent()

bool Ogre::HlmsBlendblock::isForcedTransparent ( ) const
inline

◆ operator!=()

◆ operator==()

bool Ogre::HlmsBlendblock::operator== ( const HlmsBlendblock _r) const
inline

◆ setBlendType() [1/2]

void Ogre::HlmsBlendblock::setBlendType ( SceneBlendType  blendType)

Shortcut to set the blend factors to common blending operations.

Sets both blend and alpha to the same value and mSeparateBlend is turned off.

◆ setBlendType() [2/2]

void Ogre::HlmsBlendblock::setBlendType ( SceneBlendType  colour,
SceneBlendType  alpha 
)

Shortcut to set the blend factors to common blending operations.

Sets colour and alpha individually, turns mSeparateBlend on.

◆ setForceTransparentRenderOrder()

void Ogre::HlmsBlendblock::setForceTransparentRenderOrder ( bool  bForceTransparent)

Sometimes you want to force the RenderQueue to render back to front even if the object isn't alpha blended (e.g., you're rendering refractive materials)

Parameters
bForceTransparentTrue to always render back to front, like any transparent. False for default behavior (opaque objects are rendered front to back, alpha blended objects are rendered back to front)

Member Data Documentation

◆ mAlphaToCoverage

uint8 Ogre::HlmsBlendblock::mAlphaToCoverage

Referenced by operator!=().

◆ mBlendChannelMask

uint8 Ogre::HlmsBlendblock::mBlendChannelMask

See A2CSetting.

Masks which colour channels will be writing to. Default: BlendChannelAll For some advanced effects, you may wish to turn off the writing of certain colour channels, or even all of the colour channels so that only the depth buffer is updated in a rendering pass (if depth writes are on; may be you want to only update the stencil buffer).

Referenced by operator!=().

◆ mBlendOperation

SceneBlendOperation Ogre::HlmsBlendblock::mBlendOperation

Referenced by operator!=().

◆ mBlendOperationAlpha

SceneBlendOperation Ogre::HlmsBlendblock::mBlendOperationAlpha

Referenced by operator!=().

◆ mDestBlendFactor

SceneBlendFactor Ogre::HlmsBlendblock::mDestBlendFactor

Referenced by operator!=().

◆ mDestBlendFactorAlpha

SceneBlendFactor Ogre::HlmsBlendblock::mDestBlendFactorAlpha

Referenced by operator!=().

◆ mIsTransparent

uint8 Ogre::HlmsBlendblock::mIsTransparent

This value calculated by HlmsManager::getBlendblock.

  • mIsTransparent = 0 -> Not transparent
  • mIsTransparent |= 1 -> Automatically determined as transparent
  • mIsTransparent |= 2 -> Forced to be considered as transparent by RenderQueue for render order
  • mIsTransparent = 3 -> Forced & also automatically determined as transparent

Referenced by operator!=().

◆ mSeparateBlend

bool Ogre::HlmsBlendblock::mSeparateBlend

Used to determine if separate alpha blending should be used for color and alpha channels.

Referenced by operator!=().

◆ mSourceBlendFactor

SceneBlendFactor Ogre::HlmsBlendblock::mSourceBlendFactor

Referenced by operator!=().

◆ mSourceBlendFactorAlpha

SceneBlendFactor Ogre::HlmsBlendblock::mSourceBlendFactorAlpha

Referenced by operator!=().


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