Graphics: Add PredefinedSkeletalData
This commit is contained in:
parent
987c23c3ef
commit
7ada266917
|
|
@ -147,7 +147,7 @@ int main()
|
|||
std::shared_ptr<Nz::Material> bobMat = std::make_shared<Nz::Material>();
|
||||
|
||||
std::shared_ptr<Nz::MaterialPass> bobMatPass = std::make_shared<Nz::MaterialPass>(Nz::BasicMaterial::GetSettings());
|
||||
bobMatPass->SetSharedUniformBuffer(0, renderBuffer);
|
||||
bobMatPass->SetSharedUniformBuffer(1, renderBuffer);
|
||||
|
||||
bobMatPass->EnableDepthBuffer(true);
|
||||
{
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@
|
|||
#include <Nazara/Prerequisites.hpp>
|
||||
#include <Nazara/Graphics/BakedFrameGraph.hpp>
|
||||
#include <Nazara/Graphics/Config.hpp>
|
||||
#include <Nazara/Graphics/DepthPipelinePass.hpp>
|
||||
#include <Nazara/Graphics/DebugDrawPipelinePass.hpp>
|
||||
#include <Nazara/Graphics/DepthPipelinePass.hpp>
|
||||
#include <Nazara/Graphics/ElementRenderer.hpp>
|
||||
#include <Nazara/Graphics/ForwardPipelinePass.hpp>
|
||||
#include <Nazara/Graphics/FramePipeline.hpp>
|
||||
|
|
|
|||
|
|
@ -48,6 +48,17 @@ namespace Nz
|
|||
static MaterialSettings::SharedUniformBlock GetUniformBlock(UInt32 bindingIndex, nzsl::ShaderStageTypeFlags shaderStages);
|
||||
};
|
||||
|
||||
struct NAZARA_GRAPHICS_API PredefinedSkeletalData
|
||||
{
|
||||
std::size_t totalSize;
|
||||
std::size_t jointMatricesOffset;
|
||||
|
||||
static constexpr std::size_t MaxMatricesCount = 256;
|
||||
|
||||
static PredefinedSkeletalData GetOffsets();
|
||||
static MaterialSettings::SharedUniformBlock GetUniformBlock(UInt32 bindingIndex, nzsl::ShaderStageTypeFlags shaderStages);
|
||||
};
|
||||
|
||||
struct NAZARA_GRAPHICS_API PredefinedViewerData
|
||||
{
|
||||
std::size_t eyePositionOffset;
|
||||
|
|
|
|||
|
|
@ -151,16 +151,6 @@ namespace Nz
|
|||
options.defaultValues
|
||||
});
|
||||
|
||||
nzsl::FieldOffsets skeletalOffsets(nzsl::StructLayout::Std140);
|
||||
skeletalOffsets.AddMatrixArray(nzsl::StructFieldType::Float1, 4, 4, true, 100);
|
||||
|
||||
settings.sharedUniformBlocks.push_back({
|
||||
6,
|
||||
"SkeletalData",
|
||||
{},
|
||||
nzsl::ShaderStageType::Vertex
|
||||
});
|
||||
|
||||
// Common data
|
||||
settings.textures.push_back({
|
||||
3,
|
||||
|
|
@ -169,12 +159,12 @@ namespace Nz
|
|||
});
|
||||
|
||||
settings.sharedUniformBlocks.push_back(PredefinedInstanceData::GetUniformBlock(4, nzsl::ShaderStageType::Vertex));
|
||||
settings.sharedUniformBlocks.push_back(PredefinedSkeletalData::GetUniformBlock(6, nzsl::ShaderStageType::Vertex));
|
||||
settings.sharedUniformBlocks.push_back(PredefinedViewerData::GetUniformBlock(5, nzsl::ShaderStageType_All));
|
||||
//settings.sharedUniformBlocks.push_back(PredefinedInstanceData::GetUniformBlock(6, nzsl::ShaderStageType::Vertex));
|
||||
|
||||
settings.predefinedBindings[UnderlyingCast(PredefinedShaderBinding::InstanceDataUbo)] = 4;
|
||||
settings.predefinedBindings[UnderlyingCast(PredefinedShaderBinding::OverlayTexture)] = 3;
|
||||
//settings.predefinedBindings[UnderlyingCast(PredefinedShaderBinding::SkeletalDataUbo)] = 6;
|
||||
settings.predefinedBindings[UnderlyingCast(PredefinedShaderBinding::SkeletalDataUbo)] = 6;
|
||||
settings.predefinedBindings[UnderlyingCast(PredefinedShaderBinding::ViewerDataUbo)] = 5;
|
||||
|
||||
settings.shaders = options.shaders;
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
|
||||
namespace Nz
|
||||
{
|
||||
// PredefinedLightData
|
||||
PredefinedLightData PredefinedLightData::GetOffsets()
|
||||
{
|
||||
PredefinedLightData lightData;
|
||||
|
|
@ -51,6 +52,7 @@ namespace Nz
|
|||
return uniformBlock;
|
||||
}
|
||||
|
||||
// PredefinedInstanceData
|
||||
PredefinedInstanceData PredefinedInstanceData::GetOffsets()
|
||||
{
|
||||
nzsl::FieldOffsets viewerStruct(nzsl::StructLayout::Std140);
|
||||
|
|
@ -85,6 +87,40 @@ namespace Nz
|
|||
return uniformBlock;
|
||||
}
|
||||
|
||||
// PredefinedSkeletalData
|
||||
PredefinedSkeletalData PredefinedSkeletalData::GetOffsets()
|
||||
{
|
||||
nzsl::FieldOffsets skeletalStruct(nzsl::StructLayout::Std140);
|
||||
|
||||
PredefinedSkeletalData skeletalData;
|
||||
skeletalData.jointMatricesOffset = skeletalStruct.AddMatrixArray(nzsl::StructFieldType::Float1, 4, 4, true, 100);
|
||||
|
||||
skeletalData.totalSize = skeletalStruct.GetAlignedSize();
|
||||
|
||||
return skeletalData;
|
||||
}
|
||||
|
||||
MaterialSettings::SharedUniformBlock PredefinedSkeletalData::GetUniformBlock(UInt32 bindingIndex, nzsl::ShaderStageTypeFlags shaderStages)
|
||||
{
|
||||
PredefinedSkeletalData skeletalData = GetOffsets();
|
||||
|
||||
std::vector<MaterialSettings::UniformVariable> variables = {
|
||||
{
|
||||
{ "JointMatrices", skeletalData.jointMatricesOffset }
|
||||
}
|
||||
};
|
||||
|
||||
MaterialSettings::SharedUniformBlock uniformBlock = {
|
||||
bindingIndex,
|
||||
"SkeletalData",
|
||||
std::move(variables),
|
||||
shaderStages
|
||||
};
|
||||
|
||||
return uniformBlock;
|
||||
}
|
||||
|
||||
// PredefinedViewerData
|
||||
PredefinedViewerData PredefinedViewerData::GetOffsets()
|
||||
{
|
||||
nzsl::FieldOffsets viewerStruct(nzsl::StructLayout::Std140);
|
||||
|
|
@ -132,5 +168,4 @@ namespace Nz
|
|||
|
||||
return uniformBlock;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
[nzsl_version("1.0")]
|
||||
module Engine.SkeletalData;
|
||||
|
||||
const MaxJointCount: u32 = u32(200); //< FIXME: Fix integral value types
|
||||
// The minimum guaranteed UBO size by OpenGL and Vulkan is 16384, which is enough to store 256 4x4 matrices
|
||||
// We could store a bit more using mat3x4 matrices (341) but 256 bones is already a quite high limit for now
|
||||
const MaxJointCount: u32 = u32(256); //< FIXME: Fix integral value types
|
||||
|
||||
[export]
|
||||
[layout(std140)]
|
||||
|
|
|
|||
Loading…
Reference in New Issue