renderer: fix share window projection (#13695)

This commit is contained in:
UjinT34 2026-03-11 23:48:48 +03:00 committed by GitHub
parent 0e083e886f
commit 8662ecba03
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 6 additions and 2 deletions

View file

@ -298,7 +298,7 @@ void CScreenshareFrame::renderWindow() {
// TODO: implement a monitor independent render mode to buffer that does this in CHyprRenderer::begin() or something like that
g_pHyprRenderer->m_renderData.fbSize = m_bufferSize;
g_pHyprRenderer->setProjectionType(RPT_FB);
g_pHyprRenderer->setProjectionType(RPT_EXPORT);
g_pHyprRenderer->m_renderData.transformDamage = false;
g_pHyprRenderer->setViewport(0, 0, m_bufferSize.x, m_bufferSize.y);

View file

@ -2129,6 +2129,7 @@ void IHyprRenderer::setProjectionType(eRenderProjectionType projectionType) {
case RPT_MONITOR: m_renderData.targetProjection = m_renderData.pMonitor->getTransformMatrix(); break;
case RPT_MIRROR: m_renderData.targetProjection = getMirrorProjection(m_renderData.pMonitor); break;
case RPT_FB: m_renderData.targetProjection = getFBProjection(m_renderData.pMonitor, m_renderData.fbSize); break;
case RPT_EXPORT: m_renderData.targetProjection = Mat3x3::identity(); break;
default: UNREACHABLE();
}
}
@ -2140,7 +2141,9 @@ Mat3x3 IHyprRenderer::getBoxProjection(const CBox& box, std::optional<eTransform
}
Mat3x3 IHyprRenderer::projectBoxToTarget(const CBox& box, std::optional<eTransform> transform) {
return m_renderData.pMonitor->getScaleMatrix().copy().multiply(getBoxProjection(box, transform));
return (m_renderData.projectionType == RPT_EXPORT ? Mat3x3::outputProjection(m_renderData.fbSize, HYPRUTILS_TRANSFORM_NORMAL) : m_renderData.pMonitor->getScaleMatrix())
.copy()
.multiply(getBoxProjection(box, transform));
}
SP<ITexture> IHyprRenderer::blurMainFramebuffer(float a, CRegion* originalDamage) {

View file

@ -77,6 +77,7 @@ enum eRenderProjectionType : uint8_t {
RPT_MONITOR,
RPT_MIRROR,
RPT_FB,
RPT_EXPORT,
};
struct SRenderData {