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