helloworld.cpp 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. /*
  2. * Copyright 2011-2025 Branimir Karadzic. All rights reserved.
  3. * License: https://github.com/bkaradzic/bgfx/blob/master/LICENSE
  4. */
  5. #include <bx/uint32_t.h>
  6. #include "common.h"
  7. #include "bgfx_utils.h"
  8. #include "logo.h"
  9. #include "imgui/imgui.h"
  10. namespace
  11. {
  12. class ExampleHelloWorld : public entry::AppI
  13. {
  14. public:
  15. ExampleHelloWorld(const char* _name, const char* _description, const char* _url)
  16. : entry::AppI(_name, _description, _url)
  17. {
  18. }
  19. void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
  20. {
  21. Args args(_argc, _argv);
  22. m_width = _width;
  23. m_height = _height;
  24. m_debug = BGFX_DEBUG_TEXT;
  25. m_reset = BGFX_RESET_VSYNC;
  26. bgfx::Init init;
  27. init.type = args.m_type;
  28. init.vendorId = args.m_pciId;
  29. init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
  30. init.platformData.ndt = entry::getNativeDisplayHandle();
  31. init.platformData.type = entry::getNativeWindowHandleType();
  32. init.resolution.width = m_width;
  33. init.resolution.height = m_height;
  34. init.resolution.reset = m_reset;
  35. bgfx::init(init);
  36. // Enable debug text.
  37. bgfx::setDebug(m_debug);
  38. // Set view 0 clear state.
  39. bgfx::setViewClear(0
  40. , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
  41. , 0x303030ff
  42. , 1.0f
  43. , 0
  44. );
  45. imguiCreate();
  46. }
  47. virtual int shutdown() override
  48. {
  49. imguiDestroy();
  50. // Shutdown bgfx.
  51. bgfx::shutdown();
  52. return 0;
  53. }
  54. bool update() override
  55. {
  56. if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
  57. {
  58. imguiBeginFrame(m_mouseState.m_mx
  59. , m_mouseState.m_my
  60. , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
  61. | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
  62. | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
  63. , m_mouseState.m_mz
  64. , uint16_t(m_width)
  65. , uint16_t(m_height)
  66. );
  67. showExampleDialog(this);
  68. imguiEndFrame();
  69. // Set view 0 default viewport.
  70. bgfx::setViewRect(0, 0, 0, uint16_t(m_width), uint16_t(m_height) );
  71. // This dummy draw call is here to make sure that view 0 is cleared
  72. // if no other draw calls are submitted to view 0.
  73. bgfx::touch(0);
  74. // Use debug font to print information about this example.
  75. bgfx::dbgTextClear();
  76. const bgfx::Stats* stats = bgfx::getStats();
  77. bgfx::dbgTextImage(
  78. bx::max<uint16_t>(uint16_t(stats->textWidth/2), 20)-20
  79. , bx::max<uint16_t>(uint16_t(stats->textHeight/2), 6)-6
  80. , 40
  81. , 12
  82. , s_logo
  83. , 160
  84. );
  85. bgfx::dbgTextPrintf(0, 1, 0x0f, "Color can be changed with ANSI \x1b[9;me\x1b[10;ms\x1b[11;mc\x1b[12;ma\x1b[13;mp\x1b[14;me\x1b[0m code too.");
  86. bgfx::dbgTextPrintf(80, 1, 0x0f, "\x1b[;0m \x1b[;1m \x1b[; 2m \x1b[; 3m \x1b[; 4m \x1b[; 5m \x1b[; 6m \x1b[; 7m \x1b[0m");
  87. bgfx::dbgTextPrintf(80, 2, 0x0f, "\x1b[;8m \x1b[;9m \x1b[;10m \x1b[;11m \x1b[;12m \x1b[;13m \x1b[;14m \x1b[;15m \x1b[0m");
  88. bgfx::dbgTextPrintf(0, 2, 0x0f, "Backbuffer %dW x %dH in pixels, debug text %dW x %dH in characters."
  89. , stats->width
  90. , stats->height
  91. , stats->textWidth
  92. , stats->textHeight
  93. );
  94. // Advance to next frame. Rendering thread will be kicked to
  95. // process submitted rendering primitives.
  96. bgfx::frame();
  97. return true;
  98. }
  99. return false;
  100. }
  101. entry::MouseState m_mouseState;
  102. uint32_t m_width;
  103. uint32_t m_height;
  104. uint32_t m_debug;
  105. uint32_t m_reset;
  106. };
  107. } // namespace
  108. ENTRY_IMPLEMENT_MAIN(
  109. ExampleHelloWorld
  110. , "00-helloworld"
  111. , "Initialization and debug text."
  112. , "https://bkaradzic.github.io/bgfx/examples.html#helloworld"
  113. );