Skip to content
This repository has been archived by the owner on Jul 8, 2022. It is now read-only.

Commit

Permalink
Update korma + reduce GC on KorgwSample
Browse files Browse the repository at this point in the history
  • Loading branch information
soywiz committed Jan 19, 2019
1 parent 14e997b commit fd83841
Show file tree
Hide file tree
Showing 7 changed files with 120 additions and 106 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ class MainActivity : KoruiActivity(), ActivityCompat.OnRequestPermissionsResultC
vertexLayout = DefaultShaders.LAYOUT_DEBUG,
vertexCount = 3,
uniforms = mapOf(
DefaultShaders.u_ProjMat to Matrix4().setToOrtho(0f, 0f, 640f, 480f, -1f, +1f)
DefaultShaders.u_ProjMat to Matrix4().setToOrtho(Rectangle(0f, 0f, 640f, 480f), -1f, +1f)
)
)
}
Expand Down
6 changes: 3 additions & 3 deletions @old/korui-jtransc-example/src/main/kotlin/SampleAg.kt
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ object SampleAg {
vertexLayout = DefaultShaders.LAYOUT_DEBUG,
vertexCount = 3,
uniforms = mapOf(
DefaultShaders.u_ProjMat to Matrix4().setToOrtho(0f, 0f, 640f, 480f, -1f, +1f)
DefaultShaders.u_ProjMat to Matrix4().setToOrtho(Rectangle(0f, 0f, 640f, 480f), -1f, +1f)
)
)

