Open star-buck opened 9 years ago
I looked at it the other day together with Eike, what seem to happen is sometime when the window goes from larger to smaller, the content of the window gets painted tiles, two times to fill the whole window, for a single frame, next frame all is correct again. one thing i can try is to reproduce the problem with a simple QML file to see if as it seem is an upstream Qt issue.
That would be appreciated. For becoming real professional, we should start to tackle all these and similar issues (like in "good is not good enough").
Martin's guess was problems in the driver's buffer handling, but we've got the issue on two distinct driver stacks (nVidia and Mesa+Intel) so it's probably not that. It probably inside Qt Quick somewhere and tricky in terms of synchronizing the window and the content resize ...
so lets find out and see how to fix it.
here i have a small test that seems to produce slightly different results on different drivers: The first file is just a Window, the second a Dialog. getting the resize button in the center focused with tab and then repeatedly pressing spacebar, it will quickly resize the window keeping it bottom aligned, so imitating what happen with kicker. can somebody reproduce the flicker with those simple test cases? here seems completely smooth on nvidia, looks not totally clean on amd. the interesting thing to figure out would be if it happens the single frame with two textures painted in it
import QtQuick 2.0
import QtQuick.Controls 1.1 as Controls import QtQuick.Window 2.2 import QtQuick.Layouts 1.1
import org.kde.plasma.core 2.0 as PlasmaCore
Window { id: subDialog visible: false height: rect.fixedHeight width: 500
Rectangle {
id: rect
color: "red"
Layout.minimumWidth: 300
Layout.minimumHeight: 300
Layout.maximumHeight: 500
property int fixedHeight: 500
width: 500
height: fixedHeight
border {
width: 3
color: "yellow"
}
Controls.Button {
text: "Resize"
anchors.centerIn: parent
onClicked: {
rect.fixedHeight = rect.Layout.minimumHeight = rect.Layout.maximumHeight = (rect.fixedHeight == 500 ? rect.fixedHeight = 100 : rect.fixedHeight = 500)
subDialog.y=2000
}
}
}
}
import QtQuick 2.0
import QtQuick.Controls 1.1 as Controls import QtQuick.Window 2.2 import QtQuick.Layouts 1.1
import org.kde.plasma.core 2.0 as PlasmaCore
PlasmaCore.Dialog { id: subDialog visible: false height: rect.fixedHeight width: 500 location: PlasmaCore.Types.Floating
mainItem: Rectangle {
id: rect
color: "red"
Layout.minimumWidth: 300
Layout.minimumHeight: 300
Layout.maximumHeight: 500
property int fixedHeight: 500
width: 500
height: fixedHeight
border {
width: 3
color: "yellow"
}
Controls.Button {
text: "Resize"
anchors.centerIn: parent
onClicked: {
rect.fixedHeight = rect.Layout.minimumHeight = rect.Layout.maximumHeight = (rect.fixedHeight == 500 ? rect.fixedHeight = 100 : rect.fixedHeight = 500)
subDialog.y=2000
}
}
}
}
flicker can be seen very visibly here: https://www.youtube.com/watch?v=mMStUESX_Pg&feature=player_detailpage#t=86
@eikehein : while marco works heavily on the phone, please have another look to fix this, thanks.
Aye!
@eikehein : any update on this?
Nothing so far, sorry. Both Marco and me have done some investigation on the Qt code, but we haven't really found a solution yet.
seems still valid, especially with some nvidia gfx card.
@notmart: any fix for that?