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