helloworld.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. /*
  2. * Copyright 2011-2023 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.resolution.width = m_width;
  32. init.resolution.height = m_height;
  33. init.resolution.reset = m_reset;
  34. bgfx::init(init);
  35. // Enable debug text.
  36. bgfx::setDebug(m_debug);
  37. // Set view 0 clear state.
  38. bgfx::setViewClear(0
  39. , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
  40. , 0x303030ff
  41. , 1.0f
  42. , 0
  43. );
  44. imguiCreate();
  45. }
  46. virtual int shutdown() override
  47. {
  48. imguiDestroy();
  49. // Shutdown bgfx.
  50. bgfx::shutdown();
  51. return 0;
  52. }
  53. bool update() override
  54. {
  55. if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
  56. {
  57. imguiBeginFrame(m_mouseState.m_mx
  58. , m_mouseState.m_my
  59. , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
  60. | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
  61. | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
  62. , m_mouseState.m_mz
  63. , uint16_t(m_width)
  64. , uint16_t(m_height)
  65. );
  66. showExampleDialog(this);
  67. imguiEndFrame();
  68. // Set view 0 default viewport.
  69. bgfx::setViewRect(0, 0, 0, uint16_t(m_width), uint16_t(m_height) );
  70. // This dummy draw call is here to make sure that view 0 is cleared
  71. // if no other draw calls are submitted to view 0.
  72. bgfx::touch(0);
  73. // Use debug font to print information about this example.
  74. bgfx::dbgTextClear();
  75. bgfx::dbgTextImage(
  76. bx::max<uint16_t>(uint16_t(m_width /2/8 ), 20)-20
  77. , bx::max<uint16_t>(uint16_t(m_height/2/16), 6)-6
  78. , 40
  79. , 12
  80. , s_logo
  81. , 160
  82. );
  83. 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.");
  84. bgfx::dbgTextPrintf(80, 1, 0x0f, "\x1b[;0m \x1b[;1m \x1b[; 2m \x1b[; 3m \x1b[; 4m \x1b[; 5m \x1b[; 6m \x1b[; 7m \x1b[0m");
  85. bgfx::dbgTextPrintf(80, 2, 0x0f, "\x1b[;8m \x1b[;9m \x1b[;10m \x1b[;11m \x1b[;12m \x1b[;13m \x1b[;14m \x1b[;15m \x1b[0m");
  86. const bgfx::Stats* stats = bgfx::getStats();
  87. bgfx::dbgTextPrintf(0, 2, 0x0f, "Backbuffer %dW x %dH in pixels, debug text %dW x %dH in characters."
  88. , stats->width
  89. , stats->height
  90. , stats->textWidth
  91. , stats->textHeight
  92. );
  93. // Advance to next frame. Rendering thread will be kicked to
  94. // process submitted rendering primitives.
  95. bgfx::frame();
  96. return true;
  97. }
  98. return false;
  99. }
  100. entry::MouseState m_mouseState;
  101. uint32_t m_width;
  102. uint32_t m_height;
  103. uint32_t m_debug;
  104. uint32_t m_reset;
  105. };
  106. } // namespace
  107. ENTRY_IMPLEMENT_MAIN(
  108. ExampleHelloWorld
  109. , "00-helloworld"
  110. , "Initialization and debug text."
  111. , "https://bkaradzic.github.io/bgfx/examples.html#helloworld"
  112. );