Expand Down Expand Up @@ -100,7 +100,7 @@ object SampleAg {
vertexLayout = DefaultShaders.LAYOUT_DEBUG,
vertexCount = 3,
uniforms = mapOf(
DefaultShaders.u_ProjMat to Matrix4().setToOrtho(0f, 0f, 640f, 480f, -1f, +1f)
DefaultShaders.u_ProjMat to Matrix4().setToOrtho(Rectangle(0f, 0f, 640f, 480f), -1f, +1f)
)
)
}
Expand All @@ -118,4 +118,4 @@ object SampleAg {
}
}
}
}
}
6 changes: 4 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,13 @@ subprojects {
mingwX64Test {
dependsOn nativeCommonTest
}
configure([iosX64Main, iosArm32Main, iosArm64Main, macosX64Main, linuxX64Main]) {
//configure([iosX64Main, iosArm32Main, iosArm64Main, macosX64Main, linuxX64Main]) {
configure([macosX64Main, linuxX64Main]) {
dependsOn nativeCommonMain
dependsOn nativePosixMain
}
configure([iosX64Test, iosArm32Test, iosArm64Test, macosX64Test, linuxX64Test]) {
//configure([iosX64Test, iosArm32Test, iosArm64Test, macosX64Test, linuxX64Test]) {
configure([macosX64Test, linuxX64Test]) {
dependsOn nativeCommonTest
}
}
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ kotlin.code.style=official
# version
projectVersion=1.0.0-beta-2-eap-100
korimVersion=1.0.0-beta-2-eap-100
kormaVersion=1.2.0-eap-100
kormaVersion=1.2.1-eap-100
korioVersion=1.1.0-eap-100
joglVersion=2.3.2
gluegenVersion=2.3.2
Expand Down
34 changes: 22 additions & 12 deletions korgw-sample/build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
dependencies {
commonMainApi project(":korgw")
commonMainApi project(":korag-format")

commonMainApi "org.jogamp.gluegen:gluegen-rt:$gluegenVersion:natives-linux-amd64"
commonMainApi "org.jogamp.gluegen:gluegen-rt:$gluegenVersion:natives-linux-armv6"
Expand All @@ -17,27 +18,36 @@ dependencies {
commonMainApi "org.jogamp.jogl:jogl-all:$joglVersion:natives-windows-i586"
}

//apply plugin: 'application'

ext.mainClassName = "com.soywiz.korgw.sample.KCube"

def targets = ['macosX64', 'mingwX64', 'linuxX64']

for (target in targets) {
kotlin.targets[target].compilations.main.outputKinds("EXECUTABLE")
}

afterEvaluate {
// runMingwX64Main, runLinuxX64Main, runMacosX64Main
for (target in targets) {
def ctarget = target.capitalize()
def debugExecutableTask = tasks.findByName("linkMainDebugExecutable${ctarget}")
if (debugExecutableTask != null) {
tasks.create("run${ctarget}", Exec) {
dependsOn(debugExecutableTask)
executable = kotlin.targets[target].compilations.main.getBinary("EXECUTABLE", "debug")
args = []
}
task runJvm(type: JavaExec) {
classpath = kotlin.targets.jvm.compilations.test.runtimeDependencyFiles
main = mainClassName
}

// runMingwX64Main, runLinuxX64Main, runMacosX64Main
for (target in targets) {
def ctarget = target.capitalize()
def debugExecutableTask = tasks.findByName("linkMainDebugExecutable${ctarget}")
if (debugExecutableTask != null) {
tasks.create("run${ctarget}", Exec) {
dependsOn(debugExecutableTask)
executable = kotlin.targets[target].compilations.main.getBinary("EXECUTABLE", "debug")
args = []
}
}
}

tasks.create("jsWeb", Task) {
tasks.create("jsWeb", Task) {
afterEvaluate {
dependsOn(kotlin.targets.js.compilations.test.compileKotlinTaskName, populateNodeModules)
doLast {
new File("$buildDir/node_modules/index.html").write("""<!doctype html>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import com.soywiz.korgw.*
import com.soywiz.korim.color.*
import com.soywiz.korma.geom.*
import kotlin.jvm.*
import com.soywiz.korio.lang.use
import kotlin.math.*
import com.soywiz.korio.Korio

Expand All @@ -19,6 +18,24 @@ class KCube {
val app = KCube()
app.run()
}

val u_ProjMat = Uniform("u_ProjMat", VarType.Mat4)
val u_ViewMat = Uniform("u_ViewMat", VarType.Mat4)
val u_ModMat = Uniform("u_ModMat", VarType.Mat4)
val point = Attribute("point", VarType.Float3, normalized = false)
val a_col = Attribute("a_Col", VarType.Float3, normalized = true)
val v_col = Varying("v_Col", VarType.Float3)
val prog = Program(
vertex = VertexShader {
SET(v_col, a_col)
SET(out, u_ProjMat * u_ViewMat * u_ModMat * vec4(point, 1f.lit))
},
fragment = FragmentShader {
SET(out, vec4(v_col, 1f.lit))
},
name = "MY_PROG"
)
val vertexLayout = VertexLayout(point, a_col)
}

val cubeSize = 1f
Expand All @@ -36,26 +53,11 @@ class KCube {
var rotAxis = Vector3D(1f, 1f, 1f)

val rs = AG.RenderState(depthFunc = AG.CompareMode.LESS_EQUAL)
val u_ProjMat = Uniform("u_ProjMat", VarType.Mat4)
val u_ViewMat = Uniform("u_ViewMat", VarType.Mat4)
val u_ModMat = Uniform("u_ModMat", VarType.Mat4)
val point = Attribute("point", VarType.Float3, normalized = false)
val a_col = Attribute("a_Col", VarType.Float3, normalized = true)
val v_col = Varying("v_Col", VarType.Float3)
val prog = Program(
vertex = VertexShader {
SET(v_col, a_col)
SET(out, u_ProjMat * u_ViewMat * u_ModMat * vec4(point, 1f.lit))
},
fragment = FragmentShader {
SET(out, vec4(v_col, 1f.lit))
},
name = "MY_PROG"
)

var projMat = Matrix3D().setToPerspective(aov, ar, near, far)
var viewMat = Matrix3D().setToTranslation(xPos, yPos, zPos)
var modlMat = Matrix3D().identity()
private val uniformValues = AG.UniformValues()

fun run() = Korio {
DefaultGameWindow.loop {
Expand All @@ -71,85 +73,85 @@ class KCube {
}

fun reshape(event: ReshapeEvent, ag: AG) {
width = event.width
height = event.height
if (height <= 0)
height = 1
width = max(event.width, 1)
height = max(event.height, 1)
ar = (width.toFloat() / height.toFloat())
ag.setViewport(0, 0, width, height)
projMat = Matrix3D().setToPerspective(aov, ar, near, far)
projMat.setToPerspective(aov, ar, near, far)
}

private lateinit var vertexBuffer: AG.Buffer
private var numPoints: Int = 0

fun render(ag: AG) {
ag.clear(color = Colors.BLACK, depth = far)

modlMat = Matrix3D().identity().setToRotation(rquad, rotAxis);

val points = mutableListOf<Float>()
points += drawCube()
ag.createVertexBuffer(points.toFloatArray()).use { vertices ->
ag.draw(
vertices,
program = prog,
type = AG.DrawType.TRIANGLES,
vertexLayout = VertexLayout(point, a_col),
vertexCount = points.size / 6,
uniforms = AG.UniformValues(
u_ProjMat to projMat,
u_ViewMat to viewMat,
u_ModMat to modlMat
),
renderState = rs
)
if (!::vertexBuffer.isInitialized) {
vertexBuffer = ag.createVertexBuffer()
vertexBuffer.upload(floatArrayListOf().apply {
this += getCubeVertices()
}.also { numPoints = it.size }.toFloatArray())
}

rquad = rquad.plus(Angle.fromDegrees(0.15))
ag.draw(
vertexBuffer,
program = prog,
type = AG.DrawType.TRIANGLES,
vertexLayout = vertexLayout,
vertexCount = numPoints / 6,
uniforms = uniformValues.apply {
this[u_ProjMat] = projMat
this[u_ViewMat] = viewMat
this[u_ModMat] = modlMat.identity().setToRotation(rquad, rotAxis)
},
renderState = rs
)

}
rquad += 0.5.degrees

fun drawCube(): List<Float> {
return listOf(
-cubeSize, -cubeSize, -cubeSize, 1f, 0f, 0f, //p1
-cubeSize, -cubeSize, +cubeSize, 1f, 0f, 0f, //p2
-cubeSize, +cubeSize, +cubeSize, 1f, 0f, 0f, //p3
-cubeSize, -cubeSize, -cubeSize, 1f, 0f, 0f, //p1
-cubeSize, +cubeSize, +cubeSize, 1f, 0f, 0f, //p3
-cubeSize, +cubeSize, -cubeSize, 1f, 0f, 0f, //p4

+cubeSize, +cubeSize, -cubeSize, 0f, 1f, 0f, //p5
-cubeSize, -cubeSize, -cubeSize, 0f, 1f, 0f, //p1
-cubeSize, +cubeSize, -cubeSize, 0f, 1f, 0f, //p4
+cubeSize, +cubeSize, -cubeSize, 0f, 1f, 0f, //p5
+cubeSize, -cubeSize, -cubeSize, 0f, 1f, 0f, //p7
-cubeSize, -cubeSize, -cubeSize, 0f, 1f, 0f, //p1

+cubeSize, -cubeSize, +cubeSize, 0f, 0f, 1f, //p6
-cubeSize, -cubeSize, -cubeSize, 0f, 0f, 1f, //p1
+cubeSize, -cubeSize, -cubeSize, 0f, 0f, 1f, //p7
+cubeSize, -cubeSize, +cubeSize, 0f, 0f, 1f, //p6
-cubeSize, -cubeSize, +cubeSize, 0f, 0f, 1f, //p2
-cubeSize, -cubeSize, -cubeSize, 0f, 0f, 1f, //p1

+cubeSize, +cubeSize, +cubeSize, 0f, 1f, 1f, //p8
+cubeSize, +cubeSize, -cubeSize, 0f, 1f, 1f, //p5
-cubeSize, +cubeSize, -cubeSize, 0f, 1f, 1f, //p4
+cubeSize, +cubeSize, +cubeSize, 0f, 1f, 1f, //p8
-cubeSize, +cubeSize, -cubeSize, 0f, 1f, 1f, //p4
-cubeSize, +cubeSize, +cubeSize, 0f, 1f, 1f, //p3

+cubeSize, +cubeSize, +cubeSize, 1f, 1f, 0f, //p8
-cubeSize, +cubeSize, +cubeSize, 1f, 1f, 0f, //p3
+cubeSize, -cubeSize, +cubeSize, 1f, 1f, 0f, //p6
-cubeSize, +cubeSize, +cubeSize, 1f, 1f, 0f, //p3
-cubeSize, -cubeSize, +cubeSize, 1f, 1f, 0f, //p2
+cubeSize, -cubeSize, +cubeSize, 1f, 1f, 0f, //p6

+cubeSize, +cubeSize, +cubeSize, 1f, 0f, 1f, //p8
+cubeSize, -cubeSize, -cubeSize, 1f, 0f, 1f, //p7
+cubeSize, +cubeSize, -cubeSize, 1f, 0f, 1f, //p5
+cubeSize, -cubeSize, -cubeSize, 1f, 0f, 1f, //p7
+cubeSize, +cubeSize, +cubeSize, 1f, 0f, 1f, //p8
+cubeSize, -cubeSize, +cubeSize, 1f, 0f, 1f //p6
)
}

fun getCubeVertices(): FloatArray = floatArrayOf(
-cubeSize, -cubeSize, -cubeSize, 1f, 0f, 0f, //p1
-cubeSize, -cubeSize, +cubeSize, 1f, 0f, 0f, //p2
-cubeSize, +cubeSize, +cubeSize, 1f, 0f, 0f, //p3
-cubeSize, -cubeSize, -cubeSize, 1f, 0f, 0f, //p1
-cubeSize, +cubeSize, +cubeSize, 1f, 0f, 0f, //p3
-cubeSize, +cubeSize, -cubeSize, 1f, 0f, 0f, //p4

+cubeSize, +cubeSize, -cubeSize, 0f, 1f, 0f, //p5
-cubeSize, -cubeSize, -cubeSize, 0f, 1f, 0f, //p1
-cubeSize, +cubeSize, -cubeSize, 0f, 1f, 0f, //p4
+cubeSize, +cubeSize, -cubeSize, 0f, 1f, 0f, //p5
+cubeSize, -cubeSize, -cubeSize, 0f, 1f, 0f, //p7
-cubeSize, -cubeSize, -cubeSize, 0f, 1f, 0f, //p1

+cubeSize, -cubeSize, +cubeSize, 0f, 0f, 1f, //p6
-cubeSize, -cubeSize, -cubeSize, 0f, 0f, 1f, //p1
+cubeSize, -cubeSize, -cubeSize, 0f, 0f, 1f, //p7
+cubeSize, -cubeSize, +cubeSize, 0f, 0f, 1f, //p6
-cubeSize, -cubeSize, +cubeSize, 0f, 0f, 1f, //p2
-cubeSize, -cubeSize, -cubeSize, 0f, 0f, 1f, //p1

+cubeSize, +cubeSize, +cubeSize, 0f, 1f, 1f, //p8
+cubeSize, +cubeSize, -cubeSize, 0f, 1f, 1f, //p5
-cubeSize, +cubeSize, -cubeSize, 0f, 1f, 1f, //p4
+cubeSize, +cubeSize, +cubeSize, 0f, 1f, 1f, //p8
-cubeSize, +cubeSize, -cubeSize, 0f, 1f, 1f, //p4
-cubeSize, +cubeSize, +cubeSize, 0f, 1f, 1f, //p3

+cubeSize, +cubeSize, +cubeSize, 1f, 1f, 0f, //p8
-cubeSize, +cubeSize, +cubeSize, 1f, 1f, 0f, //p3
+cubeSize, -cubeSize, +cubeSize, 1f, 1f, 0f, //p6
-cubeSize, +cubeSize, +cubeSize, 1f, 1f, 0f, //p3
-cubeSize, -cubeSize, +cubeSize, 1f, 1f, 0f, //p2
+cubeSize, -cubeSize, +cubeSize, 1f, 1f, 0f, //p6

+cubeSize, +cubeSize, +cubeSize, 1f, 0f, 1f, //p8
+cubeSize, -cubeSize, -cubeSize, 1f, 0f, 1f, //p7
+cubeSize, +cubeSize, -cubeSize, 1f, 0f, 1f, //p5
+cubeSize, -cubeSize, -cubeSize, 1f, 0f, 1f, //p7
+cubeSize, +cubeSize, +cubeSize, 1f, 0f, 1f, //p8
+cubeSize, -cubeSize, +cubeSize, 1f, 0f, 1f //p6
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ suspend fun main(args: Array<String>) {
vertexLayout = DefaultShaders.LAYOUT_DEBUG,
vertexCount = 3,
uniforms = AG.UniformValues(
DefaultShaders.u_ProjMat to Matrix3D().setToOrtho(0f, 0f, 640f, 480f, -1f, +1f)
DefaultShaders.u_ProjMat to Matrix3D().setToOrtho(Rectangle(0f, 0f, 640f, 480f), -1f, +1f)
)
)
}
Expand Down

0 comments on commit fd83841

Please sign in to comment.