Skip to content

Commit 99725d8

Browse files
committed
build: add examples as subproject
1 parent 266eca8 commit 99725d8

File tree

5 files changed

+49
-23
lines changed

5 files changed

+49
-23
lines changed

examples/settings.gradle.kts

Lines changed: 0 additions & 5 deletions
This file was deleted.

examples/skia-gl/build.gradle.kts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,17 @@ plugins {
77

88
val composeGlVersion = "2e851b0-dev"
99

10+
val useParent: Boolean = project.ext.properties.getOrDefault("examples.use-parent", "false").toString().toBoolean()
11+
1012
dependencies {
1113
implementation(compose.desktop.currentOs)
12-
implementation("dev.silenium.compose.gl:compose-gl:${composeGlVersion}")
13-
implementation("dev.silenium.compose.gl:compose-gl-natives-all:${composeGlVersion}")
14+
if (useParent) {
15+
implementation(project(":"))
16+
} else {
17+
implementation("dev.silenium.compose.gl:compose-gl:${composeGlVersion}")
18+
implementation("dev.silenium.compose.gl:compose-gl-natives-all:${composeGlVersion}")
19+
}
20+
implementation(libs.slf4j.api)
1421
runtimeOnly("ch.qos.logback:logback-classic:1.5.19")
1522
}
1623

examples/skia-gl/src/main/kotlin/dev/silenium/compose/gl/examples/skia_gl/Main.kt

Lines changed: 38 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import androidx.compose.material.Button
66
import androidx.compose.material.MaterialTheme
77
import androidx.compose.material.Surface
88
import androidx.compose.material.Text
9+
import androidx.compose.runtime.collectAsState
910
import androidx.compose.runtime.getValue
1011
import androidx.compose.runtime.mutableStateOf
1112
import androidx.compose.runtime.setValue
@@ -18,8 +19,10 @@ import androidx.compose.ui.scene.PlatformLayersComposeScene
1819
import androidx.compose.ui.unit.dp
1920
import androidx.compose.ui.window.Window
2021
import androidx.compose.ui.window.application
21-
import dev.silenium.compose.gl.LocalWindow
2222
import dev.silenium.compose.gl.canvas.GLCanvas
23+
import dev.silenium.compose.gl.canvas.Stats
24+
import dev.silenium.compose.gl.canvas.rememberGLCanvasState
25+
import dev.silenium.compose.gl.canvas.resetGLFeatures
2326
import dev.silenium.compose.gl.findSkiaLayer
2427
import dev.silenium.compose.gl.graphicsApi
2528
import org.jetbrains.skia.*
@@ -29,22 +32,27 @@ import org.jetbrains.skiko.Version
2932
fun main() = application {
3033
val glScene = PlatformLayersComposeScene()
3134
glScene.setContent {
32-
Text(
33-
"Hello from Skia on OpenGL",
34-
style = MaterialTheme.typography.h2,
35-
modifier = Modifier.background(Color.White.copy(alpha = 0.5f)).padding(10.dp),
36-
)
35+
Box(modifier = Modifier.wrapContentSize().background(Color.Red)) {
36+
Box(modifier = Modifier.wrapContentSize().padding(50.dp).background(Color.Blue)) {
37+
Text(
38+
"Hello from Skia on OpenGL",
39+
style = MaterialTheme.typography.h2,
40+
modifier = Modifier.background(Color.White.copy(alpha = 0.5f)).padding(10.dp),
41+
)
42+
}
43+
}
3744
}
3845

3946
var glSurface: Surface? by mutableStateOf(null)
4047
var glContext: DirectContext? by mutableStateOf(null)
4148
var glRenderTarget: BackendRenderTarget? by mutableStateOf(null)
4249

4350
val renderer = SampleRenderer()
51+
val state = rememberGLCanvasState()
4452
Window(onCloseRequest = ::exitApplication, title = "Test") {
4553
Box(Modifier.fillMaxSize()) {
46-
println("skia layer: ${LocalWindow.current?.findSkiaLayer()}")
4754
GLCanvas(
55+
state = state,
4856
modifier = Modifier.fillMaxSize(),
4957
onDispose = {
5058
renderer.destroy()
@@ -74,15 +82,19 @@ fun main() = application {
7482
)
7583
},
7684
) {
77-
renderer.draw()
78-
glContext?.resetGLAll()
85+
glContext?.resetAll()
7986
glSurface?.canvas?.let {
8087
it.save()
8188
it.translate(50f, 200f)
82-
glScene.render(it.asComposeCanvas(), 0L)
89+
glScene.render(it.asComposeCanvas(), System.nanoTime())
8390
it.restore()
8491
}
85-
glSurface?.flushAndSubmit()
92+
glSurface?.flushAndSubmit(true)
93+
glContext?.flush()
94+
glContext?.submit(true)
95+
resetGLFeatures()
96+
renderer.draw()
97+
state.requestUpdate()
8698
}
8799
Surface(
88100
shape = MaterialTheme.shapes.medium,
@@ -92,14 +104,28 @@ fun main() = application {
92104
Column(
93105
verticalArrangement = Arrangement.spacedBy(4.dp),
94106
horizontalAlignment = Alignment.Start,
95-
modifier = Modifier.padding(8.dp),
107+
modifier = Modifier.padding(8.dp).width(300.dp),
96108
) {
97109
Text("Skia Graphics API: ${window.findSkiaLayer()?.graphicsApi()}")
98110
Text("Skia Version: ${Version.skia}")
99111
Text("Skiko Version: ${Version.skiko}")
100112
Button(onClick = { println("button pressed") }) {
101113
Text("Button")
102114
}
115+
116+
val display by state.displayStatistics.collectAsState()
117+
Text("Display datapoints: ${display.frameTimes.values.size}")
118+
Text("Display frame time: ${display.frameTimes.median.inWholeMicroseconds / 1000.0} ms")
119+
Text("Display frame time (99th): ${display.frameTimes.percentile(0.99).inWholeMicroseconds / 1000.0} ms")
120+
Text("Display FPS: ${display.fps.median}")
121+
Text("Display FPS (99th): ${display.fps.percentile(0.99, Stats.Percentile.LOWEST)}")
122+
123+
val render by state.renderStatistics.collectAsState()
124+
Text("Render datapoints: ${render.frameTimes.values.size}")
125+
Text("Render frame time: ${render.frameTimes.median.inWholeMicroseconds / 1000.0} ms")
126+
Text("Render frame time (99th): ${render.frameTimes.percentile(0.99).inWholeMicroseconds / 1000.0} ms")
127+
Text("Render FPS: ${render.fps.median} ms")
128+
Text("Render FPS (99th): ${render.fps.percentile(0.99, Stats.Percentile.LOWEST)}")
103129
}
104130
}
105131
}

examples/skia-gl/src/main/kotlin/dev/silenium/compose/gl/examples/skia_gl/SampleRenderer.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ out vec4 color;
2929
uniform sampler2D myTextureSampler;
3030
3131
void main() {
32-
color = vec4(texture(myTextureSampler, UV).rgb, 1.0);
32+
color = vec4(texture(myTextureSampler, UV).rgb, 0.7f);
3333
//color = vec4(UV.xy, 0.0, 1.0);
3434
}
3535
"""
@@ -112,9 +112,6 @@ class SampleRenderer {
112112
glEnable(GL_BLEND)
113113
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
114114

115-
glClearColor(0f, .8f, .4f, 1f)
116-
glClear(GL_COLOR_BUFFER_BIT)
117-
118115
glBindVertexArray(vao)
119116
glUseProgram(shaderProgram)
120117
glActiveTexture(GL_TEXTURE0)

settings.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,4 @@ if (deployNative) {
2424
if (deployKotlin) {
2525
include(":native-all")
2626
}
27+
include(":examples", ":examples:skia-gl")

0 commit comments

Comments
 (0)