From 6bb7c8bf2a0e9a9bc13315f878c09bcd8419c7f0 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 31 Jan 2026 12:44:50 -0600 Subject: [PATCH] Fix blurriness of DXVA2 overlay Also make a drive-by fix for D3DTSS_COLOROP since we don't use vertex colors. --- app/streaming/video/ffmpeg-renderers/dxva2.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/streaming/video/ffmpeg-renderers/dxva2.cpp b/app/streaming/video/ffmpeg-renderers/dxva2.cpp index b316868d..fd2244cf 100644 --- a/app/streaming/video/ffmpeg-renderers/dxva2.cpp +++ b/app/streaming/video/ffmpeg-renderers/dxva2.cpp @@ -144,9 +144,8 @@ bool DXVA2Renderer::initializeRenderer() m_Device->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); m_Device->SetRenderState(D3DRS_LIGHTING, FALSE); - m_Device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE); + m_Device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1); m_Device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE); - m_Device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE); m_Device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); m_Device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); @@ -677,12 +676,13 @@ void DXVA2Renderer::notifyOverlayUpdated(Overlay::OverlayType type) SDL_FreeSurface(newSurface); newSurface = nullptr; + // Compensate for D3D9's half pixel offset VERTEX verts[] = { - {renderRect.x, renderRect.y, 0, 1, 0, 0}, - {renderRect.x, renderRect.y+renderRect.h, 0, 1, 0, 1}, - {renderRect.x+renderRect.w, renderRect.y+renderRect.h, 0, 1, 1, 1}, - {renderRect.x+renderRect.w, renderRect.y, 0, 1, 1, 0} + {renderRect.x - 0.5f, renderRect.y - 0.5f, 0, 1, 0, 0}, + {renderRect.x - 0.5f, renderRect.y + renderRect.h - 0.5f, 0, 1, 0, 1}, + {renderRect.x + renderRect.w - 0.5f, renderRect.y + renderRect.h - 0.5f, 0, 1, 1, 1}, + {renderRect.x + renderRect.w - 0.5f, renderRect.y - 0.5f, 0, 1, 1, 0} }; ComPtr newVertexBuffer;