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