samples: fix issues in software3d

This commit is contained in:
Alexey Andreev 2023-11-22 21:23:20 +01:00
parent 57c22ab2c8
commit ef359c3604
7 changed files with 12 additions and 7 deletions

View File

@ -39,6 +39,7 @@ teavm.wasm {
mainClass = "org.teavm.samples.software3d.teavm.WasmWorkerKt" mainClass = "org.teavm.samples.software3d.teavm.WasmWorkerKt"
optimization = OptimizationLevel.AGGRESSIVE optimization = OptimizationLevel.AGGRESSIVE
minHeapSize = 4 minHeapSize = 4
maxHeapSize = 32
} }
kotlin { kotlin {

View File

@ -34,4 +34,8 @@ class Raster(@JvmField val width: Int, @JvmField val height: Int) {
color = IntArray(width * height) color = IntArray(width * height)
return result return result
} }
companion object {
fun calculateHeight(height: Int, step: Int, offset: Int): Int = ((height + step - 2 - offset) / step) + 1
}
} }

View File

@ -104,7 +104,7 @@ class Rasterizer(val raster: Raster, val offset: Int, val step: Int) {
val ex = s2.pos.x + d2x * k2 val ex = s2.pos.x + d2x * k2
val startIntX = ceil(sx).toInt().coerceAtLeast(0) val startIntX = ceil(sx).toInt().coerceAtLeast(0)
val endIntX = ceil(ex).toInt().coerceAtMost(raster.width) val endIntX = ceil(ex).toInt().coerceAtMost(raster.width)
if (startIntX + 1 == endIntX || startIntX >= raster.width || endIntX <= 0) { if (startIntX >= endIntX || startIntX >= raster.width || endIntX <= 0) {
y += step y += step
continue continue
} }

View File

@ -42,7 +42,7 @@ private fun init(data: dynamic) {
val step = data.step as Int val step = data.step as Int
val offset = data.offset as Int val offset = data.offset as Int
val (scene, updaterF) = geometry() val (scene, updaterF) = geometry()
raster = Raster(width, height / step) raster = Raster(width, Raster.calculateHeight(height, step, offset))
updater = updaterF updater = updaterF
renderer = Renderer(scene, raster, offset, step).apply { renderer = Renderer(scene, raster, offset, step).apply {
projection = Matrix.projection(-1f, 1f, -1f, 1f, 2f, 10f) projection = Matrix.projection(-1f, 1f, -1f, 1f, 2f, 10f)

View File

@ -47,10 +47,10 @@ fun main() {
} }
val (scene, updater) = geometry() val (scene, updater) = geometry()
val taskCount = Runtime.getRuntime().availableProcessors() val taskCount = 1// Runtime.getRuntime().availableProcessors()
println("Running on $taskCount CPUs") println("Running on $taskCount CPUs")
val rasters = (0 until taskCount).map { Raster(SCENE_WIDTH, SCENE_HEIGHT / taskCount) } val rasters = (0 until taskCount).map { Raster(SCENE_WIDTH, (SCENE_HEIGHT + taskCount - 1) / taskCount) }
val renderers = rasters.mapIndexed() { index, raster -> val renderers = rasters.mapIndexed { index, raster ->
Renderer(scene, raster, index, taskCount).apply { Renderer(scene, raster, index, taskCount).apply {
projection = Matrix.projection(-1f, 1f, -1f, 1f, 2f, 10f) projection = Matrix.projection(-1f, 1f, -1f, 1f, 2f, 10f)
viewport = Matrix.translation(SCENE_WIDTH / 2f, SCENE_HEIGHT / 2f, 0f) * viewport = Matrix.translation(SCENE_WIDTH / 2f, SCENE_HEIGHT / 2f, 0f) *

View File

@ -31,7 +31,7 @@ fun main() {
@Export(name = "initWorker") @Export(name = "initWorker")
fun init(width: Int, height: Int, step: Int, offset: Int) { fun init(width: Int, height: Int, step: Int, offset: Int) {
val (scene, updaterF) = geometry() val (scene, updaterF) = geometry()
raster = Raster(width, height / step) raster = Raster(width, Raster.calculateHeight(height, step, offset))
updater = updaterF updater = updaterF
renderer = Renderer(scene, raster, offset, step).apply { renderer = Renderer(scene, raster, offset, step).apply {
projection = Matrix.projection(-1f, 1f, -1f, 1f, 2f, 10f) projection = Matrix.projection(-1f, 1f, -1f, 1f, 2f, 10f)

View File

@ -49,7 +49,7 @@ class RenderWorker {
height = (params["height"] as JSNumber).intValue() height = (params["height"] as JSNumber).intValue()
val step = (params["step"] as JSNumber).intValue() val step = (params["step"] as JSNumber).intValue()
val offset = (params["offset"] as JSNumber).intValue() val offset = (params["offset"] as JSNumber).intValue()
raster = Raster(width, height / step) raster = Raster(width, Raster.calculateHeight(height, step, offset))
updater = updaterF updater = updaterF
renderer = Renderer(scene, raster, offset, step).apply { renderer = Renderer(scene, raster, offset, step).apply {
projection = Matrix.projection(-1f, 1f, -1f, 1f, 2f, 10f) projection = Matrix.projection(-1f, 1f, -1f, 1f, 2f, 10f)