Add volume renderer extraction stage 5
This commit is contained in:
@@ -115,6 +115,10 @@ bool CompareVisibleItems(const VisibleRenderItem& lhs, const VisibleRenderItem&
|
||||
return CompareVisibleRenderItemsStable(lhs, rhs);
|
||||
}
|
||||
|
||||
bool CompareVisibleVolumes(const VisibleVolumeItem& lhs, const VisibleVolumeItem& rhs) {
|
||||
return CompareVisibleVolumesStable(lhs, rhs);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
RenderSceneData RenderSceneExtractor::Extract(
|
||||
@@ -134,13 +138,22 @@ RenderSceneData RenderSceneExtractor::Extract(
|
||||
|
||||
const std::vector<Components::GameObject*> rootGameObjects = scene.GetRootGameObjects();
|
||||
for (Components::GameObject* rootGameObject : rootGameObjects) {
|
||||
ExtractVisibleItems(rootGameObject, cameraPosition, cullingMask, sceneData.visibleItems);
|
||||
ExtractVisibleContent(
|
||||
rootGameObject,
|
||||
cameraPosition,
|
||||
cullingMask,
|
||||
sceneData.visibleItems,
|
||||
sceneData.visibleVolumes);
|
||||
}
|
||||
|
||||
std::stable_sort(
|
||||
sceneData.visibleItems.begin(),
|
||||
sceneData.visibleItems.end(),
|
||||
CompareVisibleItems);
|
||||
std::stable_sort(
|
||||
sceneData.visibleVolumes.begin(),
|
||||
sceneData.visibleVolumes.end(),
|
||||
CompareVisibleVolumes);
|
||||
ExtractLighting(scene, cameraPosition, cullingMask, sceneData.lighting);
|
||||
|
||||
return sceneData;
|
||||
@@ -163,13 +176,22 @@ RenderSceneData RenderSceneExtractor::ExtractForCamera(
|
||||
|
||||
const std::vector<Components::GameObject*> rootGameObjects = scene.GetRootGameObjects();
|
||||
for (Components::GameObject* rootGameObject : rootGameObjects) {
|
||||
ExtractVisibleItems(rootGameObject, cameraPosition, cullingMask, sceneData.visibleItems);
|
||||
ExtractVisibleContent(
|
||||
rootGameObject,
|
||||
cameraPosition,
|
||||
cullingMask,
|
||||
sceneData.visibleItems,
|
||||
sceneData.visibleVolumes);
|
||||
}
|
||||
|
||||
std::stable_sort(
|
||||
sceneData.visibleItems.begin(),
|
||||
sceneData.visibleItems.end(),
|
||||
CompareVisibleItems);
|
||||
std::stable_sort(
|
||||
sceneData.visibleVolumes.begin(),
|
||||
sceneData.visibleVolumes.end(),
|
||||
CompareVisibleVolumes);
|
||||
ExtractLighting(scene, cameraPosition, cullingMask, sceneData.lighting);
|
||||
|
||||
return sceneData;
|
||||
@@ -281,11 +303,12 @@ void RenderSceneExtractor::ExtractLighting(
|
||||
}
|
||||
}
|
||||
|
||||
void RenderSceneExtractor::ExtractVisibleItems(
|
||||
void RenderSceneExtractor::ExtractVisibleContent(
|
||||
Components::GameObject* gameObject,
|
||||
const Math::Vector3& cameraPosition,
|
||||
uint32_t cullingMask,
|
||||
std::vector<VisibleRenderItem>& visibleItems) const {
|
||||
std::vector<VisibleRenderItem>& visibleItems,
|
||||
std::vector<VisibleVolumeItem>& visibleVolumes) const {
|
||||
if (gameObject == nullptr || !gameObject->IsActiveInHierarchy()) {
|
||||
return;
|
||||
}
|
||||
@@ -295,10 +318,11 @@ void RenderSceneExtractor::ExtractVisibleItems(
|
||||
|
||||
if (isVisibleInCameraMask) {
|
||||
AppendRenderItemsForGameObject(*gameObject, cameraPosition, visibleItems);
|
||||
AppendVisibleVolumesForGameObject(*gameObject, cameraPosition, visibleVolumes);
|
||||
}
|
||||
|
||||
for (Components::GameObject* child : gameObject->GetChildren()) {
|
||||
ExtractVisibleItems(child, cameraPosition, cullingMask, visibleItems);
|
||||
ExtractVisibleContent(child, cameraPosition, cullingMask, visibleItems, visibleVolumes);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user