Merge pull request #1634 from attilaz/16-shadowmaps-viewrect

Fixed Invalid Viewrects
This commit is contained in:
Бранимир Караџић 2019-01-20 09:50:55 -08:00 committed by GitHub
commit 48e07699fa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -2311,6 +2311,45 @@ public:
, 0.0f
, 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)
{
@ -2523,6 +2562,7 @@ public:
for (uint8_t ii = 0; ii < RENDERVIEW_DRAWDEPTH_3_ID+1; ++ii)
{
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.
@ -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
// process submitted rendering primitives.