summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/bgfx/examples/23-vectordisplay/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/bgfx/examples/23-vectordisplay/main.cpp')
-rw-r--r--3rdparty/bgfx/examples/23-vectordisplay/main.cpp276
1 files changed, 159 insertions, 117 deletions
diff --git a/3rdparty/bgfx/examples/23-vectordisplay/main.cpp b/3rdparty/bgfx/examples/23-vectordisplay/main.cpp
index 9a89d16aba6..e71943e08b3 100644
--- a/3rdparty/bgfx/examples/23-vectordisplay/main.cpp
+++ b/3rdparty/bgfx/examples/23-vectordisplay/main.cpp
@@ -8,6 +8,10 @@
#include "bgfx_utils.h"
#include "vectordisplay.h"
+#include "imgui/imgui.h"
+
+namespace
+{
struct PosColorVertex
{
@@ -30,144 +34,182 @@ struct PosColorVertex
bgfx::VertexDecl PosColorVertex::ms_decl;
-int _main_(int _argc, char** _argv)
+class ExampleVectorDisplay : public entry::AppI
{
- Args args(_argc, _argv);
+public:
+ ExampleVectorDisplay(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
- uint32_t width = 1280;
- uint32_t height = 720;
- uint32_t debug = BGFX_DEBUG_TEXT;
- uint32_t reset = BGFX_RESET_VSYNC;
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
+ {
+ Args args(_argc, _argv);
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
+ m_reset = BGFX_RESET_VSYNC;
- bgfx::init(args.m_type, args.m_pciId);
- bgfx::reset(width, height, reset);
+ bgfx::init(args.m_type, args.m_pciId);
+ bgfx::reset(m_width, m_height, m_reset);
- const bgfx::RendererType::Enum renderer = bgfx::getRendererType();
- float texelHalf = bgfx::RendererType::Direct3D9 == renderer ? 0.5f : 0.0f;
- bool originBottomLeft = bgfx::RendererType::OpenGL == renderer
- || bgfx::RendererType::OpenGLES == renderer;
- VectorDisplay vd(originBottomLeft, texelHalf);
- vd.setup(uint16_t(width), uint16_t(height) );
+ const bgfx::RendererType::Enum renderer = bgfx::getRendererType();
+ float texelHalf = bgfx::RendererType::Direct3D9 == renderer ? 0.5f : 0.0f;
+ bool originBottomLeft = bgfx::RendererType::OpenGL == renderer
+ || bgfx::RendererType::OpenGLES == renderer;
+ m_vd.init(originBottomLeft, texelHalf);
+ m_vd.setup(uint16_t(m_width), uint16_t(m_height) );
- // Enable debug text.
- bgfx::setDebug(debug);
+ // Enable debug text.
+ bgfx::setDebug(m_debug);
- // Set view 0 clear state.
- bgfx::setViewClear(0, BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH, 0x303030ff, 1.0f, 0);
+ // Set view 0 clear state.
+ bgfx::setViewClear(0, BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH, 0x303030ff, 1.0f, 0);
- // Create vertex stream declaration.
- PosColorVertex::init();
+ // Create vertex stream declaration.
+ PosColorVertex::init();
- float at[3] = { 0.0f, 0.0f, 0.0f };
- float eye[3] = { 0.0f, 0.0f, -35.0f };
+ m_oldWidth = m_width;
+ m_oldHeight = m_height;
- uint32_t oldWidth = width;
- uint32_t oldHeight = height;
+ imguiCreate();
+ }
- while (!entry::processEvents(width, height, debug, reset) )
+ virtual int shutdown() override
{
- if (oldWidth != width
- || oldHeight != height)
- {
- oldWidth = width;
- oldHeight = height;
- vd.resize(uint16_t(width), uint16_t(height) );
- }
+ imguiDestroy();
- float view[16];
- float proj[16];
- bx::mtxLookAt(view, eye, at);
- bx::mtxProj(proj, 60.0f, float(width) / float(height), 0.1f, 100.0f, bgfx::getCaps()->homogeneousDepth);
- // Set view and projection matrix for view 0.
- bgfx::setViewTransform(0, view, proj);
-
- // Set view 0 default viewport.
- bgfx::setViewRect(0, 0, 0, uint16_t(width), uint16_t(height) );
-
- // This dummy draw call is here to make sure that view 0 is cleared
- // if no other draw calls are submitted to view 0.
- bgfx::touch(0);
-
- int64_t now = bx::getHPCounter();
- static int64_t last = now;
- const int64_t frameTime = now - last;
- last = now;
- const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0 / freq;
-
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/23-vectordisplay");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Rendering lines as oldschool vectors.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime) * toMs);
-
- vd.beginFrame();
-
- //simplex test
- vd.setDrawColor(0.7f, 0.7f, 1.0f);
- vd.drawSimplexFont(50.0f, 80.0f, 1.5f, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
- vd.drawSimplexFont(50.0f, 140.0f, 1.5f, "abcdefghijklmnopqrstuvwxyz");
- vd.drawSimplexFont(50.0f, 200.0f, 1.5f, "!@#$%^&*()-=<>/?;:'\"{}[]|\\+=-_");
-
- vd.setDrawColor(1.0f, 0.7f, 0.7f);
-
- //test pattern for lines
- for (int ii = 0; ii < 4; ii++)
+ // Cleanup.
+ m_vd.teardown();
+
+ // Shutdown bgfx.
+ bgfx::shutdown();
+
+ return 0;
+ }
+
+ bool update() override
+ {
+ if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
- for (int jj = 0; jj < ii; jj++) //draw more intensive lines
+ imguiBeginFrame(m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
+
+ showExampleDialog(this);
+
+ imguiEndFrame();
+
+ if (m_oldWidth != m_width
+ || m_oldHeight != m_height)
{
- vd.drawLine(50.0f, 350.0f + 40 * ii, 200.0f, 350.0f + 40 * ii);
+ m_oldWidth = m_width;
+ m_oldHeight = m_height;
+ m_vd.resize(uint16_t(m_width), uint16_t(m_height) );
}
- }
- for (int ii = 0; ii < 4; ii++)
- {
- for (int jj = 0; jj <= ii; jj++)
+ const float at[3] = { 0.0f, 0.0f, 0.0f };
+ const float eye[3] = { 0.0f, 0.0f, -35.0f };
+
+ float view[16];
+ float proj[16];
+ bx::mtxLookAt(view, eye, at);
+ bx::mtxProj(proj, 60.0f, float(m_width) / float(m_height), 0.1f, 100.0f, bgfx::getCaps()->homogeneousDepth);
+ // Set view and projection matrix for view 0.
+ bgfx::setViewTransform(0, view, proj);
+
+ // Set view 0 default viewport.
+ bgfx::setViewRect(0, 0, 0, uint16_t(m_width), uint16_t(m_height) );
+
+ // This dummy draw call is here to make sure that view 0 is cleared
+ // if no other draw calls are submitted to view 0.
+ bgfx::touch(0);
+
+ m_vd.beginFrame();
+
+ //simplex test
+ m_vd.setDrawColor(0.7f, 0.7f, 1.0f);
+ m_vd.drawSimplexFont(50.0f, 80.0f, 1.5f, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
+ m_vd.drawSimplexFont(50.0f, 140.0f, 1.5f, "abcdefghijklmnopqrstuvwxyz");
+ m_vd.drawSimplexFont(50.0f, 200.0f, 1.5f, "!@#$%^&*()-=<>/?;:'\"{}[]|\\+=-_");
+
+ m_vd.setDrawColor(1.0f, 0.7f, 0.7f);
+
+ //test pattern for lines
+ for (int ii = 0; ii < 4; ii++)
{
- vd.drawLine(50.0f + 40 * ii, 600.0f, 50.0f + 40 * ii, 700.0f);
+ for (int jj = 0; jj < ii; jj++) //draw more intensive lines
+ {
+ m_vd.drawLine(50.0f, 350.0f + 40 * ii, 200.0f, 350.0f + 40 * ii);
+ }
}
+
+ for (int ii = 0; ii < 4; ii++)
+ {
+ for (int jj = 0; jj <= ii; jj++)
+ {
+ m_vd.drawLine(50.0f + 40 * ii, 600.0f, 50.0f + 40 * ii, 700.0f);
+ }
+ }
+
+ //
+ // test pattern for shapes
+ //
+ m_vd.setDrawColor(0.7f, 0.7f, 1.0f);
+ m_vd.drawCircle(250.0f, 450.0f, 10.0f, 32.0f);
+ m_vd.drawCircle(300.0f, 450.0f, 30.0f, 32.0f);
+ m_vd.drawCircle(400.0f, 450.0f, 60.0f, 32.0f);
+ m_vd.drawCircle(500.0f, 450.0f, 80.0f, 64.0f);
+
+ m_vd.setDrawColor(0.7f, 1.0f, 0.7f);
+ m_vd.drawBox(250.0f, 600.0f, 10.0f, 10.0f);
+ m_vd.drawBox(300.0f, 600.0f, 30.0f, 30.0f);
+ m_vd.drawBox(350.0f, 600.0f, 60.0f, 60.0f);
+ m_vd.drawBox(450.0f, 600.0f, 80.0f, 80.0f);
+
+ m_vd.setDrawColor(1.0f, 0.7f, 1.0f);
+ m_vd.drawWheel(bx::kPi, 800.0f, 450.0f, 80.0f);
+ m_vd.drawWheel(3.0f * bx::kPi / 4.0f, 95.0f, 450.0f, 60.0f);
+ m_vd.drawWheel(bx::kPi / 2.0f, 1150.0f, 450.0f, 30.0f);
+ m_vd.drawWheel(bx::kPi / 4.0f, 1250.0f, 450.0f, 10.0f);
+
+ // draw moving shape
+ static float counter = 0.0f;
+ counter += 0.01f;
+ float posX = m_width / 2.0f + bx::fsin(counter * 3.18378f) * (m_width / 2.0f);
+ float posY = m_height / 2.0f + bx::fcos(counter) * (m_height / 2.0f);
+ m_vd.drawCircle(posX, posY, 5.0f, 10.0f);
+
+ m_vd.endFrame();
+
+ // Advance to next frame. Rendering thread will be kicked to
+ // process submitted rendering primitives.
+ bgfx::frame();
+
+ return true;
}
- //
- // test pattern for shapes
- //
- vd.setDrawColor(0.7f, 0.7f, 1.0f);
- vd.drawCircle(250.0f, 450.0f, 10.0f, 32.0f);
- vd.drawCircle(300.0f, 450.0f, 30.0f, 32.0f);
- vd.drawCircle(400.0f, 450.0f, 60.0f, 32.0f);
- vd.drawCircle(500.0f, 450.0f, 80.0f, 64.0f);
-
- vd.setDrawColor(0.7f, 1.0f, 0.7f);
- vd.drawBox(250.0f, 600.0f, 10.0f, 10.0f);
- vd.drawBox(300.0f, 600.0f, 30.0f, 30.0f);
- vd.drawBox(350.0f, 600.0f, 60.0f, 60.0f);
- vd.drawBox(450.0f, 600.0f, 80.0f, 80.0f);
-
- vd.setDrawColor(1.0f, 0.7f, 1.0f);
- vd.drawWheel(bx::pi, 800.0f, 450.0f, 80.0f);
- vd.drawWheel(3.0f * bx::pi / 4.0f, 95.0f, 450.0f, 60.0f);
- vd.drawWheel(bx::pi / 2.0f, 1150.0f, 450.0f, 30.0f);
- vd.drawWheel(bx::pi / 4.0f, 1250.0f, 450.0f, 10.0f);
-
- // draw moving shape
- static float counter = 0.0f;
- counter += 0.01f;
- float posX = width / 2.0f + bx::fsin(counter * 3.18378f) * (width / 2.0f);
- float posY = height / 2.0f + bx::fcos(counter) * (height / 2.0f);
- vd.drawCircle(posX, posY, 5.0f, 10.0f);
-
- vd.endFrame();
-
- // Advance to next frame. Rendering thread will be kicked to
- // process submitted rendering primitives.
- bgfx::frame();
+ return false;
}
- // Cleanup.
- vd.teardown();
+ entry::MouseState m_mouseState;
+
+ uint32_t m_width;
+ uint32_t m_height;
+ uint32_t m_debug;
+ uint32_t m_reset;
+ VectorDisplay m_vd;
+
+ uint32_t m_oldWidth;
+ uint32_t m_oldHeight;
+};
- // Shutdown bgfx.
- bgfx::shutdown();
+} // namespace
- return 0;
-}
+ENTRY_IMPLEMENT_MAIN(ExampleVectorDisplay, "23-vectordisplay", "Rendering lines as oldschool vectors.");