Skip to content

Commit 4a282ae

Browse files
committed
docs: add skia in GLCanvas to sample
1 parent 0890dd5 commit 4a282ae

File tree

1 file changed

+44
-1
lines changed

1 file changed

+44
-1
lines changed

src/test/kotlin/direct/Main.kt

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,43 @@
11
package direct
22

3+
import androidx.compose.foundation.background
34
import androidx.compose.foundation.layout.*
45
import androidx.compose.material.Button
56
import androidx.compose.material.MaterialTheme
67
import androidx.compose.material.Surface
78
import androidx.compose.material.Text
9+
import androidx.compose.runtime.getValue
10+
import androidx.compose.runtime.mutableStateOf
11+
import androidx.compose.runtime.setValue
812
import androidx.compose.ui.Alignment
913
import androidx.compose.ui.InternalComposeUiApi
1014
import androidx.compose.ui.Modifier
15+
import androidx.compose.ui.graphics.Color
16+
import androidx.compose.ui.graphics.asComposeCanvas
1117
import androidx.compose.ui.scene.PlatformLayersComposeScene
1218
import androidx.compose.ui.unit.dp
1319
import androidx.compose.ui.window.Window
1420
import androidx.compose.ui.window.application
1521
import dev.silenium.compose.gl.canvas.GLCanvas
1622
import dev.silenium.compose.gl.graphicsApi
23+
import org.jetbrains.skia.*
1724
import org.jetbrains.skiko.Version
1825

1926
@OptIn(InternalComposeUiApi::class)
2027
fun main() = application {
2128
val glScene = PlatformLayersComposeScene()
2229
glScene.setContent {
23-
Text("Hello from Skia on OpenGL", style = MaterialTheme.typography.h2)
30+
Text(
31+
"Hello from Skia on OpenGL",
32+
style = MaterialTheme.typography.h2,
33+
modifier = Modifier.background(Color.White.copy(alpha = 0.5f)).padding(10.dp),
34+
)
2435
}
2536

37+
var glSurface: Surface? by mutableStateOf(null)
38+
var glContext: DirectContext? by mutableStateOf(null)
39+
var glRenderTarget: BackendRenderTarget? by mutableStateOf(null)
40+
2641
val renderer = SampleRenderer()
2742
Window(onCloseRequest = ::exitApplication, title = "Test") {
2843
Box(Modifier.fillMaxSize()) {
@@ -34,9 +49,37 @@ fun main() = application {
3449
},
3550
onResize = { old, new ->
3651
println("Resized from $old to $new, new fbo: ${fbo.id}")
52+
53+
if (glContext == null) {
54+
glContext = DirectContext.makeGL()
55+
}
56+
glSurface?.close()
57+
glRenderTarget?.close()
58+
glRenderTarget = BackendRenderTarget.makeGL(
59+
width = new.width,
60+
height = new.height,
61+
sampleCnt = 1,
62+
stencilBits = 8,
63+
fbId = fbo.id,
64+
fbFormat = fbo.colorAttachment.internalFormat,
65+
)
66+
glSurface = Surface.makeFromBackendRenderTarget(
67+
context = glContext!!, rt = glRenderTarget!!,
68+
origin = SurfaceOrigin.TOP_LEFT,
69+
colorFormat = SurfaceColorFormat.RGBA_8888,
70+
colorSpace = ColorSpace.sRGB,
71+
)
3772
},
3873
) {
3974
renderer.draw()
75+
glContext?.resetGLAll()
76+
glSurface?.canvas?.let {
77+
it.save()
78+
it.translate(50f, 200f)
79+
glScene.render(it.asComposeCanvas(), 0L)
80+
it.restore()
81+
}
82+
glSurface?.flushAndSubmit()
4083
}
4184
Surface(
4285
shape = MaterialTheme.shapes.medium,

0 commit comments

Comments
 (0)