wayland/screencopy: use linear texture filtering over nearest

Fixes pixelated views at scaled resolutions.
This commit is contained in:
outfoxxed 2026-04-02 21:56:52 -07:00
parent 20c691cdf1
commit 4b751ccb0d
No known key found for this signature in database
GPG key ID: 4C88A185FB89301E
4 changed files with 7 additions and 0 deletions

View file

@ -64,6 +64,7 @@ set shell id.
- Fixed partial socket reads in greetd and hyprland on slow machines.
- Worked around Qt bug causing crashes when plugging and unplugging monitors.
- Fixed HyprlandFocusGrab crashing if windows were destroyed after being passed to it.
- Fixed ScreencopyView pixelation when scaled.
## Packaging Changes

View file

@ -123,6 +123,10 @@ void WlBufferQSGDisplayNode::setRect(const QRectF& rect) {
this->setMatrix(matrix);
}
void WlBufferQSGDisplayNode::setFiltering(QSGTexture::Filtering filtering) {
this->imageNode->setFiltering(filtering);
}
void WlBufferQSGDisplayNode::syncSwapchain(const WlBufferSwapchain& swapchain) {
auto* buffer = swapchain.frontbuffer();
auto& texture = swapchain.presentSecondBuffer ? this->buffer2 : this->buffer1;

View file

@ -33,6 +33,7 @@ public:
void syncSwapchain(const WlBufferSwapchain& swapchain);
void setRect(const QRectF& rect);
void setFiltering(QSGTexture::Filtering filtering);
private:
QQuickWindow* window;

View file

@ -167,6 +167,7 @@ QSGNode* ScreencopyView::updatePaintNode(QSGNode* oldNode, UpdatePaintNodeData*
auto& swapchain = this->context->swapchain();
node->syncSwapchain(swapchain);
node->setRect(this->boundingRect());
node->setFiltering(QSGTexture::Linear); // NOLINT (misc-include-cleaner)
if (this->mLive) this->context->captureFrame();
return node;