diff --git a/examples/18-ibl/ibl.cpp b/examples/18-ibl/ibl.cpp index 71ab49f9..8489614d 100644 --- a/examples/18-ibl/ibl.cpp +++ b/examples/18-ibl/ibl.cpp @@ -382,6 +382,42 @@ void screenSpaceQuad(float _textureWidth, float _textureHeight, bool _originBott } } +struct LightProbe +{ + enum Enum + { + Wells, + Uffizi, + Pisa, + Ennis, + Grace, + + Count + }; + + void load(const char* _name) + { + char filePath[512]; + + strcpy(filePath, _name); + strcat(filePath, "_lod.dds"); + m_tex = loadTexture(filePath, BGFX_TEXTURE_U_CLAMP|BGFX_TEXTURE_V_CLAMP|BGFX_TEXTURE_W_CLAMP); + + strcpy(filePath, _name); + strcat(filePath, "_irr.dds"); + m_texIrr = loadTexture(filePath, BGFX_TEXTURE_U_CLAMP|BGFX_TEXTURE_V_CLAMP|BGFX_TEXTURE_W_CLAMP); + } + + void destroy() + { + bgfx::destroyTexture(m_tex); + bgfx::destroyTexture(m_texIrr); + } + + bgfx::TextureHandle m_tex; + bgfx::TextureHandle m_texIrr; +}; + int _main_(int /*_argc*/, char** /*_argv*/) { uint32_t width = 1280; @@ -427,49 +463,13 @@ int _main_(int /*_argc*/, char** /*_argv*/) // Vertex declarations. PosColorTexCoord0Vertex::init(); - struct LightProbe - { - void load(const char* _name) - { - char filePath[512]; - - strcpy(filePath, _name); - strcat(filePath, "_lod.dds"); - m_tex = loadTexture(filePath, BGFX_TEXTURE_U_CLAMP|BGFX_TEXTURE_V_CLAMP|BGFX_TEXTURE_W_CLAMP); - - strcpy(filePath, _name); - strcat(filePath, "_irr.dds"); - m_texIrr = loadTexture(filePath, BGFX_TEXTURE_U_CLAMP|BGFX_TEXTURE_V_CLAMP|BGFX_TEXTURE_W_CLAMP); - } - - void destroy() - { - bgfx::destroyTexture(m_tex); - bgfx::destroyTexture(m_texIrr); - } - - bgfx::TextureHandle m_tex; - bgfx::TextureHandle m_texIrr; - }; - - enum LightProbes - { - LPWells, - LPUffizi, - LPPisa, - LPEnnis, - LPGrace, - - LPCount - }; - - LightProbe lightProbes[LPCount]; - lightProbes[LPWells].load("wells"); - lightProbes[LPUffizi].load("uffizi"); - lightProbes[LPPisa].load("pisa"); - lightProbes[LPEnnis].load("ennis"); - lightProbes[LPGrace].load("grace"); - uint8_t currentLightProbe = LPWells; + LightProbe lightProbes[LightProbe::Count]; + lightProbes[LightProbe::Wells ].load("wells"); + lightProbes[LightProbe::Uffizi].load("uffizi"); + lightProbes[LightProbe::Pisa ].load("pisa"); + lightProbes[LightProbe::Ennis ].load("ennis"); + lightProbes[LightProbe::Grace ].load("grace"); + LightProbe::Enum currentLightProbe = LightProbe::Wells; bgfx::UniformHandle u_time = bgfx::createUniform("u_time", bgfx::UniformType::Uniform1f); bgfx::UniformHandle u_mtx = bgfx::createUniform("u_mtx", bgfx::UniformType::Uniform4x4fv); @@ -524,6 +524,8 @@ int _main_(int /*_argc*/, char** /*_argv*/) s_uniforms.submitConstUniforms(); + int32_t leftScrollArea = 0; + entry::MouseState mouseState; while (!entry::processEvents(width, height, debug, reset, &mouseState) ) { @@ -551,19 +553,18 @@ int _main_(int /*_argc*/, char** /*_argv*/) imguiSeparatorLine(); imguiLabel("Environment:"); - currentLightProbe = imguiChoose(currentLightProbe - , "Wells" - , "Uffizi" - , "Pisa" - , "Ennis" - , "Grace" - ); + currentLightProbe = LightProbe::Enum(imguiChoose(currentLightProbe + , "Wells" + , "Uffizi" + , "Pisa" + , "Ennis" + , "Grace" + ) ); imguiSeparator(); imguiSlider("Exposure", &settings.m_exposure, -8.0f, 8.0f, 0.01f); imguiEndScrollArea(); - static int32_t leftScrollArea = 0; imguiBeginScrollArea("Settings", 10, 70, 256, 576, &leftScrollArea); imguiLabel("Material properties:"); @@ -737,7 +738,7 @@ int _main_(int /*_argc*/, char** /*_argv*/) bgfx::destroyUniform(u_texCube); bgfx::destroyUniform(u_texCubeIrr); - for (uint8_t ii = 0; ii < LPCount; ++ii) + for (uint8_t ii = 0; ii < LightProbe::Count; ++ii) { lightProbes[ii].destroy(); }