Unverified Commit 176415a1 authored by Nikolay Igotti's avatar Nikolay Igotti Committed by GitHub

Allow fallback if surface cannot be created (#487)

parent 210424c7
...@@ -164,7 +164,7 @@ private class SkikoSurfaceRender(private val layer: SkiaLayer, private val manag ...@@ -164,7 +164,7 @@ private class SkikoSurfaceRender(private val layer: SkiaLayer, private val manag
SurfaceOrigin.BOTTOM_LEFT, SurfaceOrigin.BOTTOM_LEFT,
SurfaceColorFormat.RGBA_8888, SurfaceColorFormat.RGBA_8888,
ColorSpace.sRGB ColorSpace.sRGB
) ) ?: throw RenderException("Cannot create surface")
canvas = surface!!.canvas canvas = surface!!.canvas
} }
......
...@@ -44,7 +44,7 @@ internal class AngleContextHandler(layer: SkiaLayer) : JvmContextHandler(layer) ...@@ -44,7 +44,7 @@ internal class AngleContextHandler(layer: SkiaLayer) : JvmContextHandler(layer)
SurfaceOrigin.BOTTOM_LEFT, SurfaceOrigin.BOTTOM_LEFT,
SurfaceColorFormat.RGBA_8888, SurfaceColorFormat.RGBA_8888,
ColorSpace.sRGB ColorSpace.sRGB
) ) ?: throw RenderException("Cannot create surface")
canvas = surface!!.canvas canvas = surface!!.canvas
} }
......
...@@ -4,6 +4,7 @@ import org.jetbrains.skia.ColorSpace ...@@ -4,6 +4,7 @@ import org.jetbrains.skia.ColorSpace
import org.jetbrains.skia.Surface import org.jetbrains.skia.Surface
import org.jetbrains.skia.SurfaceColorFormat import org.jetbrains.skia.SurfaceColorFormat
import org.jetbrains.skia.SurfaceOrigin import org.jetbrains.skia.SurfaceOrigin
import org.jetbrains.skiko.RenderException
import org.jetbrains.skiko.SkiaLayer import org.jetbrains.skiko.SkiaLayer
import org.jetbrains.skiko.redrawer.MetalRedrawer import org.jetbrains.skiko.redrawer.MetalRedrawer
...@@ -41,7 +42,7 @@ internal class MetalContextHandler(layer: SkiaLayer) : JvmContextHandler(layer) ...@@ -41,7 +42,7 @@ internal class MetalContextHandler(layer: SkiaLayer) : JvmContextHandler(layer)
SurfaceOrigin.TOP_LEFT, SurfaceOrigin.TOP_LEFT,
SurfaceColorFormat.BGRA_8888, SurfaceColorFormat.BGRA_8888,
ColorSpace.sRGB ColorSpace.sRGB
) ) ?: throw RenderException("Cannot create surface")
canvas = surface!!.canvas canvas = surface!!.canvas
} }
......
...@@ -5,10 +5,7 @@ import org.jetbrains.skia.FramebufferFormat ...@@ -5,10 +5,7 @@ import org.jetbrains.skia.FramebufferFormat
import org.jetbrains.skia.Surface import org.jetbrains.skia.Surface
import org.jetbrains.skia.SurfaceColorFormat import org.jetbrains.skia.SurfaceColorFormat
import org.jetbrains.skia.SurfaceOrigin import org.jetbrains.skia.SurfaceOrigin
import org.jetbrains.skiko.OpenGLApi import org.jetbrains.skiko.*
import org.jetbrains.skiko.SkiaLayer
import org.jetbrains.skiko.makeGLContext
import org.jetbrains.skiko.makeGLRenderTarget
internal class OpenGLContextHandler(layer: SkiaLayer) : JvmContextHandler(layer) { internal class OpenGLContextHandler(layer: SkiaLayer) : JvmContextHandler(layer) {
override fun initContext(): Boolean { override fun initContext(): Boolean {
...@@ -60,7 +57,7 @@ internal class OpenGLContextHandler(layer: SkiaLayer) : JvmContextHandler(layer) ...@@ -60,7 +57,7 @@ internal class OpenGLContextHandler(layer: SkiaLayer) : JvmContextHandler(layer)
SurfaceOrigin.BOTTOM_LEFT, SurfaceOrigin.BOTTOM_LEFT,
SurfaceColorFormat.RGBA_8888, SurfaceColorFormat.RGBA_8888,
ColorSpace.sRGB ColorSpace.sRGB
) ) ?: throw RenderException("Cannot create surface")
} }
canvas = surface!!.canvas canvas = surface!!.canvas
......
...@@ -2,6 +2,7 @@ package org.jetbrains.skia ...@@ -2,6 +2,7 @@ package org.jetbrains.skia
import org.jetbrains.skia.impl.* import org.jetbrains.skia.impl.*
import org.jetbrains.skia.impl.Library.Companion.staticLoad import org.jetbrains.skia.impl.Library.Companion.staticLoad
import org.jetbrains.skiko.RenderException
class Surface : RefCnt { class Surface : RefCnt {
companion object { companion object {
...@@ -273,7 +274,7 @@ class Surface : RefCnt { ...@@ -273,7 +274,7 @@ class Surface : RefCnt {
colorFormat: SurfaceColorFormat, colorFormat: SurfaceColorFormat,
colorSpace: ColorSpace?, colorSpace: ColorSpace?,
surfaceProps: SurfaceProps? = null surfaceProps: SurfaceProps? = null
): Surface { ): Surface? {
return try { return try {
Stats.onNativeCall() Stats.onNativeCall()
val ptr = _nMakeFromBackendRenderTarget( val ptr = _nMakeFromBackendRenderTarget(
...@@ -284,10 +285,10 @@ class Surface : RefCnt { ...@@ -284,10 +285,10 @@ class Surface : RefCnt {
getPtr(colorSpace), getPtr(colorSpace),
surfaceProps surfaceProps
) )
require(ptr != NullPointer) { if (ptr == NullPointer)
"Failed Surface.makeFromBackendRenderTarget" null
} else
Surface(ptr, context, rt) Surface(ptr, context, rt)
} finally { } finally {
reachabilityBarrier(context) reachabilityBarrier(context)
reachabilityBarrier(rt) reachabilityBarrier(rt)
......
...@@ -5,6 +5,7 @@ import org.jetbrains.skia.ColorSpace ...@@ -5,6 +5,7 @@ import org.jetbrains.skia.ColorSpace
import org.jetbrains.skia.Surface import org.jetbrains.skia.Surface
import org.jetbrains.skia.SurfaceColorFormat import org.jetbrains.skia.SurfaceColorFormat
import org.jetbrains.skia.SurfaceOrigin import org.jetbrains.skia.SurfaceOrigin
import org.jetbrains.skiko.RenderException
import org.jetbrains.skiko.SkiaLayer import org.jetbrains.skiko.SkiaLayer
import org.jetbrains.skiko.redrawer.MetalRedrawer import org.jetbrains.skiko.redrawer.MetalRedrawer
...@@ -54,7 +55,7 @@ internal class MetalContextHandler(layer: SkiaLayer) : ContextHandler(layer, lay ...@@ -54,7 +55,7 @@ internal class MetalContextHandler(layer: SkiaLayer) : ContextHandler(layer, lay
SurfaceOrigin.TOP_LEFT, SurfaceOrigin.TOP_LEFT,
SurfaceColorFormat.BGRA_8888, SurfaceColorFormat.BGRA_8888,
ColorSpace.sRGB ColorSpace.sRGB
) ) ?: throw RenderException("Cannot create surface")
canvas = surface!!.canvas canvas = surface!!.canvas
} }
......
...@@ -68,7 +68,7 @@ abstract class CanvasRenderer constructor(val htmlCanvas: HTMLCanvasElement) { ...@@ -68,7 +68,7 @@ abstract class CanvasRenderer constructor(val htmlCanvas: HTMLCanvasElement) {
SurfaceOrigin.BOTTOM_LEFT, SurfaceOrigin.BOTTOM_LEFT,
SurfaceColorFormat.RGBA_8888, SurfaceColorFormat.RGBA_8888,
ColorSpace.sRGB ColorSpace.sRGB
) ) ?: throw RenderException("Cannot create surface")
canvas = surface!!.canvas canvas = surface!!.canvas
} }
......
...@@ -5,6 +5,7 @@ import org.jetbrains.skia.ColorSpace ...@@ -5,6 +5,7 @@ import org.jetbrains.skia.ColorSpace
import org.jetbrains.skia.Surface import org.jetbrains.skia.Surface
import org.jetbrains.skia.SurfaceColorFormat import org.jetbrains.skia.SurfaceColorFormat
import org.jetbrains.skia.SurfaceOrigin import org.jetbrains.skia.SurfaceOrigin
import org.jetbrains.skiko.RenderException
import org.jetbrains.skiko.SkiaLayer import org.jetbrains.skiko.SkiaLayer
import org.jetbrains.skiko.redrawer.MacOsMetalRedrawer import org.jetbrains.skiko.redrawer.MacOsMetalRedrawer
...@@ -39,7 +40,7 @@ internal class MacOsMetalContextHandler(layer: SkiaLayer) : ContextHandler(layer ...@@ -39,7 +40,7 @@ internal class MacOsMetalContextHandler(layer: SkiaLayer) : ContextHandler(layer
SurfaceOrigin.TOP_LEFT, SurfaceOrigin.TOP_LEFT,
SurfaceColorFormat.BGRA_8888, SurfaceColorFormat.BGRA_8888,
ColorSpace.sRGB ColorSpace.sRGB
) ) ?: throw RenderException("Cannot create surface")
canvas = surface!!.canvas canvas = surface!!.canvas
} }
......
...@@ -2,6 +2,7 @@ package org.jetbrains.skiko.context ...@@ -2,6 +2,7 @@ package org.jetbrains.skiko.context
import kotlinx.cinterop.* import kotlinx.cinterop.*
import org.jetbrains.skia.* import org.jetbrains.skia.*
import org.jetbrains.skiko.RenderException
import org.jetbrains.skiko.SkiaLayer import org.jetbrains.skiko.SkiaLayer
import platform.OpenGL.GL_DRAW_FRAMEBUFFER_BINDING import platform.OpenGL.GL_DRAW_FRAMEBUFFER_BINDING
import platform.OpenGL.glGetIntegerv import platform.OpenGL.glGetIntegerv
...@@ -62,7 +63,7 @@ internal class MacOSOpenGLContextHandler(layer: SkiaLayer) : ContextHandler(laye ...@@ -62,7 +63,7 @@ internal class MacOSOpenGLContextHandler(layer: SkiaLayer) : ContextHandler(laye
SurfaceOrigin.BOTTOM_LEFT, SurfaceOrigin.BOTTOM_LEFT,
SurfaceColorFormat.RGBA_8888, SurfaceColorFormat.RGBA_8888,
ColorSpace.sRGB ColorSpace.sRGB
) ) ?: throw RenderException("Cannot create surface")
canvas = surface?.canvas canvas = surface?.canvas
?: error("Could not obtain Canvas from Surface") ?: error("Could not obtain Canvas from Surface")
......
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