Unverified Commit 074a2751 authored by Roman Sedaikin's avatar Roman Sedaikin Committed by GitHub

Fixed case where SkiaLayer size could be 0x0 and surface was not created. (#408)

* Fixed case where SkiaLayer size could be 0x0 and surface was not created.
parent 05382a7a
...@@ -10,6 +10,7 @@ import java.lang.ref.Reference ...@@ -10,6 +10,7 @@ import java.lang.ref.Reference
internal class Direct3DContextHandler(layer: SkiaLayer) : JvmContextHandler(layer) { internal class Direct3DContextHandler(layer: SkiaLayer) : JvmContextHandler(layer) {
private val bufferCount = 2 private val bufferCount = 2
private var surfaces: Array<Surface?> = arrayOfNulls(bufferCount) private var surfaces: Array<Surface?> = arrayOfNulls(bufferCount)
private fun isSurfacesNull() = surfaces.all { it == null }
private val directXRedrawer: Direct3DRedrawer private val directXRedrawer: Direct3DRedrawer
get() = layer.redrawer!! as Direct3DRedrawer get() = layer.redrawer!! as Direct3DRedrawer
...@@ -46,7 +47,7 @@ internal class Direct3DContextHandler(layer: SkiaLayer) : JvmContextHandler(laye ...@@ -46,7 +47,7 @@ internal class Direct3DContextHandler(layer: SkiaLayer) : JvmContextHandler(laye
val w = (layer.width * scale).toInt().coerceAtLeast(0) val w = (layer.width * scale).toInt().coerceAtLeast(0)
val h = (layer.height * scale).toInt().coerceAtLeast(0) val h = (layer.height * scale).toInt().coerceAtLeast(0)
if (isSizeChanged(w, h)) { if (isSizeChanged(w, h) || isSurfacesNull()) {
disposeCanvas() disposeCanvas()
context?.flush() context?.flush()
......
...@@ -38,7 +38,7 @@ internal class DirectSoftwareContextHandler(layer: SkiaLayer) : JvmContextHandle ...@@ -38,7 +38,7 @@ internal class DirectSoftwareContextHandler(layer: SkiaLayer) : JvmContextHandle
val scale = layer.contentScale val scale = layer.contentScale
val w = (layer.width * scale).toInt().coerceAtLeast(0) val w = (layer.width * scale).toInt().coerceAtLeast(0)
val h = (layer.height * scale).toInt().coerceAtLeast(0) val h = (layer.height * scale).toInt().coerceAtLeast(0)
if (isSizeChanged(w, h)) { if (isSizeChanged(w, h) || surface == null) {
disposeCanvas() disposeCanvas()
softwareRedrawer.resize(w, h) softwareRedrawer.resize(w, h)
surface = softwareRedrawer.acquireSurface() surface = softwareRedrawer.acquireSurface()
......
...@@ -42,7 +42,7 @@ internal class OpenGLContextHandler(layer: SkiaLayer) : JvmContextHandler(layer) ...@@ -42,7 +42,7 @@ internal class OpenGLContextHandler(layer: SkiaLayer) : JvmContextHandler(layer)
val w = (layer.width * scale).toInt().coerceAtLeast(0) val w = (layer.width * scale).toInt().coerceAtLeast(0)
val h = (layer.height * scale).toInt().coerceAtLeast(0) val h = (layer.height * scale).toInt().coerceAtLeast(0)
if (isSizeChanged(w, h)) { if (isSizeChanged(w, h) || surface == null) {
disposeCanvas() disposeCanvas()
val gl = OpenGLApi.instance val gl = OpenGLApi.instance
val fbId = gl.glGetIntegerv(gl.GL_DRAW_FRAMEBUFFER_BINDING) val fbId = gl.glGetIntegerv(gl.GL_DRAW_FRAMEBUFFER_BINDING)
......
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