refactor(rendering): genericize native fullscreen pass descriptors
replace camera-specific post-process descriptor naming with generic fullscreen pass types route camera planning and managed SRP runtime through the same fullscreen pass seam
This commit is contained in:
@@ -57,19 +57,19 @@ bool TryParseVector4(const std::string& value, Math::Vector4& outValue) {
|
||||
return !stream.fail();
|
||||
}
|
||||
|
||||
Rendering::CameraPostProcessStack BuildColorScalePostProcessStack(
|
||||
Rendering::FullscreenPassStack BuildColorScalePostProcessStack(
|
||||
const std::vector<Math::Vector4>& values) {
|
||||
Rendering::CameraPostProcessStack passes;
|
||||
Rendering::FullscreenPassStack passes;
|
||||
passes.reserve(values.size());
|
||||
for (const Math::Vector4& value : values) {
|
||||
passes.push_back(Rendering::CameraPostProcessPassDesc::MakeColorScale(value));
|
||||
passes.push_back(Rendering::FullscreenPassDesc::MakeColorScale(value));
|
||||
}
|
||||
return passes;
|
||||
}
|
||||
|
||||
size_t FindFirstColorScalePassIndex(const Rendering::CameraPostProcessStack& passes) {
|
||||
size_t FindFirstColorScalePassIndex(const Rendering::FullscreenPassStack& passes) {
|
||||
for (size_t index = 0; index < passes.size(); ++index) {
|
||||
if (passes[index].type == Rendering::CameraPostProcessPassType::ColorScale) {
|
||||
if (passes[index].type == Rendering::FullscreenPassType::ColorScale) {
|
||||
return index;
|
||||
}
|
||||
}
|
||||
@@ -79,22 +79,22 @@ size_t FindFirstColorScalePassIndex(const Rendering::CameraPostProcessStack& pas
|
||||
|
||||
} // namespace
|
||||
|
||||
void CameraComponent::SetPostProcessPasses(const Rendering::CameraPostProcessStack& values) {
|
||||
void CameraComponent::SetPostProcessPasses(const Rendering::FullscreenPassStack& values) {
|
||||
m_postProcessPasses = values;
|
||||
for (const Rendering::CameraPostProcessPassDesc& pass : m_postProcessPasses) {
|
||||
if (pass.type == Rendering::CameraPostProcessPassType::ColorScale) {
|
||||
for (const Rendering::FullscreenPassDesc& pass : m_postProcessPasses) {
|
||||
if (pass.type == Rendering::FullscreenPassType::ColorScale) {
|
||||
m_colorScalePostProcessDefaultScale = pass.colorScale.scale;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CameraComponent::AddPostProcessPass(const Rendering::CameraPostProcessPassDesc& value) {
|
||||
void CameraComponent::AddPostProcessPass(const Rendering::FullscreenPassDesc& value) {
|
||||
if (!value.IsValid()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (value.type == Rendering::CameraPostProcessPassType::ColorScale &&
|
||||
if (value.type == Rendering::FullscreenPassType::ColorScale &&
|
||||
FindFirstColorScalePassIndex(m_postProcessPasses) == m_postProcessPasses.size()) {
|
||||
m_colorScalePostProcessDefaultScale = value.colorScale.scale;
|
||||
}
|
||||
@@ -110,7 +110,7 @@ void CameraComponent::SetColorScalePostProcessEnabled(bool value) {
|
||||
if (value) {
|
||||
if (!IsColorScalePostProcessEnabled()) {
|
||||
m_postProcessPasses.push_back(
|
||||
Rendering::CameraPostProcessPassDesc::MakeColorScale(
|
||||
Rendering::FullscreenPassDesc::MakeColorScale(
|
||||
m_colorScalePostProcessDefaultScale));
|
||||
}
|
||||
return;
|
||||
@@ -137,8 +137,8 @@ void CameraComponent::SetColorScalePostProcessScale(const Math::Vector4& value)
|
||||
std::vector<Math::Vector4> CameraComponent::GetColorScalePostProcessPasses() const {
|
||||
std::vector<Math::Vector4> values;
|
||||
values.reserve(m_postProcessPasses.size());
|
||||
for (const Rendering::CameraPostProcessPassDesc& pass : m_postProcessPasses) {
|
||||
if (pass.type == Rendering::CameraPostProcessPassType::ColorScale) {
|
||||
for (const Rendering::FullscreenPassDesc& pass : m_postProcessPasses) {
|
||||
if (pass.type == Rendering::FullscreenPassType::ColorScale) {
|
||||
values.push_back(pass.colorScale.scale);
|
||||
}
|
||||
}
|
||||
@@ -157,7 +157,7 @@ void CameraComponent::AddColorScalePostProcessPass(const Math::Vector4& value) {
|
||||
m_colorScalePostProcessDefaultScale = value;
|
||||
}
|
||||
|
||||
m_postProcessPasses.push_back(Rendering::CameraPostProcessPassDesc::MakeColorScale(value));
|
||||
m_postProcessPasses.push_back(Rendering::FullscreenPassDesc::MakeColorScale(value));
|
||||
}
|
||||
|
||||
void CameraComponent::ClearColorScalePostProcessPasses() {
|
||||
@@ -165,8 +165,8 @@ void CameraComponent::ClearColorScalePostProcessPasses() {
|
||||
std::remove_if(
|
||||
m_postProcessPasses.begin(),
|
||||
m_postProcessPasses.end(),
|
||||
[](const Rendering::CameraPostProcessPassDesc& pass) {
|
||||
return pass.type == Rendering::CameraPostProcessPassType::ColorScale;
|
||||
[](const Rendering::FullscreenPassDesc& pass) {
|
||||
return pass.type == Rendering::FullscreenPassType::ColorScale;
|
||||
}),
|
||||
m_postProcessPasses.end());
|
||||
}
|
||||
@@ -288,10 +288,10 @@ void CameraComponent::Serialize(std::ostream& os) const {
|
||||
os << "finalColorOverrideScale=" << EncodeVector4(m_finalColorOverrides.finalColorScale) << ";";
|
||||
os << "postProcessPassCount=" << m_postProcessPasses.size() << ";";
|
||||
for (size_t index = 0; index < m_postProcessPasses.size(); ++index) {
|
||||
const Rendering::CameraPostProcessPassDesc& pass = m_postProcessPasses[index];
|
||||
const Rendering::FullscreenPassDesc& pass = m_postProcessPasses[index];
|
||||
os << "postProcessPass" << index << "Type=" << static_cast<int>(pass.type) << ";";
|
||||
switch (pass.type) {
|
||||
case Rendering::CameraPostProcessPassType::ColorScale:
|
||||
case Rendering::FullscreenPassType::ColorScale:
|
||||
os << "postProcessPass" << index << "ColorScale="
|
||||
<< EncodeVector4(pass.colorScale.scale) << ";";
|
||||
break;
|
||||
@@ -313,7 +313,7 @@ void CameraComponent::Deserialize(std::istream& is) {
|
||||
std::string pendingSkyboxMaterialPath;
|
||||
Resources::AssetRef pendingSkyboxMaterialRef;
|
||||
size_t postProcessPassCount = 0;
|
||||
Rendering::CameraPostProcessStack deserializedPostProcessPasses;
|
||||
Rendering::FullscreenPassStack deserializedPostProcessPasses;
|
||||
bool legacyColorScaleEnabled = false;
|
||||
size_t colorScalePassCount = 0;
|
||||
std::vector<Math::Vector4> deserializedColorScalePasses;
|
||||
@@ -420,10 +420,10 @@ void CameraComponent::Deserialize(std::istream& is) {
|
||||
deserializedPostProcessPasses.resize(index + 1);
|
||||
}
|
||||
|
||||
Rendering::CameraPostProcessPassDesc& pass = deserializedPostProcessPasses[index];
|
||||
Rendering::FullscreenPassDesc& pass = deserializedPostProcessPasses[index];
|
||||
const std::string property = key.substr(propertyPos);
|
||||
if (property == "Type") {
|
||||
pass.type = static_cast<Rendering::CameraPostProcessPassType>(std::stoi(value));
|
||||
pass.type = static_cast<Rendering::FullscreenPassType>(std::stoi(value));
|
||||
} else if (property == "ColorScale") {
|
||||
TryParseVector4(value, pass.colorScale.scale);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user