helloworld.cpp 3.3 KB

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