RenderStatePreset
Description
Enumeration of commonly used render state blocks.
An implementation of IRenderEffect should provide helper methods for applying render state values based on the items of this enumeration. Those should be named as RenderStateApply
. Unless stated otherwise, render state presets do not interfere with each other. When multiple presets are passed to that method, they are applied in the order in which they appear in this enumeration.
Public / Constants
AlphaBlending
Transparent geometry using alpha-blending, with anti-aliasing for line primitives (provided that the underlying graphics API supports it) when multi-sampling is not available.
This preset enables order-dependent alpha compositing with the over operator:
A_out = A_src + A_dst * (1 - A_src) C_out = (C_src * A_src + C_dst * A_dst * (1 - A_src)) / A_out
where (C_src,A_src)
represents the fragment that is being rasterized, (C_dst,A_dst)
represents the fragment that is present in the target buffer and (C_out,A_out)
represents the resulting fragment that will be written to the buffer. All three tuples use straight alpha. Assuming that the target buffer stores fragments with premultiplied alpha, the following applies:
C_dstPre = C_dst * A_dst C_outPre = C_out * A_out
This leads to the final equations that are actually performed by the GPU:
A_out = A_src + A_dst * (1 - A_src) C_outPre = C_src * A_src + C_dstPre * (1 - A_src)
Applying this state interferes with AlphaCoverage.
AlphaCoverage
Solid geometry using alpha-to-coverage.
Rendering solid geometry with implicit transparency via alpha-to-coverage requires multisampling (see IGraphicsContext.IsMultiSample and RenderTargetFormat.MultiSample), where the number of samples (see MultiSampleType.Count) depicts the effective alpha values that may be used. For example:
1 sample: 0%, 100% 2 samples: 0%, 50%, 100% 4 samples: 0%, 25%, 50%, 75%, 100% 8 samples: 0%, 13%, 25%, 38%, 50%, 63%, 75%, 88%, 100%
Applying this state interferes with AlphaBlending.
NoCulling
Disable triangle culling, which hides the effect of InverseCulling.