Fixed Invalid Viewrects

This commit is contained in:
Attila Kocsis 2019-01-19 12:15:41 +01:00
parent 92b41d942d
commit d3a26819e0

View File

@ -2311,6 +2311,45 @@ public:
, 0.0f , 0.0f
, caps->homogeneousDepth , caps->homogeneousDepth
); );
// Update render target size.
uint16_t shadowMapSize = 1 << uint32_t(currentSmSettings->m_sizePwrTwo);
if (bLtChanged || m_currentShadowMapSize != shadowMapSize)
{
m_currentShadowMapSize = shadowMapSize;
s_uniforms.m_shadowMapTexelSize = 1.0f / currentShadowMapSizef;
{
bgfx::destroy(s_rtShadowMap[0]);
bgfx::TextureHandle fbtextures[] =
{
bgfx::createTexture2D(m_currentShadowMapSize, m_currentShadowMapSize, false, 1, bgfx::TextureFormat::BGRA8, BGFX_TEXTURE_RT),
bgfx::createTexture2D(m_currentShadowMapSize, m_currentShadowMapSize, false, 1, bgfx::TextureFormat::D24S8, BGFX_TEXTURE_RT),
};
s_rtShadowMap[0] = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures, true);
}
if (LightType::DirectionalLight == m_settings.m_lightType)
{
for (uint8_t ii = 1; ii < ShadowMapRenderTargets::Count; ++ii)
{
{
bgfx::destroy(s_rtShadowMap[ii]);
bgfx::TextureHandle fbtextures[] =
{
bgfx::createTexture2D(m_currentShadowMapSize, m_currentShadowMapSize, false, 1, bgfx::TextureFormat::BGRA8, BGFX_TEXTURE_RT),
bgfx::createTexture2D(m_currentShadowMapSize, m_currentShadowMapSize, false, 1, bgfx::TextureFormat::D24S8, BGFX_TEXTURE_RT),
};
s_rtShadowMap[ii] = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures, true);
}
}
}
bgfx::destroy(s_rtBlur);
s_rtBlur = bgfx::createFrameBuffer(m_currentShadowMapSize, m_currentShadowMapSize, bgfx::TextureFormat::BGRA8);
}
if (LightType::SpotLight == m_settings.m_lightType) if (LightType::SpotLight == m_settings.m_lightType)
{ {
@ -2523,6 +2562,7 @@ public:
for (uint8_t ii = 0; ii < RENDERVIEW_DRAWDEPTH_3_ID+1; ++ii) for (uint8_t ii = 0; ii < RENDERVIEW_DRAWDEPTH_3_ID+1; ++ii)
{ {
bgfx::setViewFrameBuffer(ii, invalidRt); bgfx::setViewFrameBuffer(ii, invalidRt);
bgfx::setViewRect(ii, 0, 0, m_viewState.m_width, m_viewState.m_height);
} }
// Determine on-screen rectangle size where depth buffer will be drawn. // Determine on-screen rectangle size where depth buffer will be drawn.
@ -3159,44 +3199,6 @@ public:
} }
} }
// Update render target size.
uint16_t shadowMapSize = 1 << uint32_t(currentSmSettings->m_sizePwrTwo);
if (bLtChanged || m_currentShadowMapSize != shadowMapSize)
{
m_currentShadowMapSize = shadowMapSize;
s_uniforms.m_shadowMapTexelSize = 1.0f / currentShadowMapSizef;
{
bgfx::destroy(s_rtShadowMap[0]);
bgfx::TextureHandle fbtextures[] =
{
bgfx::createTexture2D(m_currentShadowMapSize, m_currentShadowMapSize, false, 1, bgfx::TextureFormat::BGRA8, BGFX_TEXTURE_RT),
bgfx::createTexture2D(m_currentShadowMapSize, m_currentShadowMapSize, false, 1, bgfx::TextureFormat::D24S8, BGFX_TEXTURE_RT),
};
s_rtShadowMap[0] = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures, true);
}
if (LightType::DirectionalLight == m_settings.m_lightType)
{
for (uint8_t ii = 1; ii < ShadowMapRenderTargets::Count; ++ii)
{
{
bgfx::destroy(s_rtShadowMap[ii]);
bgfx::TextureHandle fbtextures[] =
{
bgfx::createTexture2D(m_currentShadowMapSize, m_currentShadowMapSize, false, 1, bgfx::TextureFormat::BGRA8, BGFX_TEXTURE_RT),
bgfx::createTexture2D(m_currentShadowMapSize, m_currentShadowMapSize, false, 1, bgfx::TextureFormat::D24S8, BGFX_TEXTURE_RT),
};
s_rtShadowMap[ii] = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures, true);
}
}
}
bgfx::destroy(s_rtBlur);
s_rtBlur = bgfx::createFrameBuffer(m_currentShadowMapSize, m_currentShadowMapSize, bgfx::TextureFormat::BGRA8);
}
// Advance to next frame. Rendering thread will be kicked to // Advance to next frame. Rendering thread will be kicked to
// process submitted rendering primitives. // process submitted rendering primitives.