Commit 2cfab4a4 authored by Roman Sedaikin's avatar Roman Sedaikin

Added OpenGL (Windows).

parent f1b93ac7
...@@ -15,6 +15,7 @@ import kotlin.math.cos ...@@ -15,6 +15,7 @@ import kotlin.math.cos
import kotlin.math.sin import kotlin.math.sin
fun main(args: Array<String>) { fun main(args: Array<String>) {
System.setProperty("skiko.renderApi", "OPENGL")
repeat(1) { repeat(1) {
createWindow("window $it") createWindow("window $it")
} }
...@@ -90,31 +91,26 @@ class Renderer( ...@@ -90,31 +91,26 @@ class Renderer(
var canvas: Canvas? = null var canvas: Canvas? = null
override fun onRender(canvas: Canvas, width: Int, height: Int, nanoTime: Long) { override fun onRender(canvas: Canvas, width: Int, height: Int, nanoTime: Long) {
// this.canvas = canvas this.canvas = canvas
// val contentScale = layer.contentScale val contentScale = layer.contentScale
// canvas.scale(contentScale, contentScale) canvas.scale(contentScale, contentScale)
// displayScene(this, (width / contentScale).toInt(), (height / contentScale).toInt(), nanoTime) displayScene(this, (width / contentScale).toInt(), (height / contentScale).toInt(), nanoTime)
// layer.needRedraw()
// Alpha layers test
////////////////////////////////////////////////// val rectW = 100f
val rectH = 100f
val left = (width - rectW) / 2f
val top = (height - rectH) / 2f
val pictureRecorder = PictureRecorder() val pictureRecorder = PictureRecorder()
val pictureCanvas = pictureRecorder.beginRecording( val pictureCanvas = pictureRecorder.beginRecording(
Rect.makeLTRB( Rect.makeLTRB(left, top, left + rectW, top + rectH)
0f,
0f,
100f,
100f
)
) )
pictureCanvas.drawLine(0f, 0f, 100f, 100f, Paint()) pictureCanvas.drawLine(left, top, left + rectW, top + rectH, Paint())
val picture = pictureRecorder.finishRecordingAsPicture() val picture = pictureRecorder.finishRecordingAsPicture()
canvas.drawPicture( canvas.drawPicture(picture, null, Paint())
picture, canvas.drawLine(left, top + rectH, left + rectW, top, Paint())
null,
Paint() // if we replace it by null, everything will be normal layer.needRedraw()
)
canvas.drawLine(100f, 0f, 0f, 100f, Paint())
//////////////////////////////////////////////////
} }
} }
......
...@@ -26,31 +26,42 @@ internal class OpenGLContextHandler(layer: SkiaLayer) : ContextHandler(layer) { ...@@ -26,31 +26,42 @@ internal class OpenGLContextHandler(layer: SkiaLayer) : ContextHandler(layer) {
return true return true
} }
override fun initCanvas() { private var currentWidth = 0
disposeCanvas() private var currentHeight = 0
private fun isSizeChanged(width: Int, height: Int): Boolean {
if (width != currentWidth || height != currentHeight) {
currentWidth = width
currentHeight = height
return true
}
return false
}
override fun initCanvas() {
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)
val gl = OpenGLApi.instance if (isSizeChanged(w, h)) {
val fbId = gl.glGetIntegerv(gl.GL_DRAW_FRAMEBUFFER_BINDING) disposeCanvas()
renderTarget = makeGLRenderTarget( val gl = OpenGLApi.instance
w, val fbId = gl.glGetIntegerv(gl.GL_DRAW_FRAMEBUFFER_BINDING)
h, renderTarget = makeGLRenderTarget(
0, w,
8, h,
fbId, 0,
FramebufferFormat.GR_GL_RGBA8 8,
) fbId,
FramebufferFormat.GR_GL_RGBA8
surface = Surface.makeFromBackendRenderTarget( )
context!!, surface = Surface.makeFromBackendRenderTarget(
renderTarget!!, context!!,
SurfaceOrigin.BOTTOM_LEFT, renderTarget!!,
SurfaceColorFormat.RGBA_8888, SurfaceOrigin.BOTTOM_LEFT,
ColorSpace.getSRGB() SurfaceColorFormat.RGBA_8888,
) ColorSpace.getSRGB()
)
}
canvas = surface!!.canvas canvas = surface!!.canvas
} }
......
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