diff --git a/examples/15-shadowmaps-simple/shadowmaps_simple.cpp b/examples/15-shadowmaps-simple/shadowmaps_simple.cpp index c470fe039..9611a0528 100644 --- a/examples/15-shadowmaps-simple/shadowmaps_simple.cpp +++ b/examples/15-shadowmaps-simple/shadowmaps_simple.cpp @@ -251,23 +251,31 @@ public: const double freq = double(bx::getHPFrequency() ); float time = float( (now-m_timeOffset)/freq); - if (!bgfx::isValid(m_shadowMapFB) || shadowSamplerModeChanged) + if (!bgfx::isValid(m_shadowMapFB) + || shadowSamplerModeChanged) { - bgfx::TextureHandle shadowMapTexture; + bgfx::TextureHandle shadowMapTexture = BGFX_INVALID_HANDLE; - if (bgfx::isValid(m_progShadow)) + if (bgfx::isValid(m_progShadow) ) + { bgfx::destroy(m_progShadow); - if (bgfx::isValid(m_progMesh)) - bgfx::destroy(m_progMesh); + } - if (bgfx::isValid(m_shadowMapFB)) + if (bgfx::isValid(m_progMesh) ) + { + bgfx::destroy(m_progMesh); + } + + if (bgfx::isValid(m_shadowMapFB) ) + { bgfx::destroy(m_shadowMapFB); + } if (m_useShadowSampler) { // Depth textures and shadow samplers are supported. m_progShadow = loadProgram("vs_sms_shadow", "fs_sms_shadow"); - m_progMesh = loadProgram("vs_sms_mesh", "fs_sms_mesh"); + m_progMesh = loadProgram("vs_sms_mesh", "fs_sms_mesh"); bgfx::TextureHandle fbtextures[] = { @@ -280,6 +288,7 @@ public: , BGFX_TEXTURE_RT | BGFX_SAMPLER_COMPARE_LEQUAL ), }; + shadowMapTexture = fbtextures[0]; m_shadowMapFB = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures, true); } @@ -288,7 +297,7 @@ public: // Depth textures and shadow samplers are not supported. Use float // depth packing into color buffer instead. m_progShadow = loadProgram("vs_sms_shadow_pd", "fs_sms_shadow_pd"); - m_progMesh = loadProgram("vs_sms_mesh", "fs_sms_mesh_pd"); + m_progMesh = loadProgram("vs_sms_mesh", "fs_sms_mesh_pd"); bgfx::TextureHandle fbtextures[] = { @@ -309,6 +318,7 @@ public: , BGFX_TEXTURE_RT_WRITE_ONLY ), }; + shadowMapTexture = fbtextures[0]; m_shadowMapFB = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures, true); } diff --git a/examples/common/camera.cpp b/examples/common/camera.cpp index eb5ed59e8..4077a5498 100644 --- a/examples/common/camera.cpp +++ b/examples/common/camera.cpp @@ -94,6 +94,7 @@ struct Camera ~Camera() { + cmdRemove("move"); inputRemoveBindings("camBindings"); } diff --git a/examples/common/entry/cmd.cpp b/examples/common/entry/cmd.cpp index 1e86df2a4..7ee916b4a 100644 --- a/examples/common/entry/cmd.cpp +++ b/examples/common/entry/cmd.cpp @@ -29,12 +29,24 @@ struct CmdContext void add(const char* _name, ConsoleFn _fn, void* _userData) { - uint32_t cmd = bx::hash(_name, (uint32_t)bx::strLen(_name) ); + const uint32_t cmd = bx::hash(_name, (uint32_t)bx::strLen(_name) ); BX_ASSERT(m_lookup.end() == m_lookup.find(cmd), "Command \"%s\" already exist.", _name); + Func fn = { _fn, _userData }; m_lookup.insert(stl::make_pair(cmd, fn) ); } + void remove(const char* _name) + { + const uint32_t cmd = bx::hash(_name, (uint32_t)bx::strLen(_name) ); + + CmdLookup::iterator it = m_lookup.find(cmd); + if (it != m_lookup.end() ) + { + m_lookup.erase(it); + } + } + void exec(const char* _cmd) { for (bx::StringView next(_cmd); !next.isEmpty(); _cmd = next.getPtr() ) @@ -105,6 +117,11 @@ void cmdAdd(const char* _name, ConsoleFn _fn, void* _userData) s_cmdContext->add(_name, _fn, _userData); } +void cmdRemove(const char* _name) +{ + s_cmdContext->remove(_name); +} + void cmdExec(const char* _format, ...) { char tmp[2048]; diff --git a/examples/common/entry/cmd.h b/examples/common/entry/cmd.h index 254ba20c1..e68cedbb4 100644 --- a/examples/common/entry/cmd.h +++ b/examples/common/entry/cmd.h @@ -18,6 +18,9 @@ void cmdShutdown(); /// void cmdAdd(const char* _name, ConsoleFn _fn, void* _userData = NULL); +/// +void cmdRemove(const char* _name); + /// void cmdExec(const char* _format, ...);