mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-07 20:31:51 +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(
|
||||
i,
|
||||
ThreadActorUpdate(
|
||||
((actors / CORES) * i).toInt(),
|
||||
((actors / CORES) * i.plus(1)).toInt() - 1,
|
||||
actors.div(Terrarum.THREADS).times(i).roundInt(),
|
||||
actors.div(Terrarum.THREADS).times(i.plus(1)).roundInt() - 1,
|
||||
gc, delta
|
||||
),
|
||||
"ActorUpdate"
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.sudoplay.joise.Joise
|
||||
import com.sudoplay.joise.module.*
|
||||
import net.torvald.terrarum.Terrarum.Companion.STATE_ID_TOOL_NOISEGEN
|
||||
import net.torvald.terrarum.concurrent.ThreadPool
|
||||
import net.torvald.terrarum.gameactors.roundInt
|
||||
import org.newdawn.slick.Color
|
||||
import org.newdawn.slick.GameContainer
|
||||
import org.newdawn.slick.Graphics
|
||||
@@ -25,10 +26,8 @@ class StateNoiseTexGen : BasicGameState() {
|
||||
}
|
||||
override fun init(p0: GameContainer?, p1: StateBasedGame?) {
|
||||
generateNoiseImage()
|
||||
|
||||
println("Press SPACE to generate new noise")
|
||||
}
|
||||
|
||||
|
||||
private fun noiseRidged(): Joise {
|
||||
val ridged = ModuleFractal()
|
||||
ridged.setType(ModuleFractal.FractalType.RIDGEMULTI)
|
||||
@@ -59,6 +58,21 @@ class StateNoiseTexGen : BasicGameState() {
|
||||
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 {
|
||||
val gradval = ModuleBasisFunction()
|
||||
gradval.seed = Random().nextLong()
|
||||
@@ -103,7 +117,7 @@ class StateNoiseTexGen : BasicGameState() {
|
||||
}
|
||||
|
||||
fun generateNoiseImage() {
|
||||
val noiseModule = noiseSmokyFractal() // change noise function here
|
||||
val noiseModule = noiseBillowFractal() // change noise function here
|
||||
|
||||
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(
|
||||
i,
|
||||
ThreadRunNoiseSampling(
|
||||
((imagesize / Terrarum.CORES) * i),
|
||||
((imagesize / Terrarum.CORES) * i.plus(1)) - 1,
|
||||
imagesize.toFloat().div(Terrarum.THREADS).times(i).roundInt(),
|
||||
imagesize.toFloat().div(Terrarum.THREADS).times(i.plus(1)).roundInt() - 1,
|
||||
noiseModule
|
||||
),
|
||||
"SampleJoiseMap"
|
||||
@@ -135,6 +149,10 @@ class StateNoiseTexGen : BasicGameState() {
|
||||
override fun getID() = STATE_ID_TOOL_NOISEGEN
|
||||
|
||||
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 (sx in 0..imagesize - 1) {
|
||||
val noise = noiseMap[sy][sx]
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.sudoplay.joise.module.*
|
||||
import net.torvald.terrarum.Terrarum
|
||||
import net.torvald.terrarum.concurrent.ThreadPool
|
||||
import net.torvald.terrarum.gameactors.ThreadActorUpdate
|
||||
import net.torvald.terrarum.gameactors.roundInt
|
||||
import java.util.*
|
||||
|
||||
object WorldGenerator {
|
||||
@@ -687,12 +688,12 @@ object WorldGenerator {
|
||||
private fun processNoiseLayers(noiseRecords: Array<TaggedJoise>) {
|
||||
if (Terrarum.MULTITHREAD) {
|
||||
// set up indices
|
||||
for (i in 0..Terrarum.CORES - 1) {
|
||||
for (i in 0..Terrarum.THREADS - 1) {
|
||||
ThreadPool.map(
|
||||
i,
|
||||
ThreadProcessNoiseLayers(
|
||||
((HEIGHT / Terrarum.CORES) * i),
|
||||
((HEIGHT / Terrarum.CORES) * i.plus(1)) - 1,
|
||||
HEIGHT.toFloat().div(Terrarum.THREADS).times(i).roundInt(),
|
||||
HEIGHT.toFloat().div(Terrarum.THREADS).times(i.plus(1)).roundInt() - 1,
|
||||
noiseRecords
|
||||
),
|
||||
"SampleJoiseMap"
|
||||
|
||||
Reference in New Issue
Block a user