Graphics: Fix PredefinedViewerData size

This commit is contained in:
Jérôme Leclercq 2021-01-22 18:04:58 +01:00
parent 711199fe51
commit e6ada6846d
3 changed files with 13 additions and 4 deletions

View File

@ -27,6 +27,7 @@ namespace Nz
std::size_t AddStruct(const FieldOffsets& fieldStruct);
std::size_t AddStructArray(const FieldOffsets& fieldStruct, std::size_t arraySize);
inline std::size_t GetAlignedSize() const;
inline std::size_t GetLargestFieldAlignement() const;
inline std::size_t GetSize() const;

View File

@ -22,6 +22,14 @@ namespace Nz
return m_largestFieldAlignment;
}
inline std::size_t FieldOffsets::GetAlignedSize() const
{
if (m_layout == StructLayout_Std140)
return Align(m_size, m_largestFieldAlignment);
else
return m_size;
}
inline std::size_t FieldOffsets::GetSize() const
{
return m_size;

View File

@ -21,13 +21,13 @@ namespace Nz
lightData.innerOffsets.parameter3 = lightStruct.AddField(StructFieldType_Float2);
lightData.innerOffsets.shadowMappingFlag = lightStruct.AddField(StructFieldType_Bool1);
lightData.innerOffsets.totalSize = lightStruct.GetSize();
lightData.innerOffsets.totalSize = lightStruct.GetAlignedSize();
FieldOffsets lightDataStruct(StructLayout_Std140);
for (std::size_t& lightOffset : lightData.lightArray)
lightOffset = lightDataStruct.AddStruct(lightStruct);
lightData.lightArraySize = lightDataStruct.GetSize();
lightData.lightArraySize = lightDataStruct.GetAlignedSize();
return lightData;
}
@ -62,7 +62,7 @@ namespace Nz
instanceData.worldMatrixOffset = viewerStruct.AddMatrix(StructFieldType_Float1, 4, 4, true);
instanceData.invWorldMatrixOffset = viewerStruct.AddMatrix(StructFieldType_Float1, 4, 4, true);
instanceData.totalSize = viewerStruct.GetSize();
instanceData.totalSize = viewerStruct.GetAlignedSize();
return instanceData;
}
@ -107,7 +107,7 @@ namespace Nz
viewerData.invTargetSizeOffset = viewerStruct.AddField(StructFieldType_Float2);
viewerData.eyePositionOffset = viewerStruct.AddField(StructFieldType_Float3);
viewerData.totalSize = viewerStruct.GetSize();
viewerData.totalSize = viewerStruct.GetAlignedSize();
return viewerData;
}