Add Phong lighting (WIP)
This commit is contained in:
@@ -13,42 +13,40 @@ namespace Nz
|
||||
PredefinedLightData lightData;
|
||||
|
||||
FieldOffsets lightStruct(StructLayout::Std140);
|
||||
lightData.innerOffsets.type = lightStruct.AddField(StructFieldType::Int1);
|
||||
lightData.innerOffsets.color = lightStruct.AddField(StructFieldType::Float4);
|
||||
lightData.innerOffsets.factor = lightStruct.AddField(StructFieldType::Float2);
|
||||
lightData.innerOffsets.parameter1 = lightStruct.AddField(StructFieldType::Float4);
|
||||
lightData.innerOffsets.parameter2 = lightStruct.AddField(StructFieldType::Float4);
|
||||
lightData.innerOffsets.parameter3 = lightStruct.AddField(StructFieldType::Float2);
|
||||
lightData.innerOffsets.shadowMappingFlag = lightStruct.AddField(StructFieldType::Bool1);
|
||||
lightData.lightMemberOffsets.type = lightStruct.AddField(StructFieldType::Int1);
|
||||
lightData.lightMemberOffsets.color = lightStruct.AddField(StructFieldType::Float4);
|
||||
lightData.lightMemberOffsets.factor = lightStruct.AddField(StructFieldType::Float2);
|
||||
lightData.lightMemberOffsets.parameter1 = lightStruct.AddField(StructFieldType::Float4);
|
||||
lightData.lightMemberOffsets.parameter2 = lightStruct.AddField(StructFieldType::Float4);
|
||||
lightData.lightMemberOffsets.parameter3 = lightStruct.AddField(StructFieldType::Float4);
|
||||
lightData.lightMemberOffsets.shadowMappingFlag = lightStruct.AddField(StructFieldType::Bool1);
|
||||
|
||||
lightData.innerOffsets.totalSize = lightStruct.GetAlignedSize();
|
||||
lightData.lightSize = lightStruct.GetAlignedSize();
|
||||
|
||||
FieldOffsets lightDataStruct(StructLayout::Std140);
|
||||
for (std::size_t& lightOffset : lightData.lightArray)
|
||||
lightOffset = lightDataStruct.AddStruct(lightStruct);
|
||||
lightData.lightsOffset = lightDataStruct.AddStructArray(lightStruct, MaxLightCount);
|
||||
lightData.lightCountOffset = lightDataStruct.AddField(StructFieldType::UInt1);
|
||||
|
||||
lightData.lightArraySize = lightDataStruct.GetAlignedSize();
|
||||
lightData.totalSize = lightDataStruct.GetAlignedSize();
|
||||
|
||||
return lightData;
|
||||
}
|
||||
|
||||
MaterialSettings::SharedUniformBlock PredefinedLightData::GetUniformBlock()
|
||||
MaterialSettings::SharedUniformBlock PredefinedLightData::GetUniformBlock(UInt32 bindingIndex, ShaderStageTypeFlags shaderStages)
|
||||
{
|
||||
PredefinedLightData lightData = GetOffsets();
|
||||
|
||||
std::vector<MaterialSettings::UniformVariable> lightDataVariables;
|
||||
for (std::size_t i = 0; i < lightData.lightArray.size(); ++i)
|
||||
{
|
||||
lightDataVariables.push_back({
|
||||
"LightData[" + std::to_string(i) + "]",
|
||||
lightData.lightArray[i]
|
||||
});
|
||||
}
|
||||
std::vector<MaterialSettings::UniformVariable> variables = {
|
||||
{
|
||||
{ "Lights", lightData.lightsOffset }
|
||||
}
|
||||
};
|
||||
|
||||
MaterialSettings::SharedUniformBlock uniformBlock = {
|
||||
0, //< FIXME
|
||||
"Light",
|
||||
std::move(lightDataVariables)
|
||||
bindingIndex,
|
||||
"LightData",
|
||||
std::move(variables),
|
||||
shaderStages
|
||||
};
|
||||
|
||||
return uniformBlock;
|
||||
|
||||
Reference in New Issue
Block a user