Formalize render object id contract

This commit is contained in:
2026-04-10 01:57:15 +08:00
parent 4debbbea1f
commit b5ba985831
12 changed files with 282 additions and 102 deletions

View File

@@ -15,6 +15,16 @@
namespace XCEngine {
namespace Rendering {
namespace {
RenderObjectId BuildRenderObjectIdOrInvalid(const Components::GameObject& gameObject) {
RenderObjectId renderObjectId = kInvalidRenderObjectId;
TryConvertRuntimeObjectIdToRenderObjectId(gameObject.GetID(), renderObjectId);
return renderObjectId;
}
} // namespace
RenderCameraData BuildRenderCameraData(
const Components::CameraComponent& camera,
uint32_t viewportWidth,
@@ -89,6 +99,7 @@ void AppendRenderItemsForGameObject(
const Math::Matrix4x4 localToWorld = gameObject.GetTransform()->GetLocalToWorldMatrix();
const Math::Vector3 worldPosition = localToWorld.GetTranslation();
const float cameraDistanceSq = (worldPosition - cameraPosition).SqrMagnitude();
const RenderObjectId renderObjectId = BuildRenderObjectIdOrInvalid(gameObject);
const Containers::Array<Resources::MeshSection>& sections = mesh->GetSections();
if (!sections.Empty()) {
@@ -101,6 +112,7 @@ void AppendRenderItemsForGameObject(
visibleItem.meshRenderer = meshRenderer;
visibleItem.mesh = mesh;
visibleItem.materialIndex = section.materialID;
visibleItem.renderObjectId = renderObjectId;
visibleItem.sectionIndex = static_cast<Core::uint32>(sectionIndex);
visibleItem.hasSection = true;
visibleItem.material = ResolveMaterial(meshRenderer, mesh, section.materialID);
@@ -117,6 +129,7 @@ void AppendRenderItemsForGameObject(
visibleItem.meshFilter = meshFilter;
visibleItem.meshRenderer = meshRenderer;
visibleItem.mesh = mesh;
visibleItem.renderObjectId = renderObjectId;
visibleItem.materialIndex = 0;
visibleItem.sectionIndex = 0;
visibleItem.hasSection = false;