diff options
Diffstat (limited to '3rdparty/bgfx/examples/16-shadowmaps/shadowmaps.cpp')
-rw-r--r-- | 3rdparty/bgfx/examples/16-shadowmaps/shadowmaps.cpp | 114 |
1 files changed, 54 insertions, 60 deletions
diff --git a/3rdparty/bgfx/examples/16-shadowmaps/shadowmaps.cpp b/3rdparty/bgfx/examples/16-shadowmaps/shadowmaps.cpp index 6754ccd2f9e..34ce52c36d2 100644 --- a/3rdparty/bgfx/examples/16-shadowmaps/shadowmaps.cpp +++ b/3rdparty/bgfx/examples/16-shadowmaps/shadowmaps.cpp @@ -10,7 +10,7 @@ #include "common.h" #include "bgfx_utils.h" -#include <bgfx.h> +#include <bgfx/bgfx.h> #include <bx/timer.h> #include <bx/readerwriter.h> #include <bx/fpumath.h> @@ -448,34 +448,34 @@ struct Uniforms m_XOffset = 10.0f/512.0f; m_YOffset = 10.0f/512.0f; - u_params0 = bgfx::createUniform("u_params0", bgfx::UniformType::Uniform4fv); - u_params1 = bgfx::createUniform("u_params1", bgfx::UniformType::Uniform4fv); - u_params2 = bgfx::createUniform("u_params2", bgfx::UniformType::Uniform4fv); - u_color = bgfx::createUniform("u_color", bgfx::UniformType::Uniform4fv); - u_smSamplingParams = bgfx::createUniform("u_smSamplingParams", bgfx::UniformType::Uniform4fv); - u_csmFarDistances = bgfx::createUniform("u_csmFarDistances", bgfx::UniformType::Uniform4fv); - u_lightMtx = bgfx::createUniform("u_lightMtx", bgfx::UniformType::Uniform4x4fv); - - u_tetraNormalGreen = bgfx::createUniform("u_tetraNormalGreen", bgfx::UniformType::Uniform3fv); - u_tetraNormalYellow = bgfx::createUniform("u_tetraNormalYellow", bgfx::UniformType::Uniform3fv); - u_tetraNormalBlue = bgfx::createUniform("u_tetraNormalBlue", bgfx::UniformType::Uniform3fv); - u_tetraNormalRed = bgfx::createUniform("u_tetraNormalRed", bgfx::UniformType::Uniform3fv); - - u_shadowMapMtx0 = bgfx::createUniform("u_shadowMapMtx0", bgfx::UniformType::Uniform4x4fv); - u_shadowMapMtx1 = bgfx::createUniform("u_shadowMapMtx1", bgfx::UniformType::Uniform4x4fv); - u_shadowMapMtx2 = bgfx::createUniform("u_shadowMapMtx2", bgfx::UniformType::Uniform4x4fv); - u_shadowMapMtx3 = bgfx::createUniform("u_shadowMapMtx3", bgfx::UniformType::Uniform4x4fv); - - u_lightPosition = bgfx::createUniform("u_lightPosition", bgfx::UniformType::Uniform4fv); - u_lightAmbientPower = bgfx::createUniform("u_lightAmbientPower", bgfx::UniformType::Uniform4fv); - u_lightDiffusePower = bgfx::createUniform("u_lightDiffusePower", bgfx::UniformType::Uniform4fv); - u_lightSpecularPower = bgfx::createUniform("u_lightSpecularPower", bgfx::UniformType::Uniform4fv); - u_lightSpotDirectionInner = bgfx::createUniform("u_lightSpotDirectionInner", bgfx::UniformType::Uniform4fv); - u_lightAttenuationSpotOuter = bgfx::createUniform("u_lightAttenuationSpotOuter", bgfx::UniformType::Uniform4fv); - - u_materialKa = bgfx::createUniform("u_materialKa", bgfx::UniformType::Uniform4fv); - u_materialKd = bgfx::createUniform("u_materialKd", bgfx::UniformType::Uniform4fv); - u_materialKs = bgfx::createUniform("u_materialKs", bgfx::UniformType::Uniform4fv); + u_params0 = bgfx::createUniform("u_params0", bgfx::UniformType::Vec4); + u_params1 = bgfx::createUniform("u_params1", bgfx::UniformType::Vec4); + u_params2 = bgfx::createUniform("u_params2", bgfx::UniformType::Vec4); + u_color = bgfx::createUniform("u_color", bgfx::UniformType::Vec4); + u_smSamplingParams = bgfx::createUniform("u_smSamplingParams", bgfx::UniformType::Vec4); + u_csmFarDistances = bgfx::createUniform("u_csmFarDistances", bgfx::UniformType::Vec4); + u_lightMtx = bgfx::createUniform("u_lightMtx", bgfx::UniformType::Mat4); + + u_tetraNormalGreen = bgfx::createUniform("u_tetraNormalGreen", bgfx::UniformType::Vec4); + u_tetraNormalYellow = bgfx::createUniform("u_tetraNormalYellow", bgfx::UniformType::Vec4); + u_tetraNormalBlue = bgfx::createUniform("u_tetraNormalBlue", bgfx::UniformType::Vec4); + u_tetraNormalRed = bgfx::createUniform("u_tetraNormalRed", bgfx::UniformType::Vec4); + + u_shadowMapMtx0 = bgfx::createUniform("u_shadowMapMtx0", bgfx::UniformType::Mat4); + u_shadowMapMtx1 = bgfx::createUniform("u_shadowMapMtx1", bgfx::UniformType::Mat4); + u_shadowMapMtx2 = bgfx::createUniform("u_shadowMapMtx2", bgfx::UniformType::Mat4); + u_shadowMapMtx3 = bgfx::createUniform("u_shadowMapMtx3", bgfx::UniformType::Mat4); + + u_lightPosition = bgfx::createUniform("u_lightPosition", bgfx::UniformType::Vec4); + u_lightAmbientPower = bgfx::createUniform("u_lightAmbientPower", bgfx::UniformType::Vec4); + u_lightDiffusePower = bgfx::createUniform("u_lightDiffusePower", bgfx::UniformType::Vec4); + u_lightSpecularPower = bgfx::createUniform("u_lightSpecularPower", bgfx::UniformType::Vec4); + u_lightSpotDirectionInner = bgfx::createUniform("u_lightSpotDirectionInner", bgfx::UniformType::Vec4); + u_lightAttenuationSpotOuter = bgfx::createUniform("u_lightAttenuationSpotOuter", bgfx::UniformType::Vec4); + + u_materialKa = bgfx::createUniform("u_materialKa", bgfx::UniformType::Vec4); + u_materialKd = bgfx::createUniform("u_materialKd", bgfx::UniformType::Vec4); + u_materialKs = bgfx::createUniform("u_materialKs", bgfx::UniformType::Vec4); } @@ -1006,7 +1006,6 @@ struct Mesh // Set model matrix for rendering. bgfx::setTransform(_mtx); - bgfx::setProgram(_program); bgfx::setIndexBuffer(group.m_ibh); bgfx::setVertexBuffer(group.m_vbh); @@ -1026,7 +1025,7 @@ struct Mesh bgfx::setState(_renderState.m_state, _renderState.m_blendFactorRgba); // Submit. - bgfx::submit(_viewId); + bgfx::submit(_viewId, _program); } } @@ -1350,11 +1349,11 @@ int _main_(int /*_argc*/, char** /*_argv*/) // Uniforms. s_uniforms.init(); - u_texColor = bgfx::createUniform("u_texColor", bgfx::UniformType::Uniform1iv); - u_shadowMap[0] = bgfx::createUniform("u_shadowMap0", bgfx::UniformType::Uniform1iv); - u_shadowMap[1] = bgfx::createUniform("u_shadowMap1", bgfx::UniformType::Uniform1iv); - u_shadowMap[2] = bgfx::createUniform("u_shadowMap2", bgfx::UniformType::Uniform1iv); - u_shadowMap[3] = bgfx::createUniform("u_shadowMap3", bgfx::UniformType::Uniform1iv); + u_texColor = bgfx::createUniform("u_texColor", bgfx::UniformType::Int1); + u_shadowMap[0] = bgfx::createUniform("u_shadowMap0", bgfx::UniformType::Int1); + u_shadowMap[1] = bgfx::createUniform("u_shadowMap1", bgfx::UniformType::Int1); + u_shadowMap[2] = bgfx::createUniform("u_shadowMap2", bgfx::UniformType::Int1); + u_shadowMap[3] = bgfx::createUniform("u_shadowMap3", bgfx::UniformType::Int1); // Programs. s_programs.init(); @@ -1972,9 +1971,10 @@ int _main_(int /*_argc*/, char** /*_argv*/) // Imgui. imguiBeginFrame(mouseState.m_mx , mouseState.m_my - , (mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0) - | (mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0) - , 0 + , (mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0) + | (mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0) + | (mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0) + , mouseState.m_mz , viewState.m_width , viewState.m_height ); @@ -1985,9 +1985,9 @@ int _main_(int /*_argc*/, char** /*_argv*/) #define IMGUI_FLOAT_SLIDER(_name, _val) \ imguiSlider(_name \ , _val \ - , *(((float*)&_val)+1) \ - , *(((float*)&_val)+2) \ - , *(((float*)&_val)+3) \ + , *( ((float*)&_val)+1) \ + , *( ((float*)&_val)+2) \ + , *( ((float*)&_val)+3) \ ) imguiBool("Update lights", settings.m_updateLights); @@ -2648,7 +2648,7 @@ int _main_(int /*_argc*/, char** /*_argv*/) , clearValues.m_clearDepth , clearValues.m_clearStencil ); - bgfx::submit(0); + bgfx::touch(0); // Clear shadowmap rendertarget at beginning. const uint8_t flags0 = (LightType::DirectionalLight == settings.m_lightType) @@ -2662,7 +2662,7 @@ int _main_(int /*_argc*/, char** /*_argv*/) , clearValues.m_clearDepth , clearValues.m_clearStencil ); - bgfx::submit(RENDERVIEW_SHADOWMAP_0_ID); + bgfx::touch(RENDERVIEW_SHADOWMAP_0_ID); const uint8_t flags1 = (LightType::DirectionalLight == settings.m_lightType) ? BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH @@ -2677,7 +2677,7 @@ int _main_(int /*_argc*/, char** /*_argv*/) , clearValues.m_clearDepth , clearValues.m_clearStencil ); - bgfx::submit(RENDERVIEW_SHADOWMAP_1_ID+ii); + bgfx::touch(RENDERVIEW_SHADOWMAP_1_ID+ii); } // Render. @@ -2727,7 +2727,6 @@ int _main_(int /*_argc*/, char** /*_argv*/) vertex[5].m_y = max; vertex[5].m_z = zz; - bgfx::setProgram(s_programs.m_black); bgfx::setState(0); bgfx::setStencil(BGFX_STENCIL_TEST_ALWAYS | BGFX_STENCIL_FUNC_REF(1) @@ -2737,7 +2736,7 @@ int _main_(int /*_argc*/, char** /*_argv*/) | BGFX_STENCIL_OP_PASS_Z_REPLACE ); bgfx::setVertexBuffer(&vb); - bgfx::submit(RENDERVIEW_SHADOWMAP_0_ID); + bgfx::submit(RENDERVIEW_SHADOWMAP_0_ID, s_programs.m_black); } } @@ -2810,19 +2809,18 @@ int _main_(int /*_argc*/, char** /*_argv*/) bool bVsmOrEsm = (SmImpl::VSM == settings.m_smImpl) || (SmImpl::ESM == settings.m_smImpl); // Blur shadow map. - if (bVsmOrEsm && currentSmSettings->m_doBlur) + if (bVsmOrEsm + && currentSmSettings->m_doBlur) { bgfx::setTexture(4, u_shadowMap[0], s_rtShadowMap[0]); - bgfx::setProgram(s_programs.m_vBlur[depthType]); bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV); - bgfx::submit(RENDERVIEW_VBLUR_0_ID); + bgfx::submit(RENDERVIEW_VBLUR_0_ID, s_programs.m_vBlur[depthType]); bgfx::setTexture(4, u_shadowMap[0], s_rtBlur); - bgfx::setProgram(s_programs.m_hBlur[depthType]); bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV); - bgfx::submit(RENDERVIEW_HBLUR_0_ID); + bgfx::submit(RENDERVIEW_HBLUR_0_ID, s_programs.m_hBlur[depthType]); if (LightType::DirectionalLight == settings.m_lightType) { @@ -2831,16 +2829,14 @@ int _main_(int /*_argc*/, char** /*_argv*/) const uint8_t viewId = RENDERVIEW_VBLUR_0_ID + jj; bgfx::setTexture(4, u_shadowMap[0], s_rtShadowMap[ii]); - bgfx::setProgram(s_programs.m_vBlur[depthType]); bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV); - bgfx::submit(viewId); + bgfx::submit(viewId, s_programs.m_vBlur[depthType]); bgfx::setTexture(4, u_shadowMap[0], s_rtBlur); - bgfx::setProgram(s_programs.m_hBlur[depthType]); bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV); - bgfx::submit(viewId+1); + bgfx::submit(viewId+1, s_programs.m_hBlur[depthType]); } } } @@ -3068,20 +3064,18 @@ int _main_(int /*_argc*/, char** /*_argv*/) if (settings.m_drawDepthBuffer) { bgfx::setTexture(4, u_shadowMap[0], s_rtShadowMap[0]); - bgfx::setProgram(s_programs.m_drawDepth[depthType]); bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV); - bgfx::submit(RENDERVIEW_DRAWDEPTH_0_ID); + bgfx::submit(RENDERVIEW_DRAWDEPTH_0_ID, s_programs.m_drawDepth[depthType]); if (LightType::DirectionalLight == settings.m_lightType) { for (uint8_t ii = 1; ii < settings.m_numSplits; ++ii) { bgfx::setTexture(4, u_shadowMap[0], s_rtShadowMap[ii]); - bgfx::setProgram(s_programs.m_drawDepth[depthType]); bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV); - bgfx::submit(RENDERVIEW_DRAWDEPTH_0_ID+ii); + bgfx::submit(RENDERVIEW_DRAWDEPTH_0_ID+ii, s_programs.m_drawDepth[depthType]); } } } |