Unverified Commit c8bdf96a authored by Roman Sedaikin's avatar Roman Sedaikin Committed by GitHub

Fixed crash when [redrawImmediately] invoked while fallback proccess. (#447)

parent 2021a5a8
...@@ -71,13 +71,15 @@ internal class LinuxOpenGLRedrawer( ...@@ -71,13 +71,15 @@ internal class LinuxOpenGLRedrawer(
override fun redrawImmediately() = layer.backedLayer.lockLinuxDrawingSurface { override fun redrawImmediately() = layer.backedLayer.lockLinuxDrawingSurface {
check(!isDisposed) { "LinuxOpenGLRedrawer is disposed" } check(!isDisposed) { "LinuxOpenGLRedrawer is disposed" }
update(System.nanoTime()) layer.inDrawScope {
it.makeCurrent(context) update(System.nanoTime())
draw() it.makeCurrent(context)
it.setSwapInterval(0) contextHandler.draw()
it.swapBuffers() it.setSwapInterval(0)
OpenGLApi.instance.glFinish() it.swapBuffers()
it.setSwapInterval(swapInterval) OpenGLApi.instance.glFinish()
it.setSwapInterval(swapInterval)
}
} }
private fun update(nanoTime: Long) { private fun update(nanoTime: Long) {
......
...@@ -55,10 +55,12 @@ internal class MetalRedrawer( ...@@ -55,10 +55,12 @@ internal class MetalRedrawer(
override fun redrawImmediately() { override fun redrawImmediately() {
check(!isDisposed) { "MetalRedrawer is disposed" } check(!isDisposed) { "MetalRedrawer is disposed" }
setVSyncEnabled(device, enabled = false) layer.inDrawScope {
update(System.nanoTime()) setVSyncEnabled(device, enabled = false)
layer.inDrawScope(::performDraw) update(System.nanoTime())
setVSyncEnabled(device, properties.isVsyncEnabled) performDraw()
setVSyncEnabled(device, properties.isVsyncEnabled)
}
} }
private fun update(nanoTime: Long) { private fun update(nanoTime: Long) {
......
...@@ -51,11 +51,13 @@ internal class WindowsOpenGLRedrawer( ...@@ -51,11 +51,13 @@ internal class WindowsOpenGLRedrawer(
override fun redrawImmediately() { override fun redrawImmediately() {
check(!isDisposed) { "WindowsOpenGLRedrawer is disposed" } check(!isDisposed) { "WindowsOpenGLRedrawer is disposed" }
update(System.nanoTime()) layer.inDrawScope {
makeCurrent() update(System.nanoTime())
draw() makeCurrent()
swapBuffers() contextHandler.draw()
OpenGLApi.instance.glFinish() swapBuffers()
OpenGLApi.instance.glFinish()
}
} }
private fun update(nanoTime: Long) { private fun update(nanoTime: Long) {
......
...@@ -46,8 +46,8 @@ internal class Direct3DRedrawer( ...@@ -46,8 +46,8 @@ internal class Direct3DRedrawer(
override fun redrawImmediately() { override fun redrawImmediately() {
check(!isDisposed) { "Direct3DRedrawer is disposed" } check(!isDisposed) { "Direct3DRedrawer is disposed" }
layer.update(System.nanoTime())
layer.inDrawScope { layer.inDrawScope {
layer.update(System.nanoTime())
drawAndSwap(withVsync = false) drawAndSwap(withVsync = false)
} }
} }
......
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