Commit 092c2196 authored by Igor Demin's avatar Igor Demin

Redraw immediately on resize and window start

parent 132f77ae
......@@ -33,7 +33,7 @@ open class SkiaLayer : HardwareLayer() {
super.init()
redrawer = platformOperations.createRedrawer(this)
redrawer?.syncSize()
needRedraw()
redrawer?.redrawImmediately()
}
override fun dispose() {
......@@ -49,7 +49,7 @@ open class SkiaLayer : HardwareLayer() {
override fun setBounds(x: Int, y: Int, width: Int, height: Int) {
super.setBounds(x, y, width, height)
redrawer?.syncSize()
needRedraw()
redrawer?.redrawImmediately()
}
override fun paint(g: Graphics) {
......
......@@ -12,10 +12,7 @@ internal class LinuxRedrawer(
private val layer: HardwareLayer
) : Redrawer {
private val context = layer.lockDrawingSurface {
val context = it.createContext()
it.makeCurrent(context)
it.setSwapInterval(if (SkikoProperties.vsyncEnabled) 1 else 0)
context
it.createContext()
}
private var isDisposed = false
......@@ -33,6 +30,16 @@ internal class LinuxRedrawer(
frameDispatcher.scheduleFrame()
}
override fun redrawImmediately() = layer.lockDrawingSurface {
check(!isDisposed)
update(System.nanoTime())
it.makeCurrent(context)
draw()
it.setSwapInterval(0)
it.swapBuffers()
OpenGLApi.instance.glFinish()
}
private fun update(nanoTime: Long) {
layer.update(nanoTime)
}
......@@ -69,6 +76,8 @@ internal class LinuxRedrawer(
}
toRedrawAlive.forEachIndexed { index, _ ->
// it is ok to set swap interval every frame, there is no performance overhead
drawingSurfaces[index].setSwapInterval(if (SkikoProperties.vsyncEnabled) 1 else 0)
drawingSurfaces[index].swapBuffers()
}
......
......@@ -104,6 +104,11 @@ internal class MacOsRedrawer(
override fun needRedraw() {
frameDispatcher.scheduleFrame()
}
override fun redrawImmediately() {
layer.update(System.nanoTime())
drawLayer.setNeedsDisplay()
}
}
private open class AWTGLLayer(private val containerPtr: Long, setNeedsDisplayOnBoundsChange: Boolean) {
......
......@@ -3,5 +3,6 @@ package org.jetbrains.skiko.redrawer
interface Redrawer {
fun dispose()
fun needRedraw()
fun redrawImmediately()
fun syncSize() = Unit
}
\ No newline at end of file
......@@ -37,6 +37,15 @@ internal class WindowsRedrawer(
frameDispatcher.scheduleFrame()
}
override fun redrawImmediately() {
check(!isDisposed)
update(System.nanoTime())
makeCurrent()
draw()
swapBuffers()
OpenGLApi.instance.glFinish()
}
private fun update(nanoTime: Long) {
layer.update(nanoTime)
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment