Commit 4851cff2 authored by Roman Sedaikin's avatar Roman Sedaikin

Updated fallback rendering API queue.

parent 8f665598
......@@ -5,8 +5,9 @@ import org.jetbrains.skija.ClipMode
import org.jetbrains.skija.Picture
import org.jetbrains.skija.PictureRecorder
import org.jetbrains.skija.Rect
import org.jetbrains.skiko.context.SoftwareContextHandler
import org.jetbrains.skiko.context.ContextHandler
import org.jetbrains.skiko.context.createContextHandler
import org.jetbrains.skiko.context.SoftwareContextHandler
import org.jetbrains.skiko.redrawer.SoftwareRedrawer
import org.jetbrains.skiko.redrawer.Redrawer
import java.awt.Graphics
......@@ -21,15 +22,15 @@ interface SkiaRenderer {
private class PictureHolder(val instance: Picture, val width: Int, val height: Int)
open class SkiaLayer : HardwareLayer() {
val fallbackRenderApiQueue = SkikoProperties.fallbackRenderApiQueue.toMutableList()
var renderer: SkiaRenderer? = null
val clipComponents = mutableListOf<ClipRectangle>()
private var contextHandler = createContextHandler(this, SkikoProperties.renderApi)
@Volatile
private var isDisposed = false
internal var redrawer: Redrawer? = null
private var contextHandler: ContextHandler? = null
private val fallbackRenderApiQueue = SkikoProperties.fallbackRenderApiQueue.toMutableList()
@Volatile
private var picture: PictureHolder? = null
......@@ -38,7 +39,9 @@ open class SkiaLayer : HardwareLayer() {
override fun init() {
super.init()
redrawer = platformOperations.createRedrawer(this, SkikoProperties.renderApi)
val initialRenderApi = fallbackRenderApiQueue.removeAt(0)
contextHandler = createContextHandler(this, initialRenderApi)
redrawer = platformOperations.createRedrawer(this, initialRenderApi)
redrawer?.syncSize()
redrawer?.redrawImmediately()
}
......@@ -46,7 +49,7 @@ open class SkiaLayer : HardwareLayer() {
override fun dispose() {
check(!isDisposed)
check(isEventDispatchThread())
contextHandler.dispose()
contextHandler?.dispose()
redrawer?.dispose()
picture?.instance?.close()
pictureRecorder.close()
......@@ -106,7 +109,7 @@ open class SkiaLayer : HardwareLayer() {
override fun draw() {
check(!isDisposed)
contextHandler.apply {
contextHandler?.apply {
if (!initContext()) {
fallbackToNextApi()
return
......
......@@ -50,11 +50,17 @@ internal object SkikoProperties {
}
val fallbackRenderApiQueue : List<GraphicsApi> by lazy {
val head = renderApi
var renderApiList = mutableListOf<GraphicsApi>()
when (hostOs) {
OS.MacOS -> listOf(GraphicsApi.SOFTWARE)
OS.Linux -> listOf(GraphicsApi.SOFTWARE)
OS.Windows -> listOf(GraphicsApi.OPENGL, GraphicsApi.SOFTWARE)
OS.MacOS -> renderApiList = mutableListOf(GraphicsApi.OPENGL, GraphicsApi.SOFTWARE)
OS.Linux -> renderApiList = mutableListOf(GraphicsApi.OPENGL, GraphicsApi.SOFTWARE)
OS.Windows -> renderApiList = mutableListOf(GraphicsApi.DIRECT3D, GraphicsApi.OPENGL, GraphicsApi.SOFTWARE)
}
renderApiList.remove(head)
listOf(head) + renderApiList
}
private fun property(name: String, default: Boolean) = lazy {
......
......@@ -17,7 +17,7 @@ internal fun createContextHandler(layer: SkiaLayer, renderApi: GraphicsApi): Con
GraphicsApi.SOFTWARE -> SoftwareContextHandler(layer)
GraphicsApi.OPENGL -> OpenGLContextHandler(layer)
GraphicsApi.DIRECT3D -> Direct3DContextHandler(layer)
else -> TODO("Unsupported yet")
else -> TODO("Unsupported yet.")
}
}
......
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