diff --git a/ReadMe.md b/ReadMe.md index 3b1766e58..d755be75e 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -134,7 +134,7 @@ Support for macOS is a delicate topic. Let's say it works for now, but it is not Using IntelliJ IDEA for building or developing is strongly recommended. There you have features like build caching. If you run into errors, please ensure you have the latest version of it. -You might need to increase heap memory for the compiler (`File` -> `Settings` -> `Build, Execution and Compiler` -> `Compiler` -> `Shared build process heap size`). +You might need to increase heap memory for the compiler (`File` -> `Settings` -> `Build, Execution, Deployment` -> `Compiler` -> `Shared build process heap size`). Allow at least 1500 MBytes. ## Code mirrors diff --git a/src/main/java/de/bixilon/minosoft/data/world/World.kt b/src/main/java/de/bixilon/minosoft/data/world/World.kt index b7f51aee0..ccd498a7c 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/World.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/World.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger and contributors + * Copyright (C) 2020-2022 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -17,11 +17,9 @@ import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.kutil.array.ArrayUtil.cast import de.bixilon.kutil.collections.map.LockMap import de.bixilon.kutil.concurrent.lock.simple.SimpleLock -import de.bixilon.kutil.concurrent.pool.DefaultThreadPool import de.bixilon.kutil.concurrent.pool.ThreadPool -import de.bixilon.kutil.concurrent.pool.ThreadPoolRunnable import de.bixilon.kutil.concurrent.worker.TaskWorker -import de.bixilon.kutil.latch.CountUpAndDownLatch +import de.bixilon.kutil.concurrent.worker.tasks.Task import de.bixilon.kutil.watcher.DataWatcher.Companion.watched import de.bixilon.minosoft.data.Difficulties import de.bixilon.minosoft.data.entities.block.BlockEntity @@ -36,6 +34,7 @@ import de.bixilon.minosoft.data.world.biome.accessor.BiomeAccessor import de.bixilon.minosoft.data.world.biome.accessor.NoiseBiomeAccessor import de.bixilon.minosoft.data.world.border.WorldBorder import de.bixilon.minosoft.data.world.chunk.Chunk +import de.bixilon.minosoft.data.world.chunk.light.SectionLight import de.bixilon.minosoft.data.world.particle.AbstractParticleRenderer import de.bixilon.minosoft.data.world.particle.WorldParticleRenderer import de.bixilon.minosoft.data.world.positions.BlockPosition @@ -281,18 +280,17 @@ class World( val simulationDistance = view.simulationDistance val cameraPosition = connection.player.positionInfo.chunkPosition chunks.lock.acquire() - val latch = CountUpAndDownLatch(chunks.unsafe.size) + val worker = TaskWorker() for ((chunkPosition, chunk) in chunks.unsafe) { // ToDo: Cache (improve performance) if (!chunkPosition.isInViewDistance(simulationDistance, cameraPosition)) { - latch.dec() continue } - DefaultThreadPool += ThreadPoolRunnable(priority = ThreadPool.HIGH) { chunk.tick(connection, chunkPosition); latch.dec() } + worker += Task(priority = ThreadPool.HIGH) { chunk.tick(connection, chunkPosition) } } chunks.lock.release() + worker.work() border.tick() - latch.await() } fun randomTick() { @@ -406,7 +404,7 @@ class World( fun getBrightness(position: BlockPosition): Float { val light = getLight(position) - val level = maxOf(light and 0x0F, light and 0xF0 shr 4) + val level = maxOf(light and SectionLight.BLOCK_LIGHT_MASK, light and SectionLight.SKY_LIGHT_MASK shr 4) return dimension?.lightLevels?.get(level) ?: 0.0f } diff --git a/src/main/java/de/bixilon/minosoft/data/world/WorldEntities.kt b/src/main/java/de/bixilon/minosoft/data/world/WorldEntities.kt index 523cfcf95..539796f5e 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/WorldEntities.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/WorldEntities.kt @@ -15,10 +15,9 @@ package de.bixilon.minosoft.data.world import de.bixilon.kotlinglm.vec3.Vec3d import de.bixilon.kutil.concurrent.lock.simple.SimpleLock -import de.bixilon.kutil.concurrent.pool.DefaultThreadPool import de.bixilon.kutil.concurrent.pool.ThreadPool -import de.bixilon.kutil.concurrent.pool.ThreadPoolRunnable -import de.bixilon.kutil.latch.CountUpAndDownLatch +import de.bixilon.kutil.concurrent.worker.TaskWorker +import de.bixilon.kutil.concurrent.worker.tasks.Task import de.bixilon.minosoft.data.abilities.Gamemodes import de.bixilon.minosoft.data.entities.entities.Entity import de.bixilon.minosoft.data.entities.entities.player.PlayerEntity @@ -185,12 +184,12 @@ class WorldEntities : Iterable { fun tick() { lock.acquire() - val latch = CountUpAndDownLatch(entities.size) + val worker = TaskWorker() for (entity in entities) { - DefaultThreadPool += ThreadPoolRunnable(priority = ThreadPool.Priorities.HIGH) { entity.tryTick(); latch.dec() } + worker += Task(priority = ThreadPool.Priorities.HIGH) { entity.tryTick() } } lock.release() - latch.await() + worker.work() } companion object { diff --git a/src/main/java/de/bixilon/minosoft/data/world/weather/WorldWeather.kt b/src/main/java/de/bixilon/minosoft/data/world/weather/WorldWeather.kt index 07b21d1f2..bc8a62641 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/weather/WorldWeather.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/weather/WorldWeather.kt @@ -14,7 +14,6 @@ package de.bixilon.minosoft.data.world.weather class WorldWeather { - var raining = false var rainGradient = 0.0f var thunderGradient = 0.0f diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/renderer/RendererManager.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/renderer/RendererManager.kt index b61e0a44b..f96c20f4a 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/renderer/RendererManager.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/renderer/RendererManager.kt @@ -15,9 +15,9 @@ package de.bixilon.minosoft.gui.rendering.renderer.renderer import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.collections.CollectionUtil.synchronizedMapOf -import de.bixilon.kutil.concurrent.pool.DefaultThreadPool import de.bixilon.kutil.concurrent.pool.ThreadPool -import de.bixilon.kutil.concurrent.pool.ThreadPoolRunnable +import de.bixilon.kutil.concurrent.worker.TaskWorker +import de.bixilon.kutil.concurrent.worker.tasks.Task import de.bixilon.kutil.latch.CountUpAndDownLatch import de.bixilon.minosoft.config.profile.ConnectionProfiles import de.bixilon.minosoft.data.registries.ResourceLocation @@ -64,38 +64,34 @@ class RendererManager( } fun init(latch: CountUpAndDownLatch) { - val inner = CountUpAndDownLatch(1, latch) + val inner = CountUpAndDownLatch(0, latch) + var worker = TaskWorker() for (renderer in renderers.values) { - inner.inc() - DefaultThreadPool += { renderer.preAsyncInit(inner); inner.dec() } + worker += { renderer.preAsyncInit(inner) } } - inner.dec() - inner.await() + worker.work(inner) for (renderer in renderers.values) { - renderer.init(latch) + renderer.init(inner) } - val inner2 = CountUpAndDownLatch(1, latch) + worker = TaskWorker() for (renderer in renderers.values) { - inner2.inc() - DefaultThreadPool += { renderer.asyncInit(inner2); inner2.dec() } + worker += { renderer.asyncInit(inner) } } - inner2.dec() - inner2.await() + worker.work(inner) } fun postInit(latch: CountUpAndDownLatch) { for (renderer in renderers.values) { renderer.postInit(latch) } - val inner = CountUpAndDownLatch(1, latch) + val inner = CountUpAndDownLatch(0, latch) + val worker = TaskWorker() for (renderer in renderers.values) { - inner.inc() - DefaultThreadPool += { renderer.postAsyncInit(inner); inner.dec() } + worker += { renderer.postAsyncInit(inner) } } - inner.dec() - inner.await() + worker.work(inner) } private fun renderNormal(rendererList: Collection) { @@ -123,16 +119,15 @@ class RendererManager( renderer.prePrepareDraw() } - val latch = CountUpAndDownLatch(1) + val latch = CountUpAndDownLatch(0) + val worker = TaskWorker() for (renderer in rendererList) { if (renderer !is AsyncRenderer) { continue } - latch.inc() - DefaultThreadPool += ThreadPoolRunnable(priority = ThreadPool.HIGHER) { renderer.prepareDrawAsync(); latch.dec() } + worker += Task(priority = ThreadPool.HIGHER) { renderer.prepareDrawAsync() } } - latch.dec() - latch.await() + worker.work(latch) for (renderer in rendererList) { renderer.postPrepareDraw()