98 lines
2.9 KiB
C++
98 lines
2.9 KiB
C++
#include <gtest/gtest.h>
|
|
|
|
#include "XCUIBackend/ImGuiTransitionBackend.h"
|
|
|
|
#include <XCEngine/UI/DrawData.h>
|
|
|
|
#include <imgui.h>
|
|
|
|
namespace {
|
|
|
|
class ImGuiContextScope {
|
|
public:
|
|
ImGuiContextScope() {
|
|
IMGUI_CHECKVERSION();
|
|
ImGui::CreateContext();
|
|
}
|
|
|
|
~ImGuiContextScope() {
|
|
ImGui::DestroyContext();
|
|
}
|
|
};
|
|
|
|
} // namespace
|
|
|
|
TEST(XCUIImGuiTransitionBackendTest, BeginFrameResetsPendingState) {
|
|
ImGuiContextScope contextScope;
|
|
|
|
XCEngine::Editor::XCUIBackend::ImGuiTransitionBackend backend = {};
|
|
XCEngine::UI::UIDrawList drawList("Pending");
|
|
drawList.AddFilledRect(
|
|
XCEngine::UI::UIRect(0.0f, 0.0f, 16.0f, 16.0f),
|
|
XCEngine::UI::UIColor(1.0f, 0.0f, 0.0f, 1.0f));
|
|
|
|
backend.BeginFrame();
|
|
backend.Submit(drawList);
|
|
ASSERT_EQ(backend.GetPendingDrawListCount(), 1u);
|
|
ASSERT_EQ(backend.GetPendingCommandCount(), 1u);
|
|
|
|
backend.BeginFrame();
|
|
EXPECT_EQ(backend.GetPendingDrawListCount(), 0u);
|
|
EXPECT_EQ(backend.GetPendingCommandCount(), 0u);
|
|
}
|
|
|
|
TEST(XCUIImGuiTransitionBackendTest, EndFrameFlushesCommandsToImGuiDrawList) {
|
|
ImGuiContextScope contextScope;
|
|
ImGuiIO& io = ImGui::GetIO();
|
|
io.DisplaySize = ImVec2(1280.0f, 720.0f);
|
|
io.DeltaTime = 1.0f / 60.0f;
|
|
unsigned char* fontPixels = nullptr;
|
|
int fontWidth = 0;
|
|
int fontHeight = 0;
|
|
io.Fonts->GetTexDataAsRGBA32(&fontPixels, &fontWidth, &fontHeight);
|
|
io.Fonts->SetTexID(static_cast<ImTextureID>(1));
|
|
|
|
XCEngine::Editor::XCUIBackend::ImGuiTransitionBackend backend = {};
|
|
XCEngine::UI::UIDrawList drawList("FlushTest");
|
|
drawList.PushClipRect(XCEngine::UI::UIRect(0.0f, 0.0f, 220.0f, 160.0f));
|
|
drawList.AddFilledRect(
|
|
XCEngine::UI::UIRect(10.0f, 10.0f, 60.0f, 40.0f),
|
|
XCEngine::UI::UIColor(0.1f, 0.2f, 0.3f, 1.0f),
|
|
4.0f);
|
|
drawList.AddRectOutline(
|
|
XCEngine::UI::UIRect(10.0f, 10.0f, 60.0f, 40.0f),
|
|
XCEngine::UI::UIColor(0.9f, 0.9f, 0.9f, 1.0f),
|
|
2.0f,
|
|
4.0f);
|
|
drawList.AddText(
|
|
XCEngine::UI::UIPoint(18.0f, 26.0f),
|
|
"Backend",
|
|
XCEngine::UI::UIColor(1.0f, 1.0f, 1.0f, 1.0f),
|
|
16.0f);
|
|
drawList.AddImage(
|
|
XCEngine::UI::UIRect(90.0f, 12.0f, 32.0f, 32.0f),
|
|
XCEngine::UI::UITextureHandle{ 0x100u, 32u, 32u },
|
|
XCEngine::UI::UIColor(1.0f, 1.0f, 1.0f, 1.0f));
|
|
drawList.PopClipRect();
|
|
|
|
backend.BeginFrame();
|
|
backend.Submit(drawList);
|
|
|
|
ImGui::NewFrame();
|
|
ASSERT_TRUE(ImGui::Begin("XCUIBackendTest"));
|
|
ImDrawList* targetDrawList = ImGui::GetWindowDrawList();
|
|
ASSERT_NE(targetDrawList, nullptr);
|
|
|
|
const bool flushed = backend.EndFrame(targetDrawList);
|
|
|
|
ImGui::End();
|
|
ImGui::EndFrame();
|
|
|
|
EXPECT_TRUE(flushed);
|
|
EXPECT_EQ(backend.GetLastFlushedDrawListCount(), 1u);
|
|
EXPECT_EQ(backend.GetLastFlushedCommandCount(), 6u);
|
|
EXPECT_EQ(backend.GetPendingCommandCount(), 0u);
|
|
EXPECT_GT(targetDrawList->VtxBuffer.Size, 0);
|
|
EXPECT_GT(targetDrawList->CmdBuffer.Size, 0);
|
|
}
|