feat: add explicit camera clear modes
This commit is contained in:
@@ -33,6 +33,7 @@ void CameraComponent::Serialize(std::ostream& os) const {
|
||||
os << "far=" << m_farClipPlane << ";";
|
||||
os << "depth=" << m_depth << ";";
|
||||
os << "primary=" << (m_primary ? 1 : 0) << ";";
|
||||
os << "clearMode=" << static_cast<int>(m_clearMode) << ";";
|
||||
os << "clearColor=" << m_clearColor.r << "," << m_clearColor.g << "," << m_clearColor.b << "," << m_clearColor.a << ";";
|
||||
}
|
||||
|
||||
@@ -65,6 +66,8 @@ void CameraComponent::Deserialize(std::istream& is) {
|
||||
m_depth = std::stof(value);
|
||||
} else if (key == "primary") {
|
||||
m_primary = (std::stoi(value) != 0);
|
||||
} else if (key == "clearMode") {
|
||||
m_clearMode = static_cast<CameraClearMode>(std::stoi(value));
|
||||
} else if (key == "clearColor") {
|
||||
std::replace(value.begin(), value.end(), ',', ' ');
|
||||
std::istringstream ss(value);
|
||||
|
||||
@@ -26,6 +26,20 @@ bool IsUsableCamera(const Components::CameraComponent* camera) {
|
||||
camera->GetGameObject()->IsActiveInHierarchy();
|
||||
}
|
||||
|
||||
RenderClearFlags ResolveClearFlags(const Components::CameraComponent& camera, size_t cameraIndex) {
|
||||
switch (camera.GetClearMode()) {
|
||||
case Components::CameraClearMode::ColorAndDepth:
|
||||
return RenderClearFlags::All;
|
||||
case Components::CameraClearMode::DepthOnly:
|
||||
return RenderClearFlags::Depth;
|
||||
case Components::CameraClearMode::None:
|
||||
return RenderClearFlags::None;
|
||||
case Components::CameraClearMode::Auto:
|
||||
default:
|
||||
return cameraIndex == 0 ? RenderClearFlags::All : RenderClearFlags::Depth;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
SceneRenderer::SceneRenderer() = default;
|
||||
@@ -88,7 +102,7 @@ std::vector<CameraRenderRequest> SceneRenderer::BuildRenderRequests(
|
||||
request.context = context;
|
||||
request.surface = surface;
|
||||
request.cameraDepth = camera->GetDepth();
|
||||
request.clearFlags = cameraIndex == 0 ? RenderClearFlags::All : RenderClearFlags::Depth;
|
||||
request.clearFlags = ResolveClearFlags(*camera, cameraIndex);
|
||||
requests.push_back(request);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user