Graphics: Replace runtime structs offsets by compile-time struct offsets
now that nzsl::FieldOffsets is constexpr this is possible
This commit is contained in:
parent
929b599337
commit
e10f15243d
|
|
@ -0,0 +1,139 @@
|
|||
// Copyright (C) 2023 Jérôme "Lynix" Leclercq (lynix680@gmail.com)
|
||||
// This file is part of the "Nazara Engine - Graphics module"
|
||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef NAZARA_GRAPHICS_PREDEFINEDSHADERSTRUCTBUILDER_HPP
|
||||
#define NAZARA_GRAPHICS_PREDEFINEDSHADERSTRUCTBUILDER_HPP
|
||||
|
||||
#include <Nazara/Graphics/Config.hpp>
|
||||
#include <NZSL/Math/FieldOffsets.hpp>
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
struct NAZARA_GRAPHICS_API PredefinedDirectionalLightData
|
||||
{
|
||||
nzsl::FieldOffsets fieldOffsets;
|
||||
|
||||
std::size_t colorOffset;
|
||||
std::size_t directionOffset;
|
||||
std::size_t invShadowMapSizeOffset;
|
||||
std::size_t ambientFactorOffset;
|
||||
std::size_t diffuseFactorOffset;
|
||||
std::size_t cascadeCountOffset;
|
||||
std::size_t cascadeFarPlanesOffset;
|
||||
std::size_t cascadeViewProjMatricesOffset;
|
||||
|
||||
std::size_t totalSize;
|
||||
|
||||
static constexpr std::size_t MaxLightCascadeCount = 4;
|
||||
|
||||
static constexpr PredefinedDirectionalLightData Build();
|
||||
};
|
||||
|
||||
struct NAZARA_GRAPHICS_API PredefinedPointLightData
|
||||
{
|
||||
nzsl::FieldOffsets fieldOffsets;
|
||||
|
||||
std::size_t colorOffset;
|
||||
std::size_t positionOffset;
|
||||
std::size_t invShadowMapSizeOffset;
|
||||
std::size_t ambientFactorOffset;
|
||||
std::size_t diffuseFactorOffset;
|
||||
std::size_t radiusOffset;
|
||||
std::size_t invRadiusOffset;
|
||||
|
||||
std::size_t totalSize;
|
||||
|
||||
static constexpr PredefinedPointLightData Build();
|
||||
};
|
||||
|
||||
struct NAZARA_GRAPHICS_API PredefinedSpotLightData
|
||||
{
|
||||
nzsl::FieldOffsets fieldOffsets;
|
||||
|
||||
std::size_t colorOffset;
|
||||
std::size_t directionOffset;
|
||||
std::size_t positionOffset;
|
||||
std::size_t invShadowMapSizeOffset;
|
||||
std::size_t ambientFactorOffset;
|
||||
std::size_t diffuseFactorOffset;
|
||||
std::size_t innerAngleOffset;
|
||||
std::size_t outerAngleOffset;
|
||||
std::size_t invRadiusOffset;
|
||||
std::size_t viewProjMatrixOffset;
|
||||
|
||||
std::size_t totalSize;
|
||||
|
||||
static constexpr PredefinedSpotLightData Build();
|
||||
};
|
||||
|
||||
struct NAZARA_GRAPHICS_API PredefinedLightData
|
||||
{
|
||||
nzsl::FieldOffsets fieldOffsets;
|
||||
|
||||
std::size_t directionalLightsOffset;
|
||||
std::size_t pointLightsOffset;
|
||||
std::size_t spotLightsOffset;
|
||||
std::size_t directionalLightCountOffset;
|
||||
std::size_t pointLightCountOffset;
|
||||
std::size_t spotLightCountOffset;
|
||||
|
||||
std::size_t totalSize;
|
||||
|
||||
static constexpr std::size_t MaxLightCount = 3;
|
||||
|
||||
static constexpr PredefinedLightData Build();
|
||||
};
|
||||
|
||||
struct NAZARA_GRAPHICS_API PredefinedInstanceData
|
||||
{
|
||||
nzsl::FieldOffsets fieldOffsets;
|
||||
|
||||
std::size_t invWorldMatrixOffset;
|
||||
std::size_t worldMatrixOffset;
|
||||
|
||||
std::size_t totalSize;
|
||||
|
||||
static constexpr PredefinedInstanceData Build();
|
||||
};
|
||||
|
||||
struct NAZARA_GRAPHICS_API PredefinedSkeletalData
|
||||
{
|
||||
nzsl::FieldOffsets fieldOffsets;
|
||||
|
||||
std::size_t jointMatricesOffset;
|
||||
|
||||
std::size_t totalSize;
|
||||
|
||||
static constexpr std::size_t MaxMatricesCount = 256;
|
||||
|
||||
static constexpr PredefinedSkeletalData Build();
|
||||
};
|
||||
|
||||
struct NAZARA_GRAPHICS_API PredefinedViewerData
|
||||
{
|
||||
nzsl::FieldOffsets fieldOffsets;
|
||||
|
||||
std::size_t eyePositionOffset;
|
||||
std::size_t invProjMatrixOffset;
|
||||
std::size_t invTargetSizeOffset;
|
||||
std::size_t invViewMatrixOffset;
|
||||
std::size_t invViewProjMatrixOffset;
|
||||
std::size_t projMatrixOffset;
|
||||
std::size_t targetSizeOffset;
|
||||
std::size_t viewMatrixOffset;
|
||||
std::size_t viewProjMatrixOffset;
|
||||
std::size_t nearPlaneOffset;
|
||||
std::size_t farPlaneOffset;
|
||||
|
||||
std::size_t totalSize;
|
||||
|
||||
static constexpr PredefinedViewerData Build();
|
||||
};
|
||||
}
|
||||
|
||||
#include <Nazara/Graphics/PredefinedShaderStructBuilder.inl>
|
||||
|
||||
#endif // NAZARA_GRAPHICS_PREDEFINEDSHADERSTRUCTBUILDER_HPP
|
||||
|
|
@ -0,0 +1,130 @@
|
|||
// Copyright (C) 2023 Jérôme "Lynix" Leclercq (lynix680@gmail.com)
|
||||
// This file is part of the "Nazara Engine - Graphics module"
|
||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||
|
||||
#include <Nazara/Graphics/Debug.hpp>
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
// PredefinedDirectionalLightData
|
||||
constexpr PredefinedDirectionalLightData PredefinedDirectionalLightData::Build()
|
||||
{
|
||||
PredefinedDirectionalLightData lightData = { nzsl::FieldOffsets(nzsl::StructLayout::Std140) };
|
||||
lightData.colorOffset = lightData.fieldOffsets.AddField(nzsl::StructFieldType::Float3);
|
||||
lightData.directionOffset = lightData.fieldOffsets.AddField(nzsl::StructFieldType::Float3);
|
||||
lightData.invShadowMapSizeOffset = lightData.fieldOffsets.AddField(nzsl::StructFieldType::Float2);
|
||||
lightData.ambientFactorOffset = lightData.fieldOffsets.AddField(nzsl::StructFieldType::Float1);
|
||||
lightData.diffuseFactorOffset = lightData.fieldOffsets.AddField(nzsl::StructFieldType::Float1);
|
||||
lightData.cascadeCountOffset = lightData.fieldOffsets.AddField(nzsl::StructFieldType::UInt1);
|
||||
lightData.cascadeFarPlanesOffset = lightData.fieldOffsets.AddFieldArray(nzsl::StructFieldType::Float1, MaxLightCascadeCount);
|
||||
lightData.cascadeViewProjMatricesOffset = lightData.fieldOffsets.AddMatrixArray(nzsl::StructFieldType::Float1, 4, 4, true, MaxLightCascadeCount);
|
||||
|
||||
lightData.totalSize = lightData.fieldOffsets.GetAlignedSize();
|
||||
|
||||
return lightData;
|
||||
}
|
||||
|
||||
// PredefinedPointLightData
|
||||
constexpr PredefinedPointLightData PredefinedPointLightData::Build()
|
||||
{
|
||||
PredefinedPointLightData lightData = { nzsl::FieldOffsets(nzsl::StructLayout::Std140) };
|
||||
lightData.colorOffset = lightData.fieldOffsets.AddField(nzsl::StructFieldType::Float3);
|
||||
lightData.positionOffset = lightData.fieldOffsets.AddField(nzsl::StructFieldType::Float3);
|
||||
lightData.invShadowMapSizeOffset = lightData.fieldOffsets.AddField(nzsl::StructFieldType::Float2);
|
||||
lightData.ambientFactorOffset = lightData.fieldOffsets.AddField(nzsl::StructFieldType::Float1);
|
||||
lightData.diffuseFactorOffset = lightData.fieldOffsets.AddField(nzsl::StructFieldType::Float1);
|
||||
lightData.radiusOffset = lightData.fieldOffsets.AddField(nzsl::StructFieldType::Float1);
|
||||
lightData.invRadiusOffset = lightData.fieldOffsets.AddField(nzsl::StructFieldType::Float1);
|
||||
|
||||
lightData.totalSize = lightData.fieldOffsets.GetAlignedSize();
|
||||
|
||||
return lightData;
|
||||
}
|
||||
|
||||
// PredefinedSpotLightData
|
||||
constexpr PredefinedSpotLightData PredefinedSpotLightData::Build()
|
||||
{
|
||||
PredefinedSpotLightData lightData = { nzsl::FieldOffsets(nzsl::StructLayout::Std140) };
|
||||
lightData.colorOffset = lightData.fieldOffsets.AddField(nzsl::StructFieldType::Float3);
|
||||
lightData.directionOffset = lightData.fieldOffsets.AddField(nzsl::StructFieldType::Float3);
|
||||
lightData.positionOffset = lightData.fieldOffsets.AddField(nzsl::StructFieldType::Float3);
|
||||
lightData.invShadowMapSizeOffset = lightData.fieldOffsets.AddField(nzsl::StructFieldType::Float2);
|
||||
lightData.ambientFactorOffset = lightData.fieldOffsets.AddField(nzsl::StructFieldType::Float1);
|
||||
lightData.diffuseFactorOffset = lightData.fieldOffsets.AddField(nzsl::StructFieldType::Float1);
|
||||
lightData.innerAngleOffset = lightData.fieldOffsets.AddField(nzsl::StructFieldType::Float1);
|
||||
lightData.outerAngleOffset = lightData.fieldOffsets.AddField(nzsl::StructFieldType::Float1);
|
||||
lightData.invRadiusOffset = lightData.fieldOffsets.AddField(nzsl::StructFieldType::Float1);
|
||||
lightData.viewProjMatrixOffset = lightData.fieldOffsets.AddMatrix(nzsl::StructFieldType::Float1, 4, 4, true);
|
||||
|
||||
lightData.totalSize = lightData.fieldOffsets.GetAlignedSize();
|
||||
|
||||
return lightData;
|
||||
}
|
||||
|
||||
// PredefinedSpotLightData
|
||||
constexpr PredefinedLightData PredefinedLightData::Build()
|
||||
{
|
||||
constexpr PredefinedDirectionalLightData DirectionalLight = PredefinedDirectionalLightData::Build();
|
||||
constexpr PredefinedPointLightData PointLight = PredefinedPointLightData::Build();
|
||||
constexpr PredefinedSpotLightData SpotLight = PredefinedSpotLightData::Build();
|
||||
|
||||
PredefinedLightData lightData = { nzsl::FieldOffsets(nzsl::StructLayout::Std140) };
|
||||
lightData.directionalLightsOffset = lightData.fieldOffsets.AddStructArray(DirectionalLight.fieldOffsets, MaxLightCount);
|
||||
lightData.pointLightsOffset = lightData.fieldOffsets.AddStructArray(PointLight.fieldOffsets, MaxLightCount);
|
||||
lightData.spotLightsOffset = lightData.fieldOffsets.AddStructArray(SpotLight.fieldOffsets, MaxLightCount);
|
||||
|
||||
lightData.directionalLightCountOffset = lightData.fieldOffsets.AddField(nzsl::StructFieldType::UInt1);
|
||||
lightData.pointLightCountOffset = lightData.fieldOffsets.AddField(nzsl::StructFieldType::UInt1);
|
||||
lightData.spotLightCountOffset = lightData.fieldOffsets.AddField(nzsl::StructFieldType::UInt1);
|
||||
|
||||
lightData.totalSize = lightData.fieldOffsets.GetAlignedSize();
|
||||
|
||||
return lightData;
|
||||
}
|
||||
|
||||
// PredefinedSkeletalData
|
||||
constexpr PredefinedInstanceData PredefinedInstanceData::Build()
|
||||
{
|
||||
PredefinedInstanceData instanceData = { nzsl::FieldOffsets(nzsl::StructLayout::Std140) };
|
||||
instanceData.worldMatrixOffset = instanceData.fieldOffsets.AddMatrix(nzsl::StructFieldType::Float1, 4, 4, true);
|
||||
instanceData.invWorldMatrixOffset = instanceData.fieldOffsets.AddMatrix(nzsl::StructFieldType::Float1, 4, 4, true);
|
||||
|
||||
instanceData.totalSize = instanceData.fieldOffsets.GetAlignedSize();
|
||||
|
||||
return instanceData;
|
||||
}
|
||||
|
||||
// PredefinedSkeletalData
|
||||
constexpr PredefinedSkeletalData PredefinedSkeletalData::Build()
|
||||
{
|
||||
PredefinedSkeletalData skeletalData = { nzsl::FieldOffsets(nzsl::StructLayout::Std140) };
|
||||
skeletalData.jointMatricesOffset = skeletalData.fieldOffsets.AddMatrixArray(nzsl::StructFieldType::Float1, 4, 4, true, MaxMatricesCount);
|
||||
|
||||
skeletalData.totalSize = skeletalData.fieldOffsets.GetAlignedSize();
|
||||
|
||||
return skeletalData;
|
||||
}
|
||||
|
||||
// PredefinedViewerData
|
||||
constexpr PredefinedViewerData PredefinedViewerData::Build()
|
||||
{
|
||||
PredefinedViewerData viewerData = { nzsl::FieldOffsets(nzsl::StructLayout::Std140) };
|
||||
viewerData.projMatrixOffset = viewerData.fieldOffsets.AddMatrix(nzsl::StructFieldType::Float1, 4, 4, true);
|
||||
viewerData.invProjMatrixOffset = viewerData.fieldOffsets.AddMatrix(nzsl::StructFieldType::Float1, 4, 4, true);
|
||||
viewerData.viewMatrixOffset = viewerData.fieldOffsets.AddMatrix(nzsl::StructFieldType::Float1, 4, 4, true);
|
||||
viewerData.invViewMatrixOffset = viewerData.fieldOffsets.AddMatrix(nzsl::StructFieldType::Float1, 4, 4, true);
|
||||
viewerData.viewProjMatrixOffset = viewerData.fieldOffsets.AddMatrix(nzsl::StructFieldType::Float1, 4, 4, true);
|
||||
viewerData.invViewProjMatrixOffset = viewerData.fieldOffsets.AddMatrix(nzsl::StructFieldType::Float1, 4, 4, true);
|
||||
viewerData.targetSizeOffset = viewerData.fieldOffsets.AddField(nzsl::StructFieldType::Float2);
|
||||
viewerData.invTargetSizeOffset = viewerData.fieldOffsets.AddField(nzsl::StructFieldType::Float2);
|
||||
viewerData.eyePositionOffset = viewerData.fieldOffsets.AddField(nzsl::StructFieldType::Float3);
|
||||
viewerData.nearPlaneOffset = viewerData.fieldOffsets.AddField(nzsl::StructFieldType::Float1);
|
||||
viewerData.farPlaneOffset = viewerData.fieldOffsets.AddField(nzsl::StructFieldType::Float1);
|
||||
|
||||
viewerData.totalSize = viewerData.fieldOffsets.GetAlignedSize();
|
||||
|
||||
return viewerData;
|
||||
}
|
||||
}
|
||||
|
||||
#include <Nazara/Graphics/DebugOff.hpp>
|
||||
|
|
@ -7,73 +7,17 @@
|
|||
#ifndef NAZARA_GRAPHICS_PREDEFINEDSHADERSTRUCTS_HPP
|
||||
#define NAZARA_GRAPHICS_PREDEFINEDSHADERSTRUCTS_HPP
|
||||
|
||||
#include <Nazara/Graphics/Config.hpp>
|
||||
#include <Nazara/Graphics/MaterialSettings.hpp>
|
||||
#include <array>
|
||||
#include <Nazara/Graphics/PredefinedShaderStructBuilder.hpp>
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
struct NAZARA_GRAPHICS_API PredefinedLightData
|
||||
{
|
||||
struct Light
|
||||
{
|
||||
std::size_t type;
|
||||
std::size_t color;
|
||||
std::size_t factor;
|
||||
std::size_t parameter1;
|
||||
std::size_t parameter2;
|
||||
std::size_t parameter3;
|
||||
std::size_t shadowMapSize;
|
||||
std::size_t viewProjMatrix;
|
||||
};
|
||||
|
||||
std::size_t lightsOffset;
|
||||
std::size_t lightCountOffset;
|
||||
std::size_t lightSize;
|
||||
std::size_t totalSize;
|
||||
Light lightMemberOffsets;
|
||||
|
||||
static constexpr std::size_t MaxLightCount = 3;
|
||||
|
||||
static PredefinedLightData GetOffsets();
|
||||
};
|
||||
|
||||
struct NAZARA_GRAPHICS_API PredefinedInstanceData
|
||||
{
|
||||
std::size_t invWorldMatrixOffset;
|
||||
std::size_t totalSize;
|
||||
std::size_t worldMatrixOffset;
|
||||
|
||||
static PredefinedInstanceData GetOffsets();
|
||||
};
|
||||
|
||||
struct NAZARA_GRAPHICS_API PredefinedSkeletalData
|
||||
{
|
||||
std::size_t totalSize;
|
||||
std::size_t jointMatricesOffset;
|
||||
|
||||
static constexpr std::size_t MaxMatricesCount = 256;
|
||||
|
||||
static PredefinedSkeletalData GetOffsets();
|
||||
};
|
||||
|
||||
struct NAZARA_GRAPHICS_API PredefinedViewerData
|
||||
{
|
||||
std::size_t eyePositionOffset;
|
||||
std::size_t invProjMatrixOffset;
|
||||
std::size_t invTargetSizeOffset;
|
||||
std::size_t invViewMatrixOffset;
|
||||
std::size_t invViewProjMatrixOffset;
|
||||
std::size_t projMatrixOffset;
|
||||
std::size_t targetSizeOffset;
|
||||
std::size_t totalSize;
|
||||
std::size_t viewMatrixOffset;
|
||||
std::size_t viewProjMatrixOffset;
|
||||
|
||||
static PredefinedViewerData GetOffsets();
|
||||
};
|
||||
static constexpr PredefinedDirectionalLightData PredefinedDirectionalLightOffsets = PredefinedDirectionalLightData::Build();
|
||||
static constexpr PredefinedPointLightData PredefinedPointLightOffsets = PredefinedPointLightData::Build();
|
||||
static constexpr PredefinedSpotLightData PredefinedSpotLightOffsets = PredefinedSpotLightData::Build();
|
||||
static constexpr PredefinedLightData PredefinedLightOffsets = PredefinedLightData::Build();
|
||||
static constexpr PredefinedInstanceData PredefinedInstanceOffsets = PredefinedInstanceData::Build();
|
||||
static constexpr PredefinedSkeletalData PredefinedSkeletalOffsets = PredefinedSkeletalData::Build();
|
||||
static constexpr PredefinedViewerData PredefinedViewerOffsets = PredefinedViewerData::Build();
|
||||
}
|
||||
|
||||
#include <Nazara/Graphics/PredefinedShaderStructs.inl>
|
||||
|
||||
#endif // NAZARA_GRAPHICS_PREDEFINEDSHADERSTRUCTS_HPP
|
||||
|
|
|
|||
|
|
@ -1,11 +0,0 @@
|
|||
// Copyright (C) 2023 Jérôme "Lynix" Leclercq (lynix680@gmail.com)
|
||||
// This file is part of the "Nazara Engine - Graphics module"
|
||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||
|
||||
#include <Nazara/Graphics/Debug.hpp>
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
}
|
||||
|
||||
#include <Nazara/Graphics/DebugOff.hpp>
|
||||
|
|
@ -1,84 +0,0 @@
|
|||
// Copyright (C) 2023 Jérôme "Lynix" Leclercq (lynix680@gmail.com)
|
||||
// This file is part of the "Nazara Engine - Graphics module"
|
||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||
|
||||
#include <Nazara/Graphics/PredefinedShaderStructs.hpp>
|
||||
#include <NZSL/Math/FieldOffsets.hpp>
|
||||
#include <Nazara/Graphics/Debug.hpp>
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
// PredefinedLightData
|
||||
PredefinedLightData PredefinedLightData::GetOffsets()
|
||||
{
|
||||
PredefinedLightData lightData;
|
||||
|
||||
nzsl::FieldOffsets lightStruct(nzsl::StructLayout::Std140);
|
||||
lightData.lightMemberOffsets.type = lightStruct.AddField(nzsl::StructFieldType::Int1);
|
||||
lightData.lightMemberOffsets.color = lightStruct.AddField(nzsl::StructFieldType::Float4);
|
||||
lightData.lightMemberOffsets.factor = lightStruct.AddField(nzsl::StructFieldType::Float2);
|
||||
lightData.lightMemberOffsets.parameter1 = lightStruct.AddField(nzsl::StructFieldType::Float4);
|
||||
lightData.lightMemberOffsets.parameter2 = lightStruct.AddField(nzsl::StructFieldType::Float4);
|
||||
lightData.lightMemberOffsets.parameter3 = lightStruct.AddField(nzsl::StructFieldType::Float4);
|
||||
lightData.lightMemberOffsets.shadowMapSize = lightStruct.AddField(nzsl::StructFieldType::Float2);
|
||||
lightData.lightMemberOffsets.viewProjMatrix = lightStruct.AddMatrix(nzsl::StructFieldType::Float1, 4, 4, true);
|
||||
|
||||
lightData.lightSize = lightStruct.GetAlignedSize();
|
||||
|
||||
nzsl::FieldOffsets lightDataStruct(nzsl::StructLayout::Std140);
|
||||
lightData.lightsOffset = lightDataStruct.AddStructArray(lightStruct, MaxLightCount);
|
||||
lightData.lightCountOffset = lightDataStruct.AddField(nzsl::StructFieldType::UInt1);
|
||||
|
||||
lightData.totalSize = lightDataStruct.GetAlignedSize();
|
||||
|
||||
return lightData;
|
||||
}
|
||||
|
||||
// PredefinedInstanceData
|
||||
PredefinedInstanceData PredefinedInstanceData::GetOffsets()
|
||||
{
|
||||
nzsl::FieldOffsets viewerStruct(nzsl::StructLayout::Std140);
|
||||
|
||||
PredefinedInstanceData instanceData;
|
||||
instanceData.worldMatrixOffset = viewerStruct.AddMatrix(nzsl::StructFieldType::Float1, 4, 4, true);
|
||||
instanceData.invWorldMatrixOffset = viewerStruct.AddMatrix(nzsl::StructFieldType::Float1, 4, 4, true);
|
||||
|
||||
instanceData.totalSize = viewerStruct.GetAlignedSize();
|
||||
|
||||
return instanceData;
|
||||
}
|
||||
|
||||
// PredefinedSkeletalData
|
||||
PredefinedSkeletalData PredefinedSkeletalData::GetOffsets()
|
||||
{
|
||||
nzsl::FieldOffsets skeletalStruct(nzsl::StructLayout::Std140);
|
||||
|
||||
PredefinedSkeletalData skeletalData;
|
||||
skeletalData.jointMatricesOffset = skeletalStruct.AddMatrixArray(nzsl::StructFieldType::Float1, 4, 4, true, MaxMatricesCount);
|
||||
|
||||
skeletalData.totalSize = skeletalStruct.GetAlignedSize();
|
||||
|
||||
return skeletalData;
|
||||
}
|
||||
|
||||
// PredefinedViewerData
|
||||
PredefinedViewerData PredefinedViewerData::GetOffsets()
|
||||
{
|
||||
nzsl::FieldOffsets viewerStruct(nzsl::StructLayout::Std140);
|
||||
|
||||
PredefinedViewerData viewerData;
|
||||
viewerData.projMatrixOffset = viewerStruct.AddMatrix(nzsl::StructFieldType::Float1, 4, 4, true);
|
||||
viewerData.invProjMatrixOffset = viewerStruct.AddMatrix(nzsl::StructFieldType::Float1, 4, 4, true);
|
||||
viewerData.viewMatrixOffset = viewerStruct.AddMatrix(nzsl::StructFieldType::Float1, 4, 4, true);
|
||||
viewerData.invViewMatrixOffset = viewerStruct.AddMatrix(nzsl::StructFieldType::Float1, 4, 4, true);
|
||||
viewerData.viewProjMatrixOffset = viewerStruct.AddMatrix(nzsl::StructFieldType::Float1, 4, 4, true);
|
||||
viewerData.invViewProjMatrixOffset = viewerStruct.AddMatrix(nzsl::StructFieldType::Float1, 4, 4, true);
|
||||
viewerData.targetSizeOffset = viewerStruct.AddField(nzsl::StructFieldType::Float2);
|
||||
viewerData.invTargetSizeOffset = viewerStruct.AddField(nzsl::StructFieldType::Float2);
|
||||
viewerData.eyePositionOffset = viewerStruct.AddField(nzsl::StructFieldType::Float3);
|
||||
|
||||
viewerData.totalSize = viewerStruct.GetAlignedSize();
|
||||
|
||||
return viewerData;
|
||||
}
|
||||
}
|
||||
|
|
@ -20,10 +20,9 @@ namespace Nz
|
|||
{
|
||||
NazaraAssert(m_skeleton, "invalid skeleton");
|
||||
|
||||
PredefinedSkeletalData skeletalUboOffsets = PredefinedSkeletalData::GetOffsets();
|
||||
|
||||
m_skeletalDataBuffer = Graphics::Instance()->GetRenderDevice()->InstantiateBuffer(BufferType::Uniform, skeletalUboOffsets.totalSize, BufferUsage::DeviceLocal | BufferUsage::Dynamic | BufferUsage::Write);
|
||||
m_skeletalDataBuffer = Graphics::Instance()->GetRenderDevice()->InstantiateBuffer(BufferType::Uniform, PredefinedSkeletalOffsets.totalSize, BufferUsage::DeviceLocal | BufferUsage::Dynamic | BufferUsage::Write);
|
||||
m_skeletalDataBuffer->UpdateDebugName("Skeletal data");
|
||||
|
||||
m_onSkeletonJointsInvalidated.Connect(m_skeleton->OnSkeletonJointsInvalidated, [this](const Skeleton*)
|
||||
{
|
||||
m_dataInvalided = true;
|
||||
|
|
@ -48,10 +47,8 @@ namespace Nz
|
|||
if (!m_dataInvalided)
|
||||
return;
|
||||
|
||||
PredefinedSkeletalData skeletalUboOffsets = PredefinedSkeletalData::GetOffsets();
|
||||
|
||||
auto& allocation = renderFrame.GetUploadPool().Allocate(m_skeletalDataBuffer->GetSize());
|
||||
Matrix4f* matrices = AccessByOffset<Matrix4f*>(allocation.mappedPtr, skeletalUboOffsets.jointMatricesOffset);
|
||||
Matrix4f* matrices = AccessByOffset<Matrix4f*>(allocation.mappedPtr, PredefinedSkeletalOffsets.jointMatricesOffset);
|
||||
|
||||
for (std::size_t i = 0; i < m_skeleton->GetJointCount(); ++i)
|
||||
matrices[i] = m_skeleton->GetJoint(i)->GetSkinningMatrix();
|
||||
|
|
|
|||
|
|
@ -25,9 +25,7 @@ namespace Nz
|
|||
m_eyePosition(Vector3f::Zero()),
|
||||
m_dataInvalidated(true)
|
||||
{
|
||||
PredefinedViewerData viewerUboOffsets = PredefinedViewerData::GetOffsets();
|
||||
|
||||
m_viewerDataBuffer = Graphics::Instance()->GetRenderDevice()->InstantiateBuffer(BufferType::Uniform, viewerUboOffsets.totalSize, BufferUsage::DeviceLocal | BufferUsage::Dynamic | BufferUsage::Write);
|
||||
m_viewerDataBuffer = Graphics::Instance()->GetRenderDevice()->InstantiateBuffer(BufferType::Uniform, PredefinedViewerOffsets.totalSize, BufferUsage::DeviceLocal | BufferUsage::Dynamic | BufferUsage::Write);
|
||||
m_viewerDataBuffer->UpdateDebugName("Viewer data");
|
||||
}
|
||||
|
||||
|
|
@ -36,7 +34,7 @@ namespace Nz
|
|||
if (!m_dataInvalidated)
|
||||
return;
|
||||
|
||||
PredefinedViewerData viewerDataOffsets = PredefinedViewerData::GetOffsets();
|
||||
constexpr auto& viewerDataOffsets = PredefinedViewerOffsets;
|
||||
|
||||
auto& allocation = renderFrame.GetUploadPool().Allocate(viewerDataOffsets.totalSize);
|
||||
AccessByOffset<Vector3f&>(allocation.mappedPtr, viewerDataOffsets.eyePositionOffset) = m_eyePosition;
|
||||
|
|
@ -50,6 +48,9 @@ namespace Nz
|
|||
AccessByOffset<Matrix4f&>(allocation.mappedPtr, viewerDataOffsets.viewProjMatrixOffset) = m_viewProjMatrix;
|
||||
AccessByOffset<Matrix4f&>(allocation.mappedPtr, viewerDataOffsets.viewMatrixOffset) = m_viewMatrix;
|
||||
|
||||
AccessByOffset<float&>(allocation.mappedPtr, viewerDataOffsets.nearPlaneOffset) = m_nearPlane;
|
||||
AccessByOffset<float&>(allocation.mappedPtr, viewerDataOffsets.farPlaneOffset) = m_farPlane;
|
||||
|
||||
builder.CopyBuffer(allocation, m_viewerDataBuffer.get());
|
||||
|
||||
m_dataInvalidated = false;
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ namespace Nz
|
|||
m_worldMatrix(Matrix4f::Identity()),
|
||||
m_dataInvalided(true)
|
||||
{
|
||||
PredefinedInstanceData instanceUboOffsets = PredefinedInstanceData::GetOffsets();
|
||||
constexpr auto& instanceUboOffsets = PredefinedInstanceOffsets;
|
||||
|
||||
m_instanceDataBuffer = Graphics::Instance()->GetRenderDevice()->InstantiateBuffer(BufferType::Uniform, instanceUboOffsets.totalSize, BufferUsage::DeviceLocal | BufferUsage::Dynamic | BufferUsage::Write);
|
||||
m_instanceDataBuffer->UpdateDebugName("Instance data");
|
||||
|
|
@ -30,7 +30,7 @@ namespace Nz
|
|||
if (!m_dataInvalided)
|
||||
return;
|
||||
|
||||
PredefinedInstanceData instanceUboOffsets = PredefinedInstanceData::GetOffsets();
|
||||
constexpr auto& instanceUboOffsets = PredefinedInstanceOffsets;
|
||||
|
||||
auto& allocation = renderFrame.GetUploadPool().Allocate(m_instanceDataBuffer->GetSize());
|
||||
AccessByOffset<Matrix4f&>(allocation.mappedPtr, instanceUboOffsets.worldMatrixOffset) = m_worldMatrix;
|
||||
|
|
|
|||
Loading…
Reference in New Issue