Made stencil per face side
Former-commit-id: 093f2125886d47ebc79f97aaecfad3a5216f399a
This commit is contained in:
@@ -17,20 +17,26 @@ struct NzRenderStates
|
||||
|
||||
NzRenderStates& operator=(const NzRenderStates& states);
|
||||
|
||||
struct Face
|
||||
{
|
||||
nzRendererComparison stencilCompare;
|
||||
nzStencilOperation stencilFail;
|
||||
nzStencilOperation stencilPass;
|
||||
nzStencilOperation stencilZFail;
|
||||
nzUInt32 stencilMask;
|
||||
unsigned int stencilReference;
|
||||
};
|
||||
|
||||
Face backFace;
|
||||
Face frontFace;
|
||||
nzBlendFunc dstBlend;
|
||||
nzBlendFunc srcBlend;
|
||||
nzFaceFilling faceFilling;
|
||||
nzFaceSide faceCulling;
|
||||
nzRendererComparison depthFunc;
|
||||
nzRendererComparison stencilCompare;
|
||||
nzStencilOperation stencilFail;
|
||||
nzStencilOperation stencilPass;
|
||||
nzStencilOperation stencilZFail;
|
||||
nzUInt32 stencilMask;
|
||||
bool parameters[nzRendererParameter_Max+1];
|
||||
float lineWidth;
|
||||
float pointSize;
|
||||
unsigned int stencilReference;
|
||||
};
|
||||
|
||||
#include <Nazara/Renderer/RenderStates.inl>
|
||||
|
||||
@@ -11,14 +11,8 @@ srcBlend(nzBlendFunc_One),
|
||||
faceFilling(nzFaceFilling_Fill),
|
||||
faceCulling(nzFaceSide_Back),
|
||||
depthFunc(nzRendererComparison_Less),
|
||||
stencilCompare(nzRendererComparison_Always),
|
||||
stencilFail(nzStencilOperation_Keep),
|
||||
stencilPass(nzStencilOperation_Keep),
|
||||
stencilZFail(nzStencilOperation_Keep),
|
||||
stencilMask(0xFFFFFFFF),
|
||||
lineWidth(1.f),
|
||||
pointSize(1.f),
|
||||
stencilReference(0)
|
||||
pointSize(1.f)
|
||||
{
|
||||
parameters[nzRendererParameter_Blend] = false;
|
||||
parameters[nzRendererParameter_ColorWrite] = true;
|
||||
@@ -27,6 +21,18 @@ stencilReference(0)
|
||||
parameters[nzRendererParameter_FaceCulling] = false;
|
||||
parameters[nzRendererParameter_ScissorTest] = false;
|
||||
parameters[nzRendererParameter_StencilTest] = false;
|
||||
|
||||
for (unsigned int i = 0; i < 2; ++i)
|
||||
{
|
||||
Face& face = (i == 0) ? backFace : frontFace;
|
||||
|
||||
face.stencilCompare = nzRendererComparison_Always;
|
||||
face.stencilFail = nzStencilOperation_Keep;
|
||||
face.stencilMask = 0xFFFFFFFF;
|
||||
face.stencilPass = nzStencilOperation_Keep;
|
||||
face.stencilReference = 0;
|
||||
face.stencilZFail = nzStencilOperation_Keep;
|
||||
}
|
||||
}
|
||||
|
||||
inline NzRenderStates::NzRenderStates(const NzRenderStates& states)
|
||||
|
||||
@@ -88,12 +88,12 @@ class NAZARA_API NzRenderer
|
||||
static void SetRenderStates(const NzRenderStates& states);
|
||||
static void SetScissorRect(const NzRecti& rect);
|
||||
static void SetShaderProgram(const NzShaderProgram* shader);
|
||||
static void SetStencilCompareFunction(nzRendererComparison compareFunc);
|
||||
static void SetStencilFailOperation(nzStencilOperation failOperation);
|
||||
static void SetStencilMask(nzUInt32 mask);
|
||||
static void SetStencilPassOperation(nzStencilOperation passOperation);
|
||||
static void SetStencilReferenceValue(unsigned int refValue);
|
||||
static void SetStencilZFailOperation(nzStencilOperation zfailOperation);
|
||||
static void SetStencilCompareFunction(nzRendererComparison compareFunc, nzFaceSide faceSide = nzFaceSide_FrontAndBack);
|
||||
static void SetStencilFailOperation(nzStencilOperation failOperation, nzFaceSide faceSide = nzFaceSide_FrontAndBack);
|
||||
static void SetStencilMask(nzUInt32 mask, nzFaceSide faceSide = nzFaceSide_FrontAndBack);
|
||||
static void SetStencilPassOperation(nzStencilOperation passOperation, nzFaceSide faceSide = nzFaceSide_FrontAndBack);
|
||||
static void SetStencilReferenceValue(unsigned int refValue, nzFaceSide faceSide = nzFaceSide_FrontAndBack);
|
||||
static void SetStencilZFailOperation(nzStencilOperation zfailOperation, nzFaceSide faceSide = nzFaceSide_FrontAndBack);
|
||||
static bool SetTarget(const NzRenderTarget* target);
|
||||
static void SetTexture(nzUInt8 unit, const NzTexture* texture);
|
||||
static void SetTextureSampler(nzUInt8 textureUnit, const NzTextureSampler& sampler);
|
||||
|
||||
Reference in New Issue
Block a user