diff options
author | 2016-03-08 11:44:52 +0100 | |
---|---|---|
committer | 2016-03-08 12:58:10 +0100 | |
commit | 6412c5e0763dc079312cd5c81cb077d0c393b2b4 (patch) | |
tree | ed41c94128216146df63c43cd8a5965897557175 /3rdparty/bgfx/examples/04-mesh/mesh.cpp | |
parent | 1f352c6af853e5cb0dc06ea6596be77db953a9fd (diff) |
Update BGFX and BX (nw)
Diffstat (limited to '3rdparty/bgfx/examples/04-mesh/mesh.cpp')
-rw-r--r-- | 3rdparty/bgfx/examples/04-mesh/mesh.cpp | 211 |
1 files changed, 118 insertions, 93 deletions
diff --git a/3rdparty/bgfx/examples/04-mesh/mesh.cpp b/3rdparty/bgfx/examples/04-mesh/mesh.cpp index 854cf1a23a3..bfe61df6a3f 100644 --- a/3rdparty/bgfx/examples/04-mesh/mesh.cpp +++ b/3rdparty/bgfx/examples/04-mesh/mesh.cpp @@ -6,118 +6,143 @@ #include "common.h" #include "bgfx_utils.h" -int _main_(int _argc, char** _argv) +class ExampleMesh : public entry::AppI { - Args args(_argc, _argv); - - uint32_t width = 1280; - uint32_t height = 720; - uint32_t debug = BGFX_DEBUG_TEXT; - uint32_t reset = BGFX_RESET_VSYNC; + void init(int _argc, char** _argv) BX_OVERRIDE + { + Args args(_argc, _argv); + + m_width = 1280; + m_height = 720; + m_debug = BGFX_DEBUG_TEXT; + 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); - // 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 + ); - bgfx::UniformHandle u_time = bgfx::createUniform("u_time", bgfx::UniformType::Vec4); + u_time = bgfx::createUniform("u_time", bgfx::UniformType::Vec4); - // Create program from shaders. - bgfx::ProgramHandle program = loadProgram("vs_mesh", "fs_mesh"); + // Create program from shaders. + m_program = loadProgram("vs_mesh", "fs_mesh"); - Mesh* mesh = meshLoad("meshes/bunny.bin"); + m_mesh = meshLoad("meshes/bunny.bin"); - int64_t timeOffset = bx::getHPCounter(); + m_timeOffset = bx::getHPCounter(); + } - while (!entry::processEvents(width, height, debug, reset) ) + int shutdown() BX_OVERRIDE { - // Set view 0 default viewport. - bgfx::setViewRect(0, 0, 0, width, 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; - float time = (float)( (bx::getHPCounter()-timeOffset)/double(bx::getHPFrequency() ) ); - bgfx::setUniform(u_time, &time); - - // Use debug font to print information about this example. - bgfx::dbgTextClear(); - bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/04-mesh"); - bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Loading meshes."); - bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs); - - float at[3] = { 0.0f, 1.0f, 0.0f }; - float eye[3] = { 0.0f, 1.0f, -2.5f }; - - // Set view and projection matrix for view 0. - const bgfx::HMD* hmd = bgfx::getHMD(); - if (NULL != hmd && 0 != (hmd->flags & BGFX_HMD_RENDERING) ) - { - float view[16]; - bx::mtxQuatTranslationHMD(view, hmd->eye[0].rotation, eye); + meshUnload(m_mesh); - float proj[16]; - bx::mtxProj(proj, hmd->eye[0].fov, 0.1f, 100.0f); + // Cleanup. + bgfx::destroyProgram(m_program); - bgfx::setViewTransform(0, view, proj); + bgfx::destroyUniform(u_time); - // Set view 0 default viewport. - // - // Use HMD's width/height since HMD's internal frame buffer size - // might be much larger than window size. - bgfx::setViewRect(0, 0, 0, hmd->width, hmd->height); - } - else - { - float view[16]; - bx::mtxLookAt(view, eye, at); + // Shutdown bgfx. + bgfx::shutdown(); - float proj[16]; - bx::mtxProj(proj, 60.0f, float(width)/float(height), 0.1f, 100.0f); - bgfx::setViewTransform(0, view, proj); + return 0; + } + bool update() BX_OVERRIDE + { + if (!entry::processEvents(m_width, m_height, m_debug, m_reset) ) + { // Set view 0 default viewport. - bgfx::setViewRect(0, 0, 0, width, height); + bgfx::setViewRect(0, 0, 0, m_width, 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); + + 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; + float time = (float)( (bx::getHPCounter()-m_timeOffset)/double(bx::getHPFrequency() ) ); + bgfx::setUniform(u_time, &time); + + // Use debug font to print information about this example. + bgfx::dbgTextClear(); + bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/04-mesh"); + bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Loading meshes."); + bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs); + + float at[3] = { 0.0f, 1.0f, 0.0f }; + float eye[3] = { 0.0f, 1.0f, -2.5f }; + + // Set view and projection matrix for view 0. + const bgfx::HMD* hmd = bgfx::getHMD(); + if (NULL != hmd && 0 != (hmd->flags & BGFX_HMD_RENDERING) ) + { + float view[16]; + bx::mtxQuatTranslationHMD(view, hmd->eye[0].rotation, eye); + + float proj[16]; + bx::mtxProj(proj, hmd->eye[0].fov, 0.1f, 100.0f); + + bgfx::setViewTransform(0, view, proj); + + // Set view 0 default viewport. + // + // Use HMD's width/height since HMD's internal frame buffer size + // might be much larger than window size. + bgfx::setViewRect(0, 0, 0, hmd->width, hmd->height); + } + else + { + float view[16]; + bx::mtxLookAt(view, eye, at); + + float proj[16]; + bx::mtxProj(proj, 60.0f, float(m_width)/float(m_height), 0.1f, 100.0f); + bgfx::setViewTransform(0, view, proj); + + // Set view 0 default viewport. + bgfx::setViewRect(0, 0, 0, m_width, m_height); + } + + float mtx[16]; + bx::mtxRotateXY(mtx + , 0.0f + , time*0.37f + ); + + meshSubmit(m_mesh, 0, m_program, mtx); + + // Advance to next frame. Rendering thread will be kicked to + // process submitted rendering primitives. + bgfx::frame(); + + return true; } - float mtx[16]; - bx::mtxRotateXY(mtx - , 0.0f - , time*0.37f - ); - - meshSubmit(mesh, 0, program, mtx); - - // Advance to next frame. Rendering thread will be kicked to - // process submitted rendering primitives. - bgfx::frame(); + return false; } - meshUnload(mesh); - - // Cleanup. - bgfx::destroyProgram(program); - - bgfx::destroyUniform(u_time); + uint32_t m_width; + uint32_t m_height; + uint32_t m_debug; + uint32_t m_reset; - // Shutdown bgfx. - bgfx::shutdown(); + int64_t m_timeOffset; + Mesh* m_mesh; + bgfx::ProgramHandle m_program; + bgfx::UniformHandle u_time; +}; - return 0; -} +ENTRY_IMPLEMENT_MAIN(ExampleMesh); |