Refactor material system (#382)
This commit is contained in:
@@ -24,6 +24,24 @@ namespace Nz
|
||||
Store
|
||||
};
|
||||
|
||||
enum class ColorComponent
|
||||
{
|
||||
Red,
|
||||
Green,
|
||||
Blue,
|
||||
Alpha
|
||||
};
|
||||
|
||||
template<>
|
||||
struct EnumAsFlags<ColorComponent>
|
||||
{
|
||||
static constexpr ColorComponent max = ColorComponent::Alpha;
|
||||
};
|
||||
|
||||
using ColorComponentMask = Flags<ColorComponent>;
|
||||
|
||||
constexpr ColorComponentMask ColorComponentAll = ColorComponent::Red | ColorComponent::Green | ColorComponent::Blue | ColorComponent::Alpha;
|
||||
|
||||
enum class FramebufferType
|
||||
{
|
||||
Texture,
|
||||
|
||||
@@ -23,6 +23,7 @@ namespace Nz
|
||||
|
||||
struct RenderDeviceLimits
|
||||
{
|
||||
UInt64 minStorageBufferOffsetAlignment;
|
||||
UInt64 minUniformBufferOffsetAlignment;
|
||||
UInt64 maxStorageBufferSize;
|
||||
UInt64 maxUniformBufferSize;
|
||||
|
||||
@@ -19,6 +19,7 @@ namespace Nz
|
||||
|
||||
struct RenderStates
|
||||
{
|
||||
ColorComponentMask colorWriteMask = ColorComponentAll;
|
||||
FaceFilling faceFilling = FaceFilling::Fill;
|
||||
FaceSide cullingSide = FaceSide::Back;
|
||||
FrontFace frontFace = FrontFace::CounterClockwise;
|
||||
@@ -47,7 +48,6 @@ namespace Nz
|
||||
} stencilBack, stencilFront;
|
||||
|
||||
bool blending = false;
|
||||
bool colorWrite = true;
|
||||
bool depthBuffer = false;
|
||||
bool depthClamp = false;
|
||||
bool depthWrite = true;
|
||||
|
||||
@@ -17,7 +17,6 @@ namespace Nz
|
||||
#define NazaraRenderStateFloatMember(field, maxDiff) if (!NumberEquals(lhs.field, rhs.field, maxDiff)) return false
|
||||
|
||||
NazaraRenderStateBoolMember(blending);
|
||||
NazaraRenderStateBoolMember(colorWrite);
|
||||
NazaraRenderStateBoolMember(depthBuffer);
|
||||
NazaraRenderStateBoolMember(depthClamp);
|
||||
NazaraRenderStateBoolMember(faceCulling);
|
||||
@@ -27,6 +26,7 @@ namespace Nz
|
||||
if (lhs.depthBuffer)
|
||||
NazaraRenderStateBoolMember(depthWrite);
|
||||
|
||||
NazaraRenderStateMember(colorWriteMask);
|
||||
NazaraRenderStateMember(faceFilling);
|
||||
|
||||
if (lhs.blending) //< Remember, at this time we know lhs.blending == rhs.blending
|
||||
@@ -91,10 +91,10 @@ namespace std
|
||||
#define NazaraRenderStateBoolDep(dependency, member) parameterHash |= ((pipelineInfo.dependency && pipelineInfo.member) ? 1U : 0U) << (parameterIndex++)
|
||||
#define NazaraRenderStateEnum(member) Nz::HashCombine(seed, static_cast<Nz::UInt8>(pipelineInfo.member))
|
||||
#define NazaraRenderStateFloat(member, maxDiff) Nz::HashCombine(seed, std::floor(pipelineInfo.member / maxDiff) * maxDiff)
|
||||
#define NazaraRenderStateUInt8(member) Nz::HashCombine(seed, pipelineInfo.member)
|
||||
#define NazaraRenderStateUInt32(member) Nz::HashCombine(seed, pipelineInfo.member)
|
||||
|
||||
NazaraRenderStateBool(blending);
|
||||
NazaraRenderStateBool(colorWrite);
|
||||
NazaraRenderStateBool(depthBuffer);
|
||||
NazaraRenderStateBool(depthClamp);
|
||||
NazaraRenderStateBool(faceCulling);
|
||||
@@ -103,6 +103,7 @@ namespace std
|
||||
|
||||
NazaraRenderStateBoolDep(depthBuffer, depthWrite);
|
||||
|
||||
NazaraRenderStateUInt8(colorWriteMask);
|
||||
NazaraRenderStateEnum(faceFilling);
|
||||
|
||||
if (pipelineInfo.blending) //< we don't care about blending state if blending isn't enabled
|
||||
|
||||
@@ -62,7 +62,7 @@ namespace Nz
|
||||
|
||||
struct Binding
|
||||
{
|
||||
std::size_t bindingIndex;
|
||||
UInt32 bindingIndex;
|
||||
std::variant<StorageBufferBinding, TextureBinding, UniformBufferBinding> content;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user