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::Material> bobMat = std::make_shared<Nz::Material>();
|
||||||
|
|
||||||
std::shared_ptr<Nz::MaterialPass> bobMatPass = std::make_shared<Nz::MaterialPass>(Nz::BasicMaterial::GetSettings());
|
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);
|
bobMatPass->EnableDepthBuffer(true);
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,8 @@
|
||||||
#include <Nazara/Prerequisites.hpp>
|
#include <Nazara/Prerequisites.hpp>
|
||||||
#include <Nazara/Graphics/BakedFrameGraph.hpp>
|
#include <Nazara/Graphics/BakedFrameGraph.hpp>
|
||||||
#include <Nazara/Graphics/Config.hpp>
|
#include <Nazara/Graphics/Config.hpp>
|
||||||
#include <Nazara/Graphics/DepthPipelinePass.hpp>
|
|
||||||
#include <Nazara/Graphics/DebugDrawPipelinePass.hpp>
|
#include <Nazara/Graphics/DebugDrawPipelinePass.hpp>
|
||||||
|
#include <Nazara/Graphics/DepthPipelinePass.hpp>
|
||||||
#include <Nazara/Graphics/ElementRenderer.hpp>
|
#include <Nazara/Graphics/ElementRenderer.hpp>
|
||||||
#include <Nazara/Graphics/ForwardPipelinePass.hpp>
|
#include <Nazara/Graphics/ForwardPipelinePass.hpp>
|
||||||
#include <Nazara/Graphics/FramePipeline.hpp>
|
#include <Nazara/Graphics/FramePipeline.hpp>
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,17 @@ namespace Nz
|
||||||
static MaterialSettings::SharedUniformBlock GetUniformBlock(UInt32 bindingIndex, nzsl::ShaderStageTypeFlags shaderStages);
|
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
|
struct NAZARA_GRAPHICS_API PredefinedViewerData
|
||||||
{
|
{
|
||||||
std::size_t eyePositionOffset;
|
std::size_t eyePositionOffset;
|
||||||
|
|
|
||||||
|
|
@ -151,16 +151,6 @@ namespace Nz
|
||||||
options.defaultValues
|
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
|
// Common data
|
||||||
settings.textures.push_back({
|
settings.textures.push_back({
|
||||||
3,
|
3,
|
||||||
|
|
@ -169,12 +159,12 @@ namespace Nz
|
||||||
});
|
});
|
||||||
|
|
||||||
settings.sharedUniformBlocks.push_back(PredefinedInstanceData::GetUniformBlock(4, nzsl::ShaderStageType::Vertex));
|
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(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::InstanceDataUbo)] = 4;
|
||||||
settings.predefinedBindings[UnderlyingCast(PredefinedShaderBinding::OverlayTexture)] = 3;
|
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.predefinedBindings[UnderlyingCast(PredefinedShaderBinding::ViewerDataUbo)] = 5;
|
||||||
|
|
||||||
settings.shaders = options.shaders;
|
settings.shaders = options.shaders;
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
namespace Nz
|
namespace Nz
|
||||||
{
|
{
|
||||||
|
// PredefinedLightData
|
||||||
PredefinedLightData PredefinedLightData::GetOffsets()
|
PredefinedLightData PredefinedLightData::GetOffsets()
|
||||||
{
|
{
|
||||||
PredefinedLightData lightData;
|
PredefinedLightData lightData;
|
||||||
|
|
@ -51,6 +52,7 @@ namespace Nz
|
||||||
return uniformBlock;
|
return uniformBlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PredefinedInstanceData
|
||||||
PredefinedInstanceData PredefinedInstanceData::GetOffsets()
|
PredefinedInstanceData PredefinedInstanceData::GetOffsets()
|
||||||
{
|
{
|
||||||
nzsl::FieldOffsets viewerStruct(nzsl::StructLayout::Std140);
|
nzsl::FieldOffsets viewerStruct(nzsl::StructLayout::Std140);
|
||||||
|
|
@ -85,6 +87,40 @@ namespace Nz
|
||||||
return uniformBlock;
|
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()
|
PredefinedViewerData PredefinedViewerData::GetOffsets()
|
||||||
{
|
{
|
||||||
nzsl::FieldOffsets viewerStruct(nzsl::StructLayout::Std140);
|
nzsl::FieldOffsets viewerStruct(nzsl::StructLayout::Std140);
|
||||||
|
|
@ -132,5 +168,4 @@ namespace Nz
|
||||||
|
|
||||||
return uniformBlock;
|
return uniformBlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,9 @@
|
||||||
[nzsl_version("1.0")]
|
[nzsl_version("1.0")]
|
||||||
module Engine.SkeletalData;
|
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]
|
[export]
|
||||||
[layout(std140)]
|
[layout(std140)]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue