This commit is contained in:
Branimir Karadžić
2017-06-20 20:42:46 -07:00
parent b89b1459a2
commit c18dcadfc6

View File

@@ -1868,7 +1868,6 @@ class ExampleShadowVolumes : public entry::AppI
{
void init(int _argc, char** _argv) BX_OVERRIDE
{
Args args(_argc, _argv);
m_viewState = ViewState(1280, 720);
@@ -2081,7 +2080,7 @@ class ExampleShadowVolumes : public entry::AppI
// Respond properly on resize.
if (m_oldWidth != m_viewState.m_width
|| m_oldHeight != m_viewState.m_height)
|| m_oldHeight != m_viewState.m_height)
{
m_oldWidth = m_viewState.m_width;
m_oldHeight = m_viewState.m_height;
@@ -2129,15 +2128,16 @@ class ExampleShadowVolumes : public entry::AppI
bx::mtxProj(m_viewState.m_proj, fov, aspect, nearPlane, farPlane, s_oglNdc);
}
imguiBeginFrame(m_mouseState.m_mx
, m_mouseState.m_my
, (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
| (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
| (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
, m_mouseState.m_mz
, uint16_t(m_viewState.m_width)
, uint16_t(m_viewState.m_height)
);
imguiBeginFrame(
m_mouseState.m_mx
, m_mouseState.m_my
, (m_mouseState.m_buttons[entry::MouseButton::Left] ? IMGUI_MBUT_LEFT : 0)
| (m_mouseState.m_buttons[entry::MouseButton::Right] ? IMGUI_MBUT_RIGHT : 0)
| (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
, m_mouseState.m_mz
, uint16_t(m_viewState.m_width)
, uint16_t(m_viewState.m_height)
);
ImGui::SetNextWindowPos(ImVec2(m_viewState.m_width - 256.0f, 10.0f) );
ImGui::Begin("Settings"
@@ -2163,9 +2163,7 @@ class ExampleShadowVolumes : public entry::AppI
}
ImGui::SliderInt("Lights", &m_settings_numLights, 1, MAX_LIGHTS_COUNT);
ImGui::Checkbox("Update lights", &m_settings_updateLights);
ImGui::Indent();
if (ImGui::RadioButton("Light pattern 0", LightPattern0 == m_lightPattern) )
@@ -2243,15 +2241,17 @@ class ExampleShadowVolumes : public entry::AppI
ImGui::End();
ImGui::SetNextWindowPos(ImVec2(10, m_viewState.m_height - 77 - 10) );
ImGui::SetNextWindowPos(ImVec2(10, float(m_viewState.m_height) - 77.0f - 10.0f) );
ImGui::Begin("Show help:"
, NULL
, ImVec2(120.0f, 77.0f)
, ImGuiWindowFlags_AlwaysAutoResize
);
, NULL
, ImVec2(120.0f, 77.0f)
, ImGuiWindowFlags_AlwaysAutoResize
);
if ( ImGui::Button(m_settings_showHelp ? "ON" : "OFF") )
if (ImGui::Button(m_settings_showHelp ? "ON" : "OFF") )
{
m_settings_showHelp = !m_settings_showHelp;
}
ImGui::End();
@@ -2537,13 +2537,13 @@ class ExampleShadowVolumes : public entry::AppI
// Make sure at the beginning everything gets cleared.
bgfx::setViewClear(0
, BGFX_CLEAR_COLOR
| BGFX_CLEAR_DEPTH
| BGFX_CLEAR_STENCIL
, m_clearValues.m_clearRgba
, m_clearValues.m_clearDepth
, m_clearValues.m_clearStencil
);
, BGFX_CLEAR_COLOR
| BGFX_CLEAR_DEPTH
| BGFX_CLEAR_STENCIL
, m_clearValues.m_clearRgba
, m_clearValues.m_clearDepth
, m_clearValues.m_clearStencil
);
::touch(0);
@@ -2555,9 +2555,10 @@ class ExampleShadowVolumes : public entry::AppI
s_uniforms.m_color[1] = 1.0f;
s_uniforms.m_color[2] = 1.0f;
const RenderState& drawAmbient = (m_settings_useStencilTexture ?
s_renderStates[RenderState::ShadowVolume_UsingStencilTexture_DrawAmbient]:
s_renderStates[RenderState::ShadowVolume_UsingStencilBuffer_DrawAmbient]);
const RenderState& drawAmbient = m_settings_useStencilTexture
? s_renderStates[RenderState::ShadowVolume_UsingStencilTexture_DrawAmbient]
: s_renderStates[RenderState::ShadowVolume_UsingStencilBuffer_DrawAmbient]
;
// Draw shadow casters.
for (uint8_t ii = 0; ii < shadowCastersCount[m_currentScene]; ++ii)
@@ -2601,7 +2602,7 @@ class ExampleShadowVolumes : public entry::AppI
{
const float* lightPos = lightPosRadius[ii];
bx::memCopy(s_uniforms.m_lightPosRadius, lightPosRadius[ii], 4*sizeof(float) );
bx::memCopy(s_uniforms.m_lightPosRadius, lightPosRadius[ii], 4*sizeof(float) );
bx::memCopy(s_uniforms.m_lightRgbInnerR, m_lightRgbInnerR[ii], 3*sizeof(float) );
bx::memCopy(s_uniforms.m_color, m_lightRgbInnerR[ii], 3*sizeof(float) );
@@ -2610,11 +2611,11 @@ class ExampleShadowVolumes : public entry::AppI
bgfx::setViewFrameBuffer(viewId, s_stencilFb);
bgfx::setViewClear(viewId
, BGFX_CLEAR_COLOR
, 0x00000000
, 1.0f
, 0
);
, BGFX_CLEAR_COLOR
, 0x00000000
, 1.0f
, 0
);
}
else
{
@@ -2622,11 +2623,11 @@ class ExampleShadowVolumes : public entry::AppI
bgfx::setViewFrameBuffer(viewId, invalid);
bgfx::setViewClear(viewId
, BGFX_CLEAR_STENCIL
, m_clearValues.m_clearRgba
, m_clearValues.m_clearDepth
, m_clearValues.m_clearStencil
);
, BGFX_CLEAR_STENCIL
, m_clearValues.m_clearRgba
, m_clearValues.m_clearDepth
, m_clearValues.m_clearStencil
);
}
// Create near clip volume for current light.
@@ -2658,11 +2659,11 @@ class ExampleShadowVolumes : public entry::AppI
// Compute virtual light position for shadow volume generation.
float transformedLightPos[3];
shadowVolumeLightTransform(transformedLightPos
, instance.m_scale
, instance.m_rotation
, instance.m_pos
, lightPos
);
, instance.m_scale
, instance.m_rotation
, instance.m_pos
, lightPos
);
// Set virtual light pos.
bx::memCopy(s_uniforms.m_virtualLightPos_extrusionDist, transformedLightPos, 3*sizeof(float) );
@@ -2671,16 +2672,16 @@ class ExampleShadowVolumes : public entry::AppI
// Compute transform for shadow volume.
float shadowVolumeMtx[16];
bx::mtxSRT(shadowVolumeMtx
, instance.m_scale[0]
, instance.m_scale[1]
, instance.m_scale[2]
, instance.m_rotation[0]
, instance.m_rotation[1]
, instance.m_rotation[2]
, instance.m_pos[0]
, instance.m_pos[1]
, instance.m_pos[2]
);
, instance.m_scale[0]
, instance.m_scale[1]
, instance.m_scale[2]
, instance.m_rotation[0]
, instance.m_rotation[1]
, instance.m_rotation[2]
, instance.m_pos[0]
, instance.m_pos[1]
, instance.m_pos[2]
);
GroupArray& groups = model->m_mesh.m_groups;
const uint16_t stride = model->m_mesh.m_decl.getStride();
@@ -2691,14 +2692,14 @@ class ExampleShadowVolumes : public entry::AppI
// Create shadow volume.
ShadowVolume shadowVolume;
shadowVolumeCreate(shadowVolume
, group
, stride
, shadowVolumeMtx
, transformedLightPos
, shadowVolumeImpl
, m_settings_shadowVolumeAlgorithm
, m_settings_useStencilTexture
);
, group
, stride
, shadowVolumeMtx
, transformedLightPos
, shadowVolumeImpl
, m_settings_shadowVolumeAlgorithm
, m_settings_useStencilTexture
);
m_numShadowVolumeVertices += shadowVolume.m_numVertices;
m_numShadowVolumeIndices += shadowVolume.m_numIndices;
@@ -2708,21 +2709,21 @@ class ExampleShadowVolumes : public entry::AppI
if (m_settings_useStencilTexture)
{
renderStateIndex = ShadowVolumeImpl::DepthFail == shadowVolumeImpl
? RenderState::ShadowVolume_UsingStencilTexture_CraftStencil_DepthFail
: RenderState::ShadowVolume_UsingStencilTexture_CraftStencil_DepthPass
;
? RenderState::ShadowVolume_UsingStencilTexture_CraftStencil_DepthFail
: RenderState::ShadowVolume_UsingStencilTexture_CraftStencil_DepthPass
;
programIndex = ShadowVolumeAlgorithm::FaceBased == m_settings_shadowVolumeAlgorithm
? ShadowVolumeProgramType::Tex1
: ShadowVolumeProgramType::Tex2
;
? ShadowVolumeProgramType::Tex1
: ShadowVolumeProgramType::Tex2
;
}
else
{
renderStateIndex = ShadowVolumeImpl::DepthFail == shadowVolumeImpl
? RenderState::ShadowVolume_UsingStencilBuffer_CraftStencil_DepthFail
: RenderState::ShadowVolume_UsingStencilBuffer_CraftStencil_DepthPass
;
? RenderState::ShadowVolume_UsingStencilBuffer_CraftStencil_DepthFail
: RenderState::ShadowVolume_UsingStencilBuffer_CraftStencil_DepthPass
;
}
const RenderState& renderStateCraftStencil = s_renderStates[renderStateIndex];
@@ -2786,9 +2787,9 @@ class ExampleShadowVolumes : public entry::AppI
s_uniforms.m_params.m_lightingPass = 1.0f;
RenderState& drawDiffuse = m_settings_useStencilTexture
? s_renderStates[RenderState::ShadowVolume_UsingStencilTexture_DrawDiffuse]
: s_renderStates[RenderState::ShadowVolume_UsingStencilBuffer_DrawDiffuse]
;
? s_renderStates[RenderState::ShadowVolume_UsingStencilTexture_DrawDiffuse]
: s_renderStates[RenderState::ShadowVolume_UsingStencilBuffer_DrawDiffuse]
;
// If using stencil texture, viewId is set to render target. Incr it to render to default back buffer.
viewId += uint8_t(m_settings_useStencilTexture);
@@ -2834,13 +2835,15 @@ class ExampleShadowVolumes : public entry::AppI
// Reset clear values.
setViewClearMask(UINT32_MAX
, BGFX_CLEAR_NONE
, m_clearValues.m_clearRgba
, m_clearValues.m_clearDepth
, m_clearValues.m_clearStencil
);
, BGFX_CLEAR_NONE
, m_clearValues.m_clearRgba
, m_clearValues.m_clearDepth
, m_clearValues.m_clearStencil
);
return true;
}
return false;
}