Finalize XCUI hosted preview texture registration flow

This commit is contained in:
2026-04-05 06:41:32 +08:00
parent 1fd6163647
commit a1b98abfbb

View File

@@ -344,11 +344,9 @@ void Application::ShutdownRenderer() {
void Application::DestroyHostedPreviewSurfaces() {
for (HostedPreviewOffscreenSurface& previewSurface : m_hostedPreviewSurfaces) {
if (previewSurface.imguiCpuHandle.ptr != 0) {
if (previewSurface.textureRegistration.cpuHandle.ptr != 0) {
if (m_windowCompositor != nullptr) {
m_windowCompositor->FreeTextureDescriptor(
previewSurface.imguiCpuHandle,
previewSurface.imguiGpuHandle);
m_windowCompositor->FreeTextureDescriptor(previewSurface.textureRegistration);
}
}
ShutdownAndDelete(previewSurface.colorView);
@@ -436,18 +434,14 @@ bool Application::EnsureHostedPreviewSurface(
return true;
}
if (previewSurface.imguiCpuHandle.ptr != 0) {
if (previewSurface.textureRegistration.cpuHandle.ptr != 0) {
if (m_windowCompositor != nullptr) {
m_windowCompositor->FreeTextureDescriptor(
previewSurface.imguiCpuHandle,
previewSurface.imguiGpuHandle);
m_windowCompositor->FreeTextureDescriptor(previewSurface.textureRegistration);
}
}
ShutdownAndDelete(previewSurface.colorView);
ShutdownAndDelete(previewSurface.colorTexture);
previewSurface.imguiCpuHandle = {};
previewSurface.imguiGpuHandle = {};
previewSurface.imguiTextureId = {};
previewSurface.textureRegistration = {};
previewSurface.width = width;
previewSurface.height = height;
previewSurface.colorState = ::XCEngine::RHI::ResourceStates::Common;
@@ -484,14 +478,10 @@ bool Application::EnsureHostedPreviewSurface(
!m_windowCompositor->CreateTextureDescriptor(
m_windowRenderer.GetRHIDevice(),
previewSurface.colorTexture,
&previewSurface.imguiCpuHandle,
&previewSurface.imguiGpuHandle,
&previewSurface.imguiTextureId)) {
previewSurface.textureRegistration)) {
ShutdownAndDelete(previewSurface.colorView);
ShutdownAndDelete(previewSurface.colorTexture);
previewSurface.imguiCpuHandle = {};
previewSurface.imguiGpuHandle = {};
previewSurface.imguiTextureId = {};
previewSurface.textureRegistration = {};
return false;
}
@@ -849,14 +839,9 @@ void Application::RenderQueuedHostedPreviews(
drainStats.renderedDrawListCount += overlayStats.drawListCount;
drainStats.renderedCommandCount += overlayStats.renderedCommandCount;
drainStats.skippedCommandCount += overlayStats.skippedCommandCount;
::XCEngine::UI::UITextureHandle previewTexture = {};
previewTexture.nativeHandle = static_cast<std::uintptr_t>(previewSurface.imguiTextureId);
previewTexture.width = previewSurface.width;
previewTexture.height = previewSurface.height;
previewTexture.kind = ::XCEngine::UI::UITextureHandleKind::ImGuiDescriptor;
m_hostedPreviewSurfaceRegistry.UpdateSurface(
queuedFrame.debugName,
previewTexture,
previewSurface.textureRegistration.texture,
::XCEngine::UI::UIRect(
0.0f,
0.0f,