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