helloworld.cpp 2.9 KB

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