mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-11 11:04:05 +09:00
multithreading now should divide jobs evenly without any job missing out
Former-commit-id: 0511065489b0813fef82361b74369040fc2ad887 Former-commit-id: fe23e50fa33d6cf0c5118916bb29669d69bed5b9
This commit is contained in:
@@ -512,8 +512,8 @@ constructor() : BasicGameState() {
|
|||||||
ThreadPool.map(
|
ThreadPool.map(
|
||||||
i,
|
i,
|
||||||
ThreadActorUpdate(
|
ThreadActorUpdate(
|
||||||
((actors / CORES) * i).toInt(),
|
actors.div(Terrarum.THREADS).times(i).roundInt(),
|
||||||
((actors / CORES) * i.plus(1)).toInt() - 1,
|
actors.div(Terrarum.THREADS).times(i.plus(1)).roundInt() - 1,
|
||||||
gc, delta
|
gc, delta
|
||||||
),
|
),
|
||||||
"ActorUpdate"
|
"ActorUpdate"
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.sudoplay.joise.Joise
|
|||||||
import com.sudoplay.joise.module.*
|
import com.sudoplay.joise.module.*
|
||||||
import net.torvald.terrarum.Terrarum.Companion.STATE_ID_TOOL_NOISEGEN
|
import net.torvald.terrarum.Terrarum.Companion.STATE_ID_TOOL_NOISEGEN
|
||||||
import net.torvald.terrarum.concurrent.ThreadPool
|
import net.torvald.terrarum.concurrent.ThreadPool
|
||||||
|
import net.torvald.terrarum.gameactors.roundInt
|
||||||
import org.newdawn.slick.Color
|
import org.newdawn.slick.Color
|
||||||
import org.newdawn.slick.GameContainer
|
import org.newdawn.slick.GameContainer
|
||||||
import org.newdawn.slick.Graphics
|
import org.newdawn.slick.Graphics
|
||||||
@@ -25,8 +26,6 @@ class StateNoiseTexGen : BasicGameState() {
|
|||||||
}
|
}
|
||||||
override fun init(p0: GameContainer?, p1: StateBasedGame?) {
|
override fun init(p0: GameContainer?, p1: StateBasedGame?) {
|
||||||
generateNoiseImage()
|
generateNoiseImage()
|
||||||
|
|
||||||
println("Press SPACE to generate new noise")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun noiseRidged(): Joise {
|
private fun noiseRidged(): Joise {
|
||||||
@@ -59,6 +58,21 @@ class StateNoiseTexGen : BasicGameState() {
|
|||||||
return Joise(ridged_autocorrect)
|
return Joise(ridged_autocorrect)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun noiseBillowFractal(): Joise {
|
||||||
|
val ridged = ModuleFractal()
|
||||||
|
ridged.setType(ModuleFractal.FractalType.BILLOW)
|
||||||
|
ridged.setAllSourceInterpolationTypes(ModuleBasisFunction.InterpolationType.QUINTIC)
|
||||||
|
ridged.setNumOctaves(8)
|
||||||
|
ridged.setFrequency(1.0)
|
||||||
|
ridged.seed = Random().nextLong()
|
||||||
|
|
||||||
|
val ridged_autocorrect = ModuleAutoCorrect()
|
||||||
|
ridged_autocorrect.setRange(0.0, 1.0)
|
||||||
|
ridged_autocorrect.setSource(ridged)
|
||||||
|
|
||||||
|
return Joise(ridged_autocorrect)
|
||||||
|
}
|
||||||
|
|
||||||
private fun noiseBlobs(): Joise {
|
private fun noiseBlobs(): Joise {
|
||||||
val gradval = ModuleBasisFunction()
|
val gradval = ModuleBasisFunction()
|
||||||
gradval.seed = Random().nextLong()
|
gradval.seed = Random().nextLong()
|
||||||
@@ -103,7 +117,7 @@ class StateNoiseTexGen : BasicGameState() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun generateNoiseImage() {
|
fun generateNoiseImage() {
|
||||||
val noiseModule = noiseSmokyFractal() // change noise function here
|
val noiseModule = noiseBillowFractal() // change noise function here
|
||||||
|
|
||||||
noiseImage.graphics.background = Color.black
|
noiseImage.graphics.background = Color.black
|
||||||
|
|
||||||
@@ -113,12 +127,12 @@ class StateNoiseTexGen : BasicGameState() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i in 0..Terrarum.CORES - 1) {
|
for (i in 0..Terrarum.THREADS - 1) {
|
||||||
ThreadPool.map(
|
ThreadPool.map(
|
||||||
i,
|
i,
|
||||||
ThreadRunNoiseSampling(
|
ThreadRunNoiseSampling(
|
||||||
((imagesize / Terrarum.CORES) * i),
|
imagesize.toFloat().div(Terrarum.THREADS).times(i).roundInt(),
|
||||||
((imagesize / Terrarum.CORES) * i.plus(1)) - 1,
|
imagesize.toFloat().div(Terrarum.THREADS).times(i.plus(1)).roundInt() - 1,
|
||||||
noiseModule
|
noiseModule
|
||||||
),
|
),
|
||||||
"SampleJoiseMap"
|
"SampleJoiseMap"
|
||||||
@@ -135,6 +149,10 @@ class StateNoiseTexGen : BasicGameState() {
|
|||||||
override fun getID() = STATE_ID_TOOL_NOISEGEN
|
override fun getID() = STATE_ID_TOOL_NOISEGEN
|
||||||
|
|
||||||
override fun render(gc: GameContainer, sbg: StateBasedGame, g: Graphics) {
|
override fun render(gc: GameContainer, sbg: StateBasedGame, g: Graphics) {
|
||||||
|
g.color = Color.red
|
||||||
|
g.drawString("Press SPACE to generate new noise", 8f, 8f)
|
||||||
|
g.drawString("CPUs: ${Terrarum.THREADS}", Terrarum.WIDTH - 90f, 8f)
|
||||||
|
|
||||||
for (sy in 0..imagesize - 1) {
|
for (sy in 0..imagesize - 1) {
|
||||||
for (sx in 0..imagesize - 1) {
|
for (sx in 0..imagesize - 1) {
|
||||||
val noise = noiseMap[sy][sx]
|
val noise = noiseMap[sy][sx]
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import com.sudoplay.joise.module.*
|
|||||||
import net.torvald.terrarum.Terrarum
|
import net.torvald.terrarum.Terrarum
|
||||||
import net.torvald.terrarum.concurrent.ThreadPool
|
import net.torvald.terrarum.concurrent.ThreadPool
|
||||||
import net.torvald.terrarum.gameactors.ThreadActorUpdate
|
import net.torvald.terrarum.gameactors.ThreadActorUpdate
|
||||||
|
import net.torvald.terrarum.gameactors.roundInt
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
object WorldGenerator {
|
object WorldGenerator {
|
||||||
@@ -687,12 +688,12 @@ object WorldGenerator {
|
|||||||
private fun processNoiseLayers(noiseRecords: Array<TaggedJoise>) {
|
private fun processNoiseLayers(noiseRecords: Array<TaggedJoise>) {
|
||||||
if (Terrarum.MULTITHREAD) {
|
if (Terrarum.MULTITHREAD) {
|
||||||
// set up indices
|
// set up indices
|
||||||
for (i in 0..Terrarum.CORES - 1) {
|
for (i in 0..Terrarum.THREADS - 1) {
|
||||||
ThreadPool.map(
|
ThreadPool.map(
|
||||||
i,
|
i,
|
||||||
ThreadProcessNoiseLayers(
|
ThreadProcessNoiseLayers(
|
||||||
((HEIGHT / Terrarum.CORES) * i),
|
HEIGHT.toFloat().div(Terrarum.THREADS).times(i).roundInt(),
|
||||||
((HEIGHT / Terrarum.CORES) * i.plus(1)) - 1,
|
HEIGHT.toFloat().div(Terrarum.THREADS).times(i.plus(1)).roundInt() - 1,
|
||||||
noiseRecords
|
noiseRecords
|
||||||
),
|
),
|
||||||
"SampleJoiseMap"
|
"SampleJoiseMap"
|
||||||
|
|||||||
Reference in New Issue
Block a user