Renderer/RenderStates: Update RenderStates structure (preparing for renderer update)
Former-commit-id: 8839ceda70dfa0384e8da43205a208c89f1eb7bf [formerly f5434c9c44a52e02fdc6970e443cd7d3e9e99e6b] Former-commit-id: 6a4846a2e2c8b60160598812ebd02da17a2f6947
This commit is contained in:
@@ -19,11 +19,11 @@ namespace Nz
|
||||
RenderStates BuildRenderStates()
|
||||
{
|
||||
RenderStates states;
|
||||
states.cullingSide = FaceSide_Back;
|
||||
states.depthFunc = RendererComparison_Equal;
|
||||
states.faceCulling = FaceSide_Back;
|
||||
states.parameters[RendererParameter_DepthBuffer] = true;
|
||||
states.parameters[RendererParameter_DepthWrite] = false;
|
||||
states.parameters[RendererParameter_FaceCulling] = true;
|
||||
states.depthBuffer = true;
|
||||
states.depthWrite = false;
|
||||
states.faceCulling = true;
|
||||
|
||||
return states;
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ namespace Nz
|
||||
|
||||
m_bloomBrightShader = ShaderLibrary::Get("DeferredBloomBright");
|
||||
m_bloomFinalShader = ShaderLibrary::Get("DeferredBloomFinal");
|
||||
m_bloomStates.parameters[RendererParameter_DepthBuffer] = false;
|
||||
m_bloomStates.depthBuffer = false;
|
||||
m_gaussianBlurShader = ShaderLibrary::Get("DeferredGaussianBlur");
|
||||
m_gaussianBlurShaderFilterLocation = m_gaussianBlurShader->GetUniformLocation("Filter");
|
||||
|
||||
|
||||
@@ -127,7 +127,7 @@ namespace Nz
|
||||
m_pointSampler.SetFilterMode(SamplerFilter_Nearest);
|
||||
m_pointSampler.SetWrapMode(SamplerWrap_Clamp);
|
||||
|
||||
m_states.parameters[RendererParameter_DepthBuffer] = false;
|
||||
m_states.depthBuffer = false;
|
||||
}
|
||||
|
||||
DeferredDOFPass::~DeferredDOFPass() = default;
|
||||
|
||||
@@ -28,7 +28,7 @@ namespace Nz
|
||||
m_pointSampler.SetFilterMode(SamplerFilter_Nearest);
|
||||
m_pointSampler.SetWrapMode(SamplerWrap_Clamp);
|
||||
|
||||
m_states.parameters[RendererParameter_DepthBuffer] = false;
|
||||
m_states.depthBuffer = false;
|
||||
}
|
||||
|
||||
DeferredFXAAPass::~DeferredFXAAPass() = default;
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace Nz
|
||||
m_pointSampler.SetFilterMode(SamplerFilter_Nearest);
|
||||
m_pointSampler.SetWrapMode(SamplerWrap_Clamp);
|
||||
|
||||
m_states.parameters[RendererParameter_DepthBuffer] = false;
|
||||
m_states.depthBuffer = false;
|
||||
|
||||
m_uberShader = UberShaderLibrary::Get("Basic");
|
||||
|
||||
|
||||
@@ -141,7 +141,7 @@ namespace Nz
|
||||
m_shader = BuildFogShader();
|
||||
m_shaderEyePositionLocation = m_shader->GetUniformLocation("EyePosition");
|
||||
|
||||
m_states.parameters[RendererParameter_DepthBuffer] = false;
|
||||
m_states.depthBuffer = false;
|
||||
}
|
||||
|
||||
DeferredFogPass::~DeferredFogPass() = default;
|
||||
|
||||
@@ -31,12 +31,12 @@ namespace Nz
|
||||
DeferredGeometryPass::DeferredGeometryPass()
|
||||
{
|
||||
m_clearShader = ShaderLibrary::Get("DeferredGBufferClear");
|
||||
m_clearStates.parameters[RendererParameter_DepthBuffer] = true;
|
||||
m_clearStates.parameters[RendererParameter_FaceCulling] = true;
|
||||
m_clearStates.parameters[RendererParameter_StencilTest] = true;
|
||||
m_clearStates.depthBuffer = true;
|
||||
m_clearStates.faceCulling = true;
|
||||
m_clearStates.stencilTest = true;
|
||||
m_clearStates.depthFunc = RendererComparison_Always;
|
||||
m_clearStates.frontFace.stencilCompare = RendererComparison_Always;
|
||||
m_clearStates.frontFace.stencilPass = StencilOperation_Zero;
|
||||
m_clearStates.stencilCompare.front = RendererComparison_Always;
|
||||
m_clearStates.stencilPass.front = StencilOperation_Zero;
|
||||
}
|
||||
|
||||
DeferredGeometryPass::~DeferredGeometryPass() = default;
|
||||
|
||||
@@ -120,9 +120,9 @@ namespace Nz
|
||||
RenderStates lightStates;
|
||||
lightStates.dstBlend = BlendFunc_One;
|
||||
lightStates.srcBlend = BlendFunc_One;
|
||||
lightStates.parameters[RendererParameter_Blend] = true;
|
||||
lightStates.parameters[RendererParameter_DepthBuffer] = false;
|
||||
lightStates.parameters[RendererParameter_DepthWrite] = false;
|
||||
lightStates.blending = true;
|
||||
lightStates.depthBuffer = false;
|
||||
lightStates.depthWrite = false;
|
||||
|
||||
// Directional lights
|
||||
if (!m_renderQueue->directionalLights.empty())
|
||||
@@ -146,18 +146,18 @@ namespace Nz
|
||||
if (!m_renderQueue->pointLights.empty() || !m_renderQueue->spotLights.empty())
|
||||
{
|
||||
// http://www.altdevblogaday.com/2011/08/08/stencil-buffer-optimisation-for-deferred-lights/
|
||||
lightStates.parameters[RendererParameter_StencilTest] = true;
|
||||
lightStates.faceCulling = FaceSide_Front;
|
||||
lightStates.backFace.stencilMask = 0xFF;
|
||||
lightStates.backFace.stencilReference = 0;
|
||||
lightStates.backFace.stencilFail = StencilOperation_Keep;
|
||||
lightStates.backFace.stencilPass = StencilOperation_Keep;
|
||||
lightStates.backFace.stencilZFail = StencilOperation_Invert;
|
||||
lightStates.frontFace.stencilMask = 0xFF;
|
||||
lightStates.frontFace.stencilReference = 0;
|
||||
lightStates.frontFace.stencilFail = StencilOperation_Keep;
|
||||
lightStates.frontFace.stencilPass = StencilOperation_Keep;
|
||||
lightStates.frontFace.stencilZFail = StencilOperation_Invert;
|
||||
lightStates.cullingSide = FaceSide_Front;
|
||||
lightStates.stencilTest = true;
|
||||
lightStates.stencilDepthFail.back = StencilOperation_Invert;
|
||||
lightStates.stencilDepthFail.front = StencilOperation_Invert;
|
||||
lightStates.stencilFail.back = StencilOperation_Keep;
|
||||
lightStates.stencilFail.front = StencilOperation_Keep;
|
||||
lightStates.stencilPass.back = StencilOperation_Keep;
|
||||
lightStates.stencilPass.front = StencilOperation_Keep;
|
||||
lightStates.stencilReference.back = 0;
|
||||
lightStates.stencilReference.front = 0;
|
||||
lightStates.stencilWriteMask.back = 0xFF;
|
||||
lightStates.stencilWriteMask.front = 0xFF;
|
||||
|
||||
Renderer::SetRenderStates(lightStates);
|
||||
|
||||
|
||||
@@ -252,41 +252,41 @@ namespace Nz
|
||||
|
||||
// Stencil
|
||||
if (matData.GetIntegerParameter(MaterialData::StencilCompare, &iValue))
|
||||
m_states.frontFace.stencilCompare = static_cast<RendererComparison>(iValue);
|
||||
m_states.stencilCompare.front = static_cast<RendererComparison>(iValue);
|
||||
|
||||
if (matData.GetIntegerParameter(MaterialData::StencilFail, &iValue))
|
||||
m_states.frontFace.stencilFail = static_cast<StencilOperation>(iValue);
|
||||
m_states.stencilFail.front = static_cast<StencilOperation>(iValue);
|
||||
|
||||
if (matData.GetIntegerParameter(MaterialData::StencilPass, &iValue))
|
||||
m_states.frontFace.stencilPass = static_cast<StencilOperation>(iValue);
|
||||
m_states.stencilPass.front = static_cast<StencilOperation>(iValue);
|
||||
|
||||
if (matData.GetIntegerParameter(MaterialData::StencilZFail, &iValue))
|
||||
m_states.frontFace.stencilZFail = static_cast<StencilOperation>(iValue);
|
||||
m_states.stencilDepthFail.front = static_cast<StencilOperation>(iValue);
|
||||
|
||||
if (matData.GetIntegerParameter(MaterialData::StencilMask, &iValue))
|
||||
m_states.frontFace.stencilMask = static_cast<UInt32>(iValue);
|
||||
m_states.stencilWriteMask.front = static_cast<UInt32>(iValue);
|
||||
|
||||
if (matData.GetIntegerParameter(MaterialData::StencilReference, &iValue))
|
||||
m_states.frontFace.stencilReference = static_cast<unsigned int>(iValue);
|
||||
m_states.stencilReference.front = static_cast<unsigned int>(iValue);
|
||||
|
||||
// Stencil (back)
|
||||
if (matData.GetIntegerParameter(MaterialData::BackFaceStencilCompare, &iValue))
|
||||
m_states.backFace.stencilCompare = static_cast<RendererComparison>(iValue);
|
||||
m_states.stencilCompare.back = static_cast<RendererComparison>(iValue);
|
||||
|
||||
if (matData.GetIntegerParameter(MaterialData::BackFaceStencilFail, &iValue))
|
||||
m_states.backFace.stencilFail = static_cast<StencilOperation>(iValue);
|
||||
m_states.stencilFail.back = static_cast<StencilOperation>(iValue);
|
||||
|
||||
if (matData.GetIntegerParameter(MaterialData::BackFaceStencilPass, &iValue))
|
||||
m_states.backFace.stencilPass = static_cast<StencilOperation>(iValue);
|
||||
m_states.stencilPass.back = static_cast<StencilOperation>(iValue);
|
||||
|
||||
if (matData.GetIntegerParameter(MaterialData::BackFaceStencilZFail, &iValue))
|
||||
m_states.backFace.stencilZFail = static_cast<StencilOperation>(iValue);
|
||||
m_states.stencilDepthFail.back = static_cast<StencilOperation>(iValue);
|
||||
|
||||
if (matData.GetIntegerParameter(MaterialData::BackFaceStencilMask, &iValue))
|
||||
m_states.backFace.stencilMask = static_cast<UInt32>(iValue);
|
||||
m_states.stencilWriteMask.back = static_cast<UInt32>(iValue);
|
||||
|
||||
if (matData.GetIntegerParameter(MaterialData::BackFaceStencilReference, &iValue))
|
||||
m_states.backFace.stencilReference = static_cast<unsigned int>(iValue);
|
||||
m_states.stencilReference.back = static_cast<unsigned int>(iValue);
|
||||
|
||||
// Textures
|
||||
if (matParams.loadAlphaMap && matData.GetStringParameter(MaterialData::AlphaTexturePath, &path))
|
||||
@@ -332,13 +332,13 @@ namespace Nz
|
||||
matData->SetParameter(MaterialData::Transform, IsTransformEnabled());
|
||||
|
||||
// RendererParameter
|
||||
matData->SetParameter(MaterialData::Blending, GetRenderStates().parameters[RendererParameter_Blend]);
|
||||
matData->SetParameter(MaterialData::ColorWrite, GetRenderStates().parameters[RendererParameter_ColorWrite]);
|
||||
matData->SetParameter(MaterialData::DepthBuffer, GetRenderStates().parameters[RendererParameter_DepthBuffer]);
|
||||
matData->SetParameter(MaterialData::DepthWrite, GetRenderStates().parameters[RendererParameter_DepthWrite]);
|
||||
matData->SetParameter(MaterialData::FaceCulling, GetRenderStates().parameters[RendererParameter_FaceCulling]);
|
||||
matData->SetParameter(MaterialData::ScissorTest, GetRenderStates().parameters[RendererParameter_ScissorTest]);
|
||||
matData->SetParameter(MaterialData::StencilTest, GetRenderStates().parameters[RendererParameter_StencilTest]);
|
||||
matData->SetParameter(MaterialData::Blending, GetRenderStates().blending);
|
||||
matData->SetParameter(MaterialData::ColorWrite, GetRenderStates().colorWrite);
|
||||
matData->SetParameter(MaterialData::DepthBuffer, GetRenderStates().depthBuffer);
|
||||
matData->SetParameter(MaterialData::DepthWrite, GetRenderStates().depthWrite);
|
||||
matData->SetParameter(MaterialData::FaceCulling, GetRenderStates().faceCulling);
|
||||
matData->SetParameter(MaterialData::ScissorTest, GetRenderStates().scissorTest);
|
||||
matData->SetParameter(MaterialData::StencilTest, GetRenderStates().stencilTest);
|
||||
|
||||
// Samplers
|
||||
matData->SetParameter(MaterialData::DiffuseAnisotropyLevel, int(GetDiffuseSampler().GetAnisotropicLevel()));
|
||||
@@ -350,20 +350,20 @@ namespace Nz
|
||||
matData->SetParameter(MaterialData::SpecularWrap, int(GetSpecularSampler().GetWrapMode()));
|
||||
|
||||
// Stencil
|
||||
matData->SetParameter(MaterialData::StencilCompare, int(GetRenderStates().frontFace.stencilCompare));
|
||||
matData->SetParameter(MaterialData::StencilFail, int(GetRenderStates().frontFace.stencilFail));
|
||||
matData->SetParameter(MaterialData::StencilPass, int(GetRenderStates().frontFace.stencilPass));
|
||||
matData->SetParameter(MaterialData::StencilZFail, int(GetRenderStates().frontFace.stencilZFail));
|
||||
matData->SetParameter(MaterialData::StencilMask, int(GetRenderStates().frontFace.stencilMask));
|
||||
matData->SetParameter(MaterialData::StencilReference, int(GetRenderStates().frontFace.stencilReference));
|
||||
matData->SetParameter(MaterialData::StencilCompare, int(GetRenderStates().stencilCompare.front));
|
||||
matData->SetParameter(MaterialData::StencilFail, int(GetRenderStates().stencilFail.front));
|
||||
matData->SetParameter(MaterialData::StencilPass, int(GetRenderStates().stencilPass.front));
|
||||
matData->SetParameter(MaterialData::StencilZFail, int(GetRenderStates().stencilDepthFail.front));
|
||||
matData->SetParameter(MaterialData::StencilMask, int(GetRenderStates().stencilWriteMask.front));
|
||||
matData->SetParameter(MaterialData::StencilReference, int(GetRenderStates().stencilReference.front));
|
||||
|
||||
// Stencil (back)
|
||||
matData->SetParameter(MaterialData::BackFaceStencilCompare, int(GetRenderStates().backFace.stencilCompare));
|
||||
matData->SetParameter(MaterialData::BackFaceStencilFail, int(GetRenderStates().backFace.stencilFail));
|
||||
matData->SetParameter(MaterialData::BackFaceStencilPass, int(GetRenderStates().backFace.stencilPass));
|
||||
matData->SetParameter(MaterialData::BackFaceStencilZFail, int(GetRenderStates().backFace.stencilZFail));
|
||||
matData->SetParameter(MaterialData::BackFaceStencilMask, int(GetRenderStates().backFace.stencilMask));
|
||||
matData->SetParameter(MaterialData::BackFaceStencilReference, int(GetRenderStates().backFace.stencilReference));
|
||||
matData->SetParameter(MaterialData::BackFaceStencilCompare, int(GetRenderStates().stencilCompare.back));
|
||||
matData->SetParameter(MaterialData::BackFaceStencilFail, int(GetRenderStates().stencilFail.back));
|
||||
matData->SetParameter(MaterialData::BackFaceStencilPass, int(GetRenderStates().stencilPass.back));
|
||||
matData->SetParameter(MaterialData::BackFaceStencilZFail, int(GetRenderStates().stencilDepthFail.back));
|
||||
matData->SetParameter(MaterialData::BackFaceStencilMask, int(GetRenderStates().stencilWriteMask.back));
|
||||
matData->SetParameter(MaterialData::BackFaceStencilReference, int(GetRenderStates().stencilReference.back));
|
||||
|
||||
// Textures
|
||||
if (HasAlphaMap())
|
||||
@@ -441,8 +441,8 @@ namespace Nz
|
||||
m_specularColor = Color::White;
|
||||
m_specularSampler = TextureSampler();
|
||||
m_states = RenderStates();
|
||||
m_states.parameters[RendererParameter_DepthBuffer] = true;
|
||||
m_states.parameters[RendererParameter_FaceCulling] = true;
|
||||
m_states.depthBuffer = true;
|
||||
m_states.faceCulling = true;
|
||||
m_transformEnabled = true;
|
||||
|
||||
SetShader("Basic");
|
||||
|
||||
@@ -181,10 +181,10 @@ namespace Nz
|
||||
|
||||
// Renderstates
|
||||
s_renderStates.depthFunc = RendererComparison_Equal;
|
||||
s_renderStates.faceCulling = FaceSide_Front;
|
||||
s_renderStates.parameters[RendererParameter_DepthBuffer] = true;
|
||||
s_renderStates.parameters[RendererParameter_DepthWrite] = false;
|
||||
s_renderStates.parameters[RendererParameter_FaceCulling] = true;
|
||||
s_renderStates.cullingSide = FaceSide_Front;
|
||||
s_renderStates.depthBuffer = true;
|
||||
s_renderStates.depthWrite = false;
|
||||
s_renderStates.faceCulling = true;
|
||||
|
||||
// Exception-free zone
|
||||
s_indexBuffer = std::move(indexBuffer);
|
||||
|
||||
@@ -20,10 +20,10 @@ namespace Nz
|
||||
{
|
||||
RenderStates states;
|
||||
states.depthFunc = RendererComparison_Equal;
|
||||
states.faceCulling = FaceSide_Back;
|
||||
states.parameters[RendererParameter_DepthBuffer] = true;
|
||||
states.parameters[RendererParameter_DepthWrite] = false;
|
||||
states.parameters[RendererParameter_FaceCulling] = true;
|
||||
states.cullingSide = FaceSide_Back;
|
||||
states.depthBuffer = true;
|
||||
states.depthWrite = false;
|
||||
states.faceCulling = true;
|
||||
|
||||
return states;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user