WIP
This commit is contained in:
committed by
Jérôme Leclercq
parent
4a10c1f8fe
commit
e990a320cc
@@ -21,8 +21,9 @@ namespace Nz
|
||||
{
|
||||
struct Binding
|
||||
{
|
||||
UInt32 setIndex = 0;
|
||||
UInt32 arraySize = 1;
|
||||
UInt32 bindingIndex;
|
||||
UInt32 setIndex = 0;
|
||||
ShaderBindingType type;
|
||||
nzsl::ShaderStageTypeFlags shaderStageFlags;
|
||||
};
|
||||
|
||||
@@ -20,13 +20,13 @@ namespace Nz
|
||||
struct RenderStates
|
||||
{
|
||||
ColorComponentMask colorWriteMask = ColorComponentAll;
|
||||
FaceCulling faceCulling = FaceCulling::Back;
|
||||
FaceFilling faceFilling = FaceFilling::Fill;
|
||||
FaceSide cullingSide = FaceSide::Back;
|
||||
FrontFace frontFace = FrontFace::CounterClockwise;
|
||||
RendererComparison depthCompare = RendererComparison::LessOrEqual;
|
||||
PrimitiveMode primitiveMode = PrimitiveMode::TriangleList;
|
||||
|
||||
struct
|
||||
struct
|
||||
{
|
||||
BlendEquation modeAlpha = BlendEquation::Add;
|
||||
BlendEquation modeColor = BlendEquation::Add;
|
||||
@@ -48,13 +48,15 @@ namespace Nz
|
||||
} stencilBack, stencilFront;
|
||||
|
||||
bool blending = false;
|
||||
bool depthBias = false;
|
||||
bool depthBuffer = false;
|
||||
bool depthClamp = false;
|
||||
bool depthWrite = true;
|
||||
bool faceCulling = false;
|
||||
bool scissorTest = false;
|
||||
bool stencilTest = false;
|
||||
|
||||
float depthBiasConstantFactor = 0.f;
|
||||
float depthBiasSlopeFactor = 0.f;
|
||||
float lineWidth = 1.f;
|
||||
float pointSize = 1.f;
|
||||
};
|
||||
|
||||
@@ -17,9 +17,9 @@ namespace Nz
|
||||
#define NazaraRenderStateFloatMember(field, maxDiff) if (!NumberEquals(lhs.field, rhs.field, maxDiff)) return false
|
||||
|
||||
NazaraRenderStateBoolMember(blending);
|
||||
NazaraRenderStateBoolMember(depthBias);
|
||||
NazaraRenderStateBoolMember(depthBuffer);
|
||||
NazaraRenderStateBoolMember(depthClamp);
|
||||
NazaraRenderStateBoolMember(faceCulling);
|
||||
NazaraRenderStateBoolMember(scissorTest);
|
||||
NazaraRenderStateBoolMember(stencilTest);
|
||||
|
||||
@@ -27,6 +27,7 @@ namespace Nz
|
||||
NazaraRenderStateBoolMember(depthWrite);
|
||||
|
||||
NazaraRenderStateMember(colorWriteMask);
|
||||
NazaraRenderStateMember(faceCulling);
|
||||
NazaraRenderStateMember(faceFilling);
|
||||
|
||||
if (lhs.blending) //< Remember, at this time we know lhs.blending == rhs.blending
|
||||
@@ -42,8 +43,11 @@ namespace Nz
|
||||
if (lhs.depthBuffer)
|
||||
NazaraRenderStateMember(depthCompare);
|
||||
|
||||
if (lhs.faceCulling)
|
||||
NazaraRenderStateMember(cullingSide);
|
||||
if (lhs.depthBias)
|
||||
{
|
||||
NazaraRenderStateMember(depthBiasConstantFactor);
|
||||
NazaraRenderStateMember(depthBiasSlopeFactor);
|
||||
}
|
||||
|
||||
if (lhs.stencilTest)
|
||||
{
|
||||
@@ -95,15 +99,16 @@ namespace std
|
||||
#define NazaraRenderStateUInt32(member) Nz::HashCombine(seed, pipelineInfo.member)
|
||||
|
||||
NazaraRenderStateBool(blending);
|
||||
NazaraRenderStateBool(depthBias);
|
||||
NazaraRenderStateBool(depthBuffer);
|
||||
NazaraRenderStateBool(depthClamp);
|
||||
NazaraRenderStateBool(faceCulling);
|
||||
NazaraRenderStateBool(scissorTest);
|
||||
NazaraRenderStateBool(stencilTest);
|
||||
|
||||
NazaraRenderStateBoolDep(depthBuffer, depthWrite);
|
||||
|
||||
NazaraRenderStateUInt8(colorWriteMask);
|
||||
NazaraRenderStateEnum(faceCulling);
|
||||
NazaraRenderStateEnum(faceFilling);
|
||||
|
||||
if (pipelineInfo.blending) //< we don't care about blending state if blending isn't enabled
|
||||
@@ -119,8 +124,11 @@ namespace std
|
||||
if (pipelineInfo.depthBuffer)
|
||||
NazaraRenderStateEnum(depthCompare);
|
||||
|
||||
if (pipelineInfo.faceCulling)
|
||||
NazaraRenderStateEnum(cullingSide);
|
||||
if (pipelineInfo.depthBias)
|
||||
{
|
||||
NazaraRenderStateFloat(depthBiasConstantFactor, 0.001f);
|
||||
NazaraRenderStateFloat(depthBiasSlopeFactor, 0.001f);
|
||||
}
|
||||
|
||||
if (pipelineInfo.stencilTest) //< we don't care about stencil state if stencil isn't enabled
|
||||
{
|
||||
|
||||
@@ -56,6 +56,12 @@ namespace Nz
|
||||
const TextureSampler* sampler;
|
||||
};
|
||||
|
||||
struct TextureBindings
|
||||
{
|
||||
UInt32 arraySize;
|
||||
const TextureBinding* textureBindings;
|
||||
};
|
||||
|
||||
struct UniformBufferBinding
|
||||
{
|
||||
RenderBuffer* buffer;
|
||||
@@ -66,7 +72,7 @@ namespace Nz
|
||||
struct Binding
|
||||
{
|
||||
UInt32 bindingIndex;
|
||||
std::variant<StorageBufferBinding, TextureBinding, UniformBufferBinding> content;
|
||||
std::variant<StorageBufferBinding, TextureBinding, TextureBindings, UniformBufferBinding> content;
|
||||
};
|
||||
|
||||
protected:
|
||||
|
||||
@@ -24,6 +24,8 @@ namespace Nz
|
||||
SamplerWrap wrapModeU = SamplerWrap::Clamp;
|
||||
SamplerWrap wrapModeV = SamplerWrap::Clamp;
|
||||
SamplerWrap wrapModeW = SamplerWrap::Clamp;
|
||||
bool depthCompare = false;
|
||||
RendererComparison depthComparison = RendererComparison::LessOrEqual;
|
||||
|
||||
inline bool operator==(const TextureSamplerInfo& samplerInfo) const;
|
||||
inline bool operator!=(const TextureSamplerInfo& samplerInfo) const;
|
||||
|
||||
@@ -32,6 +32,12 @@ namespace Nz
|
||||
if (wrapModeW != samplerInfo.wrapModeW)
|
||||
return false;
|
||||
|
||||
if (depthCompare != samplerInfo.depthCompare)
|
||||
return false;
|
||||
|
||||
if (depthComparison != samplerInfo.depthComparison)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -54,6 +60,8 @@ struct std::hash<Nz::TextureSamplerInfo>
|
||||
Nz::HashCombine(seed, sampler.wrapModeU);
|
||||
Nz::HashCombine(seed, sampler.wrapModeV);
|
||||
Nz::HashCombine(seed, sampler.wrapModeW);
|
||||
Nz::HashCombine(seed, sampler.depthCompare);
|
||||
Nz::HashCombine(seed, sampler.depthComparison);
|
||||
|
||||
return seed;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user