Ui.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. // Copyright (C) 2009-present, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #include <Tests/Framework/Framework.h>
  6. #include <AnKi/GpuMemory/RebarTransientMemoryPool.h>
  7. #include <AnKi/Util/HighRezTimer.h>
  8. #include <AnKi/Ui.h>
  9. #include <AnKi/Window.h>
  10. #if 0
  11. using namespace anki;
  12. namespace {
  13. class Label
  14. {
  15. public:
  16. Bool m_windowInitialized = false;
  17. U32 m_buttonClickCount = 0;
  18. void build(CanvasPtr canvas)
  19. {
  20. Vec4 oldBackground = ImGui::GetStyle().Colors[ImGuiCol_WindowBg];
  21. ImGui::GetStyle().Colors[ImGuiCol_WindowBg].w = 0.8f;
  22. ImGui::Begin("ImGui Demo", nullptr);
  23. if(!m_windowInitialized)
  24. {
  25. ImGui::SetWindowPos(Vec2(20, 10));
  26. ImGui::SetWindowSize(Vec2(200, 500));
  27. m_windowInitialized = true;
  28. }
  29. ImGui::Text("Label default size");
  30. canvas->pushFont(canvas->getDefaultFont().get(), 30);
  31. ImGui::Text("Label size 30");
  32. ImGui::PopFont();
  33. m_buttonClickCount += ImGui::Button("Toggle");
  34. if(m_buttonClickCount & 1)
  35. {
  36. ImGui::Button("Toggled");
  37. }
  38. ImGui::End();
  39. ImGui::GetStyle().Colors[ImGuiCol_WindowBg] = oldBackground;
  40. }
  41. };
  42. } // namespace
  43. ANKI_TEST(Ui, Ui)
  44. {
  45. g_cvarGrVsync = true;
  46. g_cvarGrValidation = true;
  47. g_cvarWindowWidth = 1024;
  48. g_cvarWindowHeight = 760;
  49. g_cvarRsrcDataPaths = "EngineAssets";
  50. initWindow();
  51. ANKI_TEST_EXPECT_NO_ERR(Input::allocateSingleton().init());
  52. initGrManager();
  53. ANKI_TEST_EXPECT_NO_ERR(ResourceManager::allocateSingleton().init(allocAligned, nullptr));
  54. UiManager* ui = &UiManager::allocateSingleton();
  55. RebarTransientMemoryPool::allocateSingleton().init();
  56. ANKI_TEST_EXPECT_NO_ERR(ui->init(allocAligned, nullptr));
  57. {
  58. FontPtr font;
  59. ANKI_TEST_EXPECT_NO_ERR(ui->newFont("UbuntuRegular.ttf", Array<U32, 4>{10, 20, 30, 60}, font));
  60. CanvasPtr canvas;
  61. ANKI_TEST_EXPECT_NO_ERR(
  62. ui->newCanvas(font.get(), 20, NativeWindow::getSingleton().getWidth(), NativeWindow::getSingleton().getHeight(), canvas));
  63. Label label;
  64. Bool done = false;
  65. while(!done)
  66. {
  67. ANKI_TEST_EXPECT_NO_ERR(Input::getSingleton().handleEvents());
  68. HighRezTimer timer;
  69. timer.start();
  70. GrManager::getSingleton().beginFrame();
  71. canvas->handleInput();
  72. if(Input::getSingleton().getKey(KeyCode::kEscape))
  73. {
  74. done = true;
  75. }
  76. canvas->beginBuilding();
  77. label.build(canvas);
  78. TexturePtr presentTex = GrManager::getSingleton().acquireNextPresentableTexture();
  79. CommandBufferInitInfo cinit;
  80. cinit.m_flags = CommandBufferFlag::kGeneralWork | CommandBufferFlag::kSmallBatch;
  81. CommandBufferPtr cmdb = GrManager::getSingleton().newCommandBuffer(cinit);
  82. TextureBarrierInfo barrier;
  83. barrier.m_previousUsage = TextureUsageBit::kNone;
  84. barrier.m_nextUsage = TextureUsageBit::kRtvDsvWrite;
  85. barrier.m_textureView = TextureView(presentTex.get(), TextureSubresourceDesc::all());
  86. cmdb->setPipelineBarrier({&barrier, 1}, {}, {});
  87. RenderTarget rt;
  88. rt.m_textureView = TextureView(presentTex.get(), TextureSubresourceDesc::all());
  89. rt.m_clearValue.m_colorf = {{1.0, 0.0, 1.0, 1.0}};
  90. cmdb->beginRenderPass({rt});
  91. canvas->appendToCommandBuffer(*cmdb);
  92. cmdb->endRenderPass();
  93. barrier.m_previousUsage = TextureUsageBit::kRtvDsvWrite;
  94. barrier.m_nextUsage = TextureUsageBit::kPresent;
  95. cmdb->setPipelineBarrier({&barrier, 1}, {}, {});
  96. cmdb->endRecording();
  97. GrManager::getSingleton().submit(cmdb.get());
  98. GrManager::getSingleton().endFrame();
  99. RebarTransientMemoryPool::getSingleton().endFrame();
  100. timer.stop();
  101. const F32 TICK = 1.0f / 30.0f;
  102. if(timer.getElapsedTime() < TICK)
  103. {
  104. HighRezTimer::sleep(TICK - timer.getElapsedTime());
  105. }
  106. }
  107. }
  108. UiManager::freeSingleton();
  109. RebarTransientMemoryPool::freeSingleton();
  110. ResourceManager::freeSingleton();
  111. GrManager::freeSingleton();
  112. Input::freeSingleton();
  113. NativeWindow::freeSingleton();
  114. }
  115. #endif