summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/bgfx/examples/16-shadowmaps/shadowmaps.cpp
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/bgfx/examples/16-shadowmaps/shadowmaps.cpp')
-rw-r--r--3rdparty/bgfx/examples/16-shadowmaps/shadowmaps.cpp114
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]);
}
}
}