Skip to content

Commit

Permalink
Update video shader preset if size of the source is changed
Browse files Browse the repository at this point in the history
  • Loading branch information
KOPRajs committed Apr 20, 2024
1 parent 47847c0 commit 1022768
Show file tree
Hide file tree
Showing 8 changed files with 25 additions and 26 deletions.
25 changes: 8 additions & 17 deletions xbmc/cores/RetroPlayer/rendering/VideoRenderers/RPBaseRenderer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ CRPBaseRenderer::CRPBaseRenderer(const CRenderSettings& renderSettings,
: m_context(context),
m_bufferPool(std::move(bufferPool)),
m_renderSettings(renderSettings),
m_shadersNeedUpdate(true),
m_bShadersNeedUpdate(true),
m_bUseShaderPreset(false)
{
m_bufferPool->RegisterRenderer(this);
Expand Down Expand Up @@ -157,7 +157,7 @@ void CRPBaseRenderer::SetShaderPreset(const std::string& presetPath)
if (presetPath != m_renderSettings.VideoSettings().GetShaderPreset())
{
m_renderSettings.VideoSettings().SetShaderPreset(presetPath);
m_shadersNeedUpdate = true;
m_bShadersNeedUpdate = true;
}
}

Expand Down Expand Up @@ -232,6 +232,10 @@ void CRPBaseRenderer::ManageRenderArea(const IRenderBuffer& renderBuffer)

// Adapt the drawing rect points if we have to rotate
m_rotatedDestCoords = CRenderUtils::ReorderDrawPoints(destRect, rotationDegCCW);

// Update video shader source size
if (m_shaderPreset)
m_shaderPreset->SetVideoSize(sourceWidth, sourceHeight);
}

void CRPBaseRenderer::MarkDirty()
Expand All @@ -245,25 +249,12 @@ void CRPBaseRenderer::MarkDirty()
*/
void CRPBaseRenderer::Updateshaders()
{
if (m_shadersNeedUpdate)
if (m_bShadersNeedUpdate)
{
if (m_shaderPreset)
{
if (!m_renderBuffer)
{
CLog::Log(LOGWARNING, "{} - Render buffer not set, can't update video shader source size!",
__FUNCTION__);
return;
}
auto sourceWidth = m_renderBuffer->GetWidth();
auto sourceHeight = m_renderBuffer->GetHeight();

// We need to set this here because m_sourceRect isn't valid on init/pre-init
m_shaderPreset->SetVideoSize(sourceWidth, sourceHeight);
m_bUseShaderPreset =
m_shaderPreset->SetShaderPreset(m_renderSettings.VideoSettings().GetShaderPreset());
}
m_shadersNeedUpdate = false;
m_bShadersNeedUpdate = false;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ class CRPBaseRenderer
void Updateshaders();
std::unique_ptr<SHADER::IShaderPreset> m_shaderPreset;

bool m_shadersNeedUpdate;
bool m_bShadersNeedUpdate;
bool m_bUseShaderPreset;

private:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ void CRPRendererDMA::Render(uint8_t alpha)
SHADER::CShaderTextureGL target(*targetTexture);
if (!m_shaderPreset->RenderUpdate(destPoints, &source, &target))
{
m_shadersNeedUpdate = false;
m_bShadersNeedUpdate = false;
m_bUseShaderPreset = false;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -315,7 +315,7 @@ void CRPRendererOpenGL::Render(uint8_t alpha)
SHADER::CShaderTextureGL target(*targetTexture);
if (!m_shaderPreset->RenderUpdate(destPoints, &source, &target))
{
m_shadersNeedUpdate = false;
m_bShadersNeedUpdate = false;
m_bUseShaderPreset = false;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,7 @@ void CRPRendererOpenGLES::Render(uint8_t alpha)
SHADER::CShaderTextureGL target(*targetTexture);
if (!m_shaderPreset->RenderUpdate(destPoints, &source, &target))
{
m_shadersNeedUpdate = false;
m_bShadersNeedUpdate = false;
m_bUseShaderPreset = false;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,7 @@ void CRPWinRenderer::Render(CD3DTexture& target)
m_targetTexture.SetTexture(target);
if (!m_shaderPreset->RenderUpdate(destPoints, renderBufferTarget, &m_targetTexture))
{
m_shadersNeedUpdate = false;
m_bShadersNeedUpdate = false;
m_bUseShaderPreset = false;
}
}
Expand Down
8 changes: 6 additions & 2 deletions xbmc/cores/RetroPlayer/shaders/gl/ShaderPresetGL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -204,8 +204,11 @@ bool CShaderPresetGL::Update()

void CShaderPresetGL::SetVideoSize(const unsigned videoWidth, const unsigned videoHeight)
{
m_videoSize = {videoWidth, videoHeight};
m_textureSize = CShaderUtils::GetOptimalTextureSize(m_videoSize);
if (videoWidth != m_videoSize.x || videoHeight != m_videoSize.y) {
m_videoSize = {videoWidth, videoHeight};
m_textureSize = CShaderUtils::GetOptimalTextureSize(m_videoSize);
m_bPresetNeedsUpdate = true;
}
}

bool CShaderPresetGL::SetShaderPreset(const std::string& shaderPresetPath)
Expand Down Expand Up @@ -324,6 +327,7 @@ bool CShaderPresetGL::CreateShaderTextures()

m_pShaderTextures.emplace_back(new CShaderTextureGL(*textureGL));
m_pShaders[shaderIdx]->SetSizes(prevSize, scaledSize);
m_pShaders[shaderIdx]->UpdateMVP();

prevSize = scaledSize;
}
Expand Down
8 changes: 6 additions & 2 deletions xbmc/cores/RetroPlayer/shaders/windows/ShaderPresetDX.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,7 @@ bool CShaderPresetDX::CreateShaderTextures()

// notify shader of its source and dest size
m_pShaders[shaderIdx]->SetSizes(prevSize, scaledSize);
m_pShaders[shaderIdx]->UpdateMVP();

prevSize = scaledSize;
}
Expand Down Expand Up @@ -479,8 +480,11 @@ const std::string& CShaderPresetDX::GetShaderPreset() const

void CShaderPresetDX::SetVideoSize(const unsigned videoWidth, const unsigned videoHeight)
{
m_videoSize = {videoWidth, videoHeight};
m_textureSize = CShaderUtils::GetOptimalTextureSize(m_videoSize);
if (videoWidth != m_videoSize.x || videoHeight != m_videoSize.y) {
m_videoSize = {videoWidth, videoHeight};
m_textureSize = CShaderUtils::GetOptimalTextureSize(m_videoSize);
m_bPresetNeedsUpdate = true;
}
}

void CShaderPresetDX::UpdateMVPs()
Expand Down

0 comments on commit 1022768

Please sign in to comment.