Publish native hosted preview textures through XCUI compositor
This commit is contained in:
@@ -7,9 +7,20 @@
|
||||
namespace {
|
||||
|
||||
using XCEngine::Editor::XCUIBackend::XCUIEditorCommandRouter;
|
||||
using XCEngine::Editor::XCUIBackend::XCUIHostedPreviewFrame;
|
||||
using XCEngine::Editor::XCUIBackend::XCUIHostedPreviewQueue;
|
||||
using XCEngine::Editor::XCUIBackend::XCUIHostedPreviewSurfaceRegistry;
|
||||
using XCEngine::Editor::XCUIBackend::UITextureRegistration;
|
||||
using XCEngine::Editor::XCUIBackend::XCUIInputBridgeFrameDelta;
|
||||
using XCEngine::Input::KeyCode;
|
||||
using XCEngine::NewEditor::Application;
|
||||
using XCEngine::UI::UIColor;
|
||||
using XCEngine::UI::UIDrawData;
|
||||
using XCEngine::UI::UIDrawList;
|
||||
using XCEngine::UI::UIRect;
|
||||
using XCEngine::UI::UISize;
|
||||
using XCEngine::UI::UITextureHandle;
|
||||
using XCEngine::UI::UITextureHandleKind;
|
||||
|
||||
constexpr std::size_t ToPanelIndex(Application::ShellPanelId panelId) {
|
||||
return static_cast<std::size_t>(panelId);
|
||||
@@ -265,4 +276,47 @@ TEST(ApplicationShellCommandBindingsTest, PreviewShortcutInvokesCommandHandlerAn
|
||||
EXPECT_EQ(harness.hostedPreviewReconfigureCount, 1);
|
||||
}
|
||||
|
||||
TEST(ApplicationShellCommandBindingsTest, BeginHostedPreviewFrameLifecycleClearsQueueAndResetsRegistryFlags) {
|
||||
XCUIHostedPreviewQueue queue = {};
|
||||
XCUIHostedPreviewSurfaceRegistry registry = {};
|
||||
|
||||
UIDrawData drawData = {};
|
||||
UIDrawList& drawList = drawData.EmplaceDrawList("HostedPreview");
|
||||
drawList.AddFilledRect(UIRect(4.0f, 6.0f, 24.0f, 16.0f), UIColor(1.0f, 1.0f, 1.0f, 1.0f));
|
||||
|
||||
XCUIHostedPreviewFrame frame = {};
|
||||
frame.drawData = &drawData;
|
||||
frame.canvasRect = UIRect(0.0f, 0.0f, 160.0f, 90.0f);
|
||||
frame.logicalSize = UISize(160.0f, 90.0f);
|
||||
frame.debugName = "HostedPreview";
|
||||
frame.debugSource = "tests.application";
|
||||
ASSERT_TRUE(queue.Submit(frame));
|
||||
ASSERT_EQ(queue.GetQueuedFrames().size(), 1u);
|
||||
|
||||
registry.RecordQueuedFrame(queue.GetQueuedFrames().front(), 0u);
|
||||
ASSERT_EQ(registry.GetDescriptors().size(), 1u);
|
||||
EXPECT_TRUE(registry.GetDescriptors().front().queuedThisFrame);
|
||||
|
||||
Application::BeginHostedPreviewFrameLifecycle(queue, registry);
|
||||
|
||||
EXPECT_TRUE(queue.GetQueuedFrames().empty());
|
||||
ASSERT_EQ(registry.GetDescriptors().size(), 1u);
|
||||
EXPECT_FALSE(registry.GetDescriptors().front().queuedThisFrame);
|
||||
}
|
||||
|
||||
TEST(ApplicationShellCommandBindingsTest, HostedPreviewRegistrationGuardsAllowTextureOnlyNativePublication) {
|
||||
UITextureRegistration registration = {};
|
||||
registration.texture = UITextureHandle{ 99u, 256u, 128u, UITextureHandleKind::ShaderResourceView };
|
||||
|
||||
EXPECT_TRUE(Application::HasHostedPreviewTextureRegistration(registration));
|
||||
EXPECT_TRUE(Application::HasHostedPreviewPublishedTexture(registration));
|
||||
|
||||
registration = {};
|
||||
registration.cpuHandle.ptr = 11u;
|
||||
registration.gpuHandle.ptr = 29u;
|
||||
|
||||
EXPECT_TRUE(Application::HasHostedPreviewTextureRegistration(registration));
|
||||
EXPECT_FALSE(Application::HasHostedPreviewPublishedTexture(registration));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
Reference in New Issue
Block a user