|Summary:||Painting over a reference image shows rectangular artefacts around the cursor if fractional HiDPI scaling is enabled.|
|Component:||General||Assignee:||Dmitry Kazakov <dimula73>|
|Latest Commit:||https://invent.kde.org/graphics/krita/commit/fed8729ecd3021fee8ebf1cd6ae9d74453960935||Version Fixed In:|
|Attachments:||screenshot of visual bug|
Description sven.wanner 2021-08-20 08:27:50 UTC
Comment 1 Halla Rempt 2021-08-20 08:52:17 UTC
* Please provide the system information for bug reports. * Do you have a reference image on top of your canvas?
Comment 2 sven.wanner 2021-08-20 09:07:55 UTC
Both you're requesting I think I've already added. MS Windows 10 and a screenshot is attached, too.
Comment 3 Halla Rempt 2021-08-20 09:11:17 UTC
No, go to help->system information for bug reports, and paste the contents in this bug report. And you have not said whether there is a reference image on top of your canvas.
Comment 4 sven.wanner 2021-08-20 09:30:41 UTC
Sorry, now I got it. Yes, I had a reference image loaded when the problem occured, didn't test without one, because I just opened my current project and rolled back to 4.4.3 right after observing the bug. Krita Version: 4.4.3 Languages: en_US, en Hidpi: true Qt Version (compiled): 5.12.9 Version (loaded): 5.12.9 OS Information Build ABI: x86_64-little_endian-llp64 Build CPU: x86_64 CPU: x86_64 Kernel Type: winnt Kernel Version: 10.0.19042 Pretty Productname: Windows 10 (10.0) Product Type: windows Product Version: 10 OpenGL Info Vendor: "Google Inc." Renderer: "ANGLE (Intel(R) UHD Graphics 630 Direct3D11 vs_5_0 ps_5_0)" Version: "OpenGL ES 3.0 (ANGLE 184.108.40.206ea533f79a7)" Shading language: "OpenGL ES GLSL ES 3.00 (ANGLE 220.127.116.11ea533f79a7)" Requested format: QSurfaceFormat(version 3.0, options QFlags<QSurfaceFormat::FormatOption>(DeprecatedFunctions), depthBufferSize 24, redBufferSize 8, greenBufferSize 8, blueBufferSize 8, alphaBufferSize 8, stencilBufferSize 8, samples -1, swapBehavior QSurfaceFormat::DoubleBuffer, swapInterval 0, colorSpace QSurfaceFormat::DefaultColorSpace, profile QSurfaceFormat::CompatibilityProfile) Current format: QSurfaceFormat(version 3.0, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSize 24, redBufferSize 8, greenBufferSize 8, blueBufferSize 8, alphaBufferSize 8, stencilBufferSize 8, samples 0, swapBehavior QSurfaceFormat::DefaultSwapBehavior, swapInterval 0, colorSpace QSurfaceFormat::DefaultColorSpace, profile QSurfaceFormat::NoProfile) Version: 3.0 Supports deprecated functions false is OpenGL ES: true QPA OpenGL Detection Info supportsDesktopGL: true supportsAngleD3D11: true isQtPreferAngle: true Hardware Information GPU Acceleration: auto Memory: 16282 Mb Number of Cores: 12 Swap Location: Current Settings Current Swap Location: Current Swap Location writable: true Undo Enabled: true Undo Stack Limit: 30 Use OpenGL: true Use OpenGL Texture Buffer: true Use AMD Vectorization Workaround: false Canvas State: OPENGL_SUCCESS Autosave Interval: 900 Use Backup Files: true Number of Backups Kept: 1 Backup File Suffix: ~ Backup Location: Same Folder as the File Backup Location writable: false Use Win8 Pointer Input: false Use RightMiddleTabletButton Workaround: false Levels of Detail Enabled: false Use Zip64: false Display Information Number of screens: 1 Screen: 0 Name: \\.\DISPLAY1 Depth: 32 Scale: 1 Resolution in pixels: 1920x1080 Manufacturer: Model: Refresh Rate: 144
Comment 5 Halla Rempt 2021-08-20 10:05:19 UTC
Okay, then I can confirm: I've seen this with a reference image as well, but not without one. I never noticed before because I usually do not trace over a reference image, but have one besides my canvas.
Comment 6 Halla Rempt 2021-08-21 09:54:22 UTC
Ah, and you're using Krita 4.4.3 so it isn't a recent regression.
Comment 7 Halla Rempt 2021-08-21 09:54:59 UTC
Argh, no I misread, sorry.
Comment 8 Halla Rempt 2021-08-23 10:56:42 UTC
If you disable fractional hidpi scaling in Krita's settings, then 4.4.7 will not show the cursor artefacts anymore.
Comment 9 sven.wanner 2021-08-23 11:06:47 UTC
Unfortunately this doesn't work in my case. I also tried to disable Hi-DPI support completely, no effect!
Comment 10 Halla Rempt 2021-08-23 12:30:12 UTC
That's strange... I just checked on my Yoga, set display scaling to 1, like you have, and I didn't get any artefacts anymore. And I set it to 1.25, and then disabled fractional scaling support, and didn't get artefacts; when I enabled it, I did.
Comment 11 sven.wanner 2021-08-23 13:01:27 UTC
Now that I reinstalled 4.4.7 to test your recommendation I can tell you that I not only see artefacts in case of drawing on reference images, even if they are more massive, but I also see some without reference images. When moving the pencil, vertical and horizontal strokes appear and also vanishing again after a while or on rotating and zooming the canvas. The length seems to somehow correlate to the rotation of the canvas, on higher rotations just dot appear sometimes. Will go back to 4.4.3 again, if it is a bigger issue you might get more and maybe better feedback from others soon. Thank you for helping.
Comment 12 Freya Lupen 2022-07-28 00:00:31 UTC
Looked into this bug (can confirm in 5.1.0 beta 1 and recent master), and here's my findings: When moving a brush outline cursor over a reference image with fractional display scaling, 1-screen-pixel-wide/tall transparent lines appear at the left and bottom edges of the update rect. Changing this line in KisOpenGLCanvas2::paintGL() gc.setClipRect(updateRect); to this gc.setClipRect(updateRect.adjusted(-1, 0, 0, 1)); prevents them from appearing. I suspect it's some kind of rounding issue in Qt.
Comment 13 Halla Rempt 2022-09-20 09:51:44 UTC
Dmitry said he'll check this solution.
Comment 14 Dmitry Kazakov 2022-09-20 10:24:03 UTC
Git commit 213f967eced91bc22767d700f47d0973b4f681fd by Dmitry Kazakov. Committed on 20/09/2022 at 10:23. Pushed by dkazakov into branch 'master'. Fix artifacts when hovering over reference images in HiDPI mode Thanks Freya Lupen for the provided patch! M +1 -1 libs/ui/opengl/kis_opengl_canvas2.cpp https://invent.kde.org/graphics/krita/commit/213f967eced91bc22767d700f47d0973b4f681fd
Comment 15 Dmitry Kazakov 2022-09-20 10:24:26 UTC
Git commit fed8729ecd3021fee8ebf1cd6ae9d74453960935 by Dmitry Kazakov. Committed on 20/09/2022 at 10:24. Pushed by dkazakov into branch 'krita/5.1'. Fix artifacts when hovering over reference images in HiDPI mode Thanks Freya Lupen for the provided patch! (cherry picked from commit 213f967eced91bc22767d700f47d0973b4f681fd) M +1 -1 libs/ui/opengl/kis_opengl_canvas2.cpp https://invent.kde.org/graphics/krita/commit/fed8729ecd3021fee8ebf1cd6ae9d74453960935
Comment 16 Dmitry Kazakov 2022-11-17 12:25:45 UTC
The fix is reverted currently since it causes bug 460577
Comment 17 Dmitry Kazakov 2022-11-17 13:33:34 UTC
Git commit b18557c58f86429ba728341a4401fba53d42f522 by Dmitry Kazakov. Committed on 17/11/2022 at 13:33. Pushed by dkazakov into branch 'master'. Disable partial updates for fractional HiDPI cases There is some bug either in QPainter or in our partial updates patches that cause an update issue in reference images decoration. Basically, the crop rect of the update should be aligned to the physical pixels, but it is not. M +11 -1 libs/ui/opengl/kis_opengl_canvas2.cpp https://invent.kde.org/graphics/krita/commit/b18557c58f86429ba728341a4401fba53d42f522
Comment 18 Dmitry Kazakov 2022-11-17 13:33:54 UTC
Git commit ef521dac6125ec718200ca9b689fb7ae69f51482 by Dmitry Kazakov. Committed on 17/11/2022 at 13:33. Pushed by dkazakov into branch 'krita/5.1'. Disable partial updates for fractional HiDPI cases There is some bug either in QPainter or in our partial updates patches that cause an update issue in reference images decoration. Basically, the crop rect of the update should be aligned to the physical pixels, but it is not. M +11 -1 libs/ui/opengl/kis_opengl_canvas2.cpp https://invent.kde.org/graphics/krita/commit/ef521dac6125ec718200ca9b689fb7ae69f51482
Comment 19 Dmitry Kazakov 2022-11-17 13:35:12 UTC
The bug is currently fixed with a workaround. Now partial updates are completely disabled in fractional HiDPI mode. Ideally, we need to fix that somewhere in Qt.