diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/RenderWindow.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/RenderWindow.kt index cb9a738ff..210c56aac 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/RenderWindow.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/RenderWindow.kt @@ -30,8 +30,8 @@ import de.bixilon.minosoft.gui.rendering.input.key.DefaultKeyCombinations import de.bixilon.minosoft.gui.rendering.input.key.RenderWindowInputHandler import de.bixilon.minosoft.gui.rendering.modding.events.* import de.bixilon.minosoft.gui.rendering.models.ModelLoader -import de.bixilon.minosoft.gui.rendering.renderer.RendererManager -import de.bixilon.minosoft.gui.rendering.renderer.RendererManager.Companion.registerDefault +import de.bixilon.minosoft.gui.rendering.renderer.renderer.RendererManager +import de.bixilon.minosoft.gui.rendering.renderer.renderer.RendererManager.Companion.registerDefault import de.bixilon.minosoft.gui.rendering.skeletal.SkeletalManager import de.bixilon.minosoft.gui.rendering.stats.AbstractRenderStats import de.bixilon.minosoft.gui.rendering.stats.ExperimentalRenderStats diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/entity/EntityRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/entity/EntityRenderer.kt index 17329e7c2..3a72283f6 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/entity/EntityRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/entity/EntityRenderer.kt @@ -29,8 +29,8 @@ import de.bixilon.minosoft.gui.rendering.RenderWindow import de.bixilon.minosoft.gui.rendering.entity.models.EntityModel import de.bixilon.minosoft.gui.rendering.entity.models.minecraft.player.LocalPlayerModel import de.bixilon.minosoft.gui.rendering.modding.events.VisibilityGraphChangeEvent -import de.bixilon.minosoft.gui.rendering.renderer.Renderer -import de.bixilon.minosoft.gui.rendering.renderer.RendererBuilder +import de.bixilon.minosoft.gui.rendering.renderer.renderer.Renderer +import de.bixilon.minosoft.gui.rendering.renderer.renderer.RendererBuilder import de.bixilon.minosoft.gui.rendering.system.base.RenderSystem import de.bixilon.minosoft.gui.rendering.system.base.phases.OpaqueDrawable import de.bixilon.minosoft.modding.event.events.EntityDestroyEvent diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/entity/ModelUpdater.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/entity/ModelUpdater.kt index 4f865bf97..eafeb15e7 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/entity/ModelUpdater.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/entity/ModelUpdater.kt @@ -13,7 +13,7 @@ package de.bixilon.minosoft.gui.rendering.entity -import de.bixilon.minosoft.gui.rendering.renderer.Drawable +import de.bixilon.minosoft.gui.rendering.renderer.drawable.Drawable interface ModelUpdater : Drawable { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/FramebufferManager.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/FramebufferManager.kt index 513ea9003..517d445d4 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/FramebufferManager.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/FramebufferManager.kt @@ -17,7 +17,7 @@ import de.bixilon.minosoft.gui.rendering.RenderWindow import de.bixilon.minosoft.gui.rendering.framebuffer.gui.GUIFramebuffer import de.bixilon.minosoft.gui.rendering.framebuffer.world.WorldFramebuffer import de.bixilon.minosoft.gui.rendering.modding.events.ResizeWindowEvent -import de.bixilon.minosoft.gui.rendering.renderer.Drawable +import de.bixilon.minosoft.gui.rendering.renderer.drawable.Drawable import de.bixilon.minosoft.gui.rendering.system.base.PolygonModes import de.bixilon.minosoft.modding.event.invoker.CallbackEventInvoker diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/IntegratedFramebuffer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/IntegratedFramebuffer.kt index 704876f29..d4b10f2eb 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/IntegratedFramebuffer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/IntegratedFramebuffer.kt @@ -14,7 +14,7 @@ package de.bixilon.minosoft.gui.rendering.framebuffer import de.bixilon.minosoft.gui.rendering.RenderWindow -import de.bixilon.minosoft.gui.rendering.renderer.Drawable +import de.bixilon.minosoft.gui.rendering.renderer.drawable.Drawable import de.bixilon.minosoft.gui.rendering.system.base.BlendingFunctions import de.bixilon.minosoft.gui.rendering.system.base.IntegratedBufferTypes import de.bixilon.minosoft.gui.rendering.system.base.PolygonModes diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/world/overlay/Overlay.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/world/overlay/Overlay.kt index ba8b00409..2e42b3a41 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/world/overlay/Overlay.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/world/overlay/Overlay.kt @@ -13,7 +13,7 @@ package de.bixilon.minosoft.gui.rendering.framebuffer.world.overlay -import de.bixilon.minosoft.gui.rendering.renderer.Drawable +import de.bixilon.minosoft.gui.rendering.renderer.drawable.Drawable interface Overlay : Drawable { val render: Boolean diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/world/overlay/OverlayManager.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/world/overlay/OverlayManager.kt index ad36bc6b4..99c43f68b 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/world/overlay/OverlayManager.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/world/overlay/OverlayManager.kt @@ -15,7 +15,7 @@ package de.bixilon.minosoft.gui.rendering.framebuffer.world.overlay import de.bixilon.minosoft.gui.rendering.RenderWindow import de.bixilon.minosoft.gui.rendering.framebuffer.world.overlay.overlays.DefaultOverlays -import de.bixilon.minosoft.gui.rendering.renderer.Drawable +import de.bixilon.minosoft.gui.rendering.renderer.drawable.Drawable class OverlayManager( private val renderWindow: RenderWindow, diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/GUIElementDrawer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/GUIElementDrawer.kt index 09c7b83d0..b7e057f39 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/GUIElementDrawer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/GUIElementDrawer.kt @@ -14,42 +14,71 @@ package de.bixilon.minosoft.gui.rendering.gui 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.time.TimeUtil import de.bixilon.minosoft.gui.rendering.gui.elements.Pollable import de.bixilon.minosoft.gui.rendering.gui.gui.LayoutedGUIElement -import de.bixilon.minosoft.gui.rendering.renderer.Drawable +import de.bixilon.minosoft.gui.rendering.renderer.drawable.AsyncDrawable +import de.bixilon.minosoft.gui.rendering.renderer.drawable.Drawable import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition interface GUIElementDrawer { val guiRenderer: GUIRenderer var lastTickTime: Long - fun drawElements(elements: Collection) { + fun tickElements(elements: Collection) { val time = TimeUtil.millis - val tickLatch = CountUpAndDownLatch(1) + val latch = CountUpAndDownLatch(1) if (time - lastTickTime > ProtocolDefinition.TICK_TIME) { for (element in elements) { if (!element.enabled) { continue } - tickLatch.inc() - DefaultThreadPool += { + latch.inc() + DefaultThreadPool += ThreadPoolRunnable(priority = ThreadPool.HIGH) { element.tick() if (element is Pollable) { if (element.poll()) { element.apply() } } - tickLatch.dec() + latch.dec() } } lastTickTime = time } - tickLatch.dec() - tickLatch.await() + latch.dec() + latch.await() + } + fun prepareElements(elements: Collection) { + val latch = CountUpAndDownLatch(1) + for (element in elements) { + if (!element.enabled) { + continue + } + if (element !is AsyncDrawable) { + continue + } + if (element.skipDraw) { + continue + } + element.drawAsync() + + if (element is LayoutedGUIElement<*>) { + latch.inc() + element.prepare() + DefaultThreadPool += ThreadPoolRunnable(priority = ThreadPool.HIGH) { element.prepareAsync(); latch.dec() } + } + } + latch.dec() + latch.await() + } + + fun drawElements(elements: Collection) { val latch = CountUpAndDownLatch(1) for (element in elements) { if (!element.enabled) { @@ -62,12 +91,6 @@ interface GUIElementDrawer { continue } element.draw() - - if (element is LayoutedGUIElement<*>) { - latch.inc() - element.prepare() - DefaultThreadPool += { element.prepareAsync(); latch.dec() } - } } latch.dec() latch.await() diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/GUIRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/GUIRenderer.kt index 9af8aa55f..8bb03cc11 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/GUIRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/GUIRenderer.kt @@ -30,8 +30,8 @@ import de.bixilon.minosoft.gui.rendering.gui.hud.HUDManager import de.bixilon.minosoft.gui.rendering.gui.input.ModifierKeys import de.bixilon.minosoft.gui.rendering.input.InputHandler import de.bixilon.minosoft.gui.rendering.modding.events.ResizeWindowEvent -import de.bixilon.minosoft.gui.rendering.renderer.Renderer -import de.bixilon.minosoft.gui.rendering.renderer.RendererBuilder +import de.bixilon.minosoft.gui.rendering.renderer.renderer.AsyncRenderer +import de.bixilon.minosoft.gui.rendering.renderer.renderer.RendererBuilder import de.bixilon.minosoft.gui.rendering.system.base.BlendingFunctions import de.bixilon.minosoft.gui.rendering.system.base.PolygonModes import de.bixilon.minosoft.gui.rendering.system.base.buffer.frame.Framebuffer @@ -45,7 +45,7 @@ import de.bixilon.minosoft.util.KUtil.toResourceLocation class GUIRenderer( val connection: PlayConnection, override val renderWindow: RenderWindow, -) : Renderer, InputHandler, OtherDrawable { +) : AsyncRenderer, InputHandler, OtherDrawable { private val profile = connection.profiles.gui override val renderSystem = renderWindow.renderSystem var scaledSize: Vec2i by watched(renderWindow.window.size) @@ -131,6 +131,13 @@ class GUIRenderer( return popper.onScroll(scrollOffset) || dragged.onScroll(scrollOffset) || gui.onScroll(scrollOffset) } + override fun prepareDrawAsync() { + hud.drawAsync() + gui.drawAsync() + popper.drawAsync() + dragged.drawAsync() + } + override fun drawOther() { hud.draw() gui.draw() diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/GUIManager.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/GUIManager.kt index d8d497c4b..bf9d8e15a 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/GUIManager.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/GUIManager.kt @@ -24,7 +24,6 @@ import de.bixilon.minosoft.config.key.KeyActions import de.bixilon.minosoft.config.key.KeyBinding import de.bixilon.minosoft.config.key.KeyCodes import de.bixilon.minosoft.gui.rendering.gui.GUIElement -import de.bixilon.minosoft.gui.rendering.gui.GUIElementDrawer import de.bixilon.minosoft.gui.rendering.gui.GUIRenderer import de.bixilon.minosoft.gui.rendering.gui.elements.Element import de.bixilon.minosoft.gui.rendering.gui.elements.LayoutedElement @@ -39,20 +38,23 @@ import de.bixilon.minosoft.gui.rendering.gui.hud.Initializable import de.bixilon.minosoft.gui.rendering.gui.hud.elements.HUDBuilder import de.bixilon.minosoft.gui.rendering.gui.input.DraggableHandler import de.bixilon.minosoft.gui.rendering.input.InputHandler -import de.bixilon.minosoft.gui.rendering.renderer.Drawable +import de.bixilon.minosoft.gui.rendering.renderer.drawable.AsyncDrawable +import de.bixilon.minosoft.gui.rendering.renderer.drawable.Drawable import de.bixilon.minosoft.gui.rendering.system.window.KeyChangeTypes import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import de.bixilon.minosoft.util.KUtil.toResourceLocation class GUIManager( - override val guiRenderer: GUIRenderer, -) : Initializable, InputHandler, GUIElementDrawer, DraggableHandler { + private val guiRenderer: GUIRenderer, +) : Initializable, InputHandler, DraggableHandler, Drawable, AsyncDrawable { private val elementCache: MutableMap, GUIElement> = mutableMapOf() private var orderLock = SimpleLock() var elementOrder: MutableList = mutableListOf() private val renderWindow = guiRenderer.renderWindow internal var paused = false - override var lastTickTime: Long = -1L + private var lastTickTime: Long = -1L + + private var order: Collection = emptyList() override fun init() { for (element in elementCache.values) { @@ -104,10 +106,11 @@ class GUIManager( orderLock.release() } - fun draw() { + override fun drawAsync() { orderLock.acquire() - val order = elementOrder.reversed() + this.order = elementOrder.reversed() orderLock.release() + val time = TimeUtil.millis val tick = time - lastTickTime > ProtocolDefinition.TICK_TIME if (tick) { @@ -132,8 +135,8 @@ class GUIManager( lastTickTime = time } - if (element is Drawable && !element.skipDraw) { - element.draw() + if (element is AsyncDrawable && !element.skipDraw) { + element.drawAsync() } if (element is LayoutedGUIElement<*>) { element.prepare() @@ -143,7 +146,9 @@ class GUIManager( } latch.dec() latch.await() + } + override fun draw() { for ((index, element) in order.withIndex()) { if (!element.enabled) { continue @@ -151,6 +156,9 @@ class GUIManager( if (index != order.size - 1 && !element.activeWhenHidden) { continue } + if (element is Drawable && !element.skipDraw) { + element.draw() + } if (element is LayoutedGUIElement<*>) { element.postPrepare() } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/GUIMeshElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/GUIMeshElement.kt index 785ff7332..d39881f44 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/GUIMeshElement.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/GUIMeshElement.kt @@ -27,7 +27,9 @@ import de.bixilon.minosoft.gui.rendering.gui.input.mouse.MouseActions import de.bixilon.minosoft.gui.rendering.gui.input.mouse.MouseButtons import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIMesh import de.bixilon.minosoft.gui.rendering.input.count.MouseClickCounter -import de.bixilon.minosoft.gui.rendering.renderer.Drawable +import de.bixilon.minosoft.gui.rendering.renderer.drawable.AsyncDrawable +import de.bixilon.minosoft.gui.rendering.renderer.drawable.BaseDrawable +import de.bixilon.minosoft.gui.rendering.renderer.drawable.Drawable import de.bixilon.minosoft.gui.rendering.system.window.KeyChangeTypes import de.bixilon.minosoft.gui.rendering.util.mesh.Mesh import de.bixilon.minosoft.gui.rendering.util.vec.vec2.Vec2iUtil.EMPTY @@ -35,13 +37,13 @@ import de.bixilon.minosoft.util.collections.floats.DirectArrayFloatList open class GUIMeshElement( val element: T, -) : HUDElement, Drawable { +) : HUDElement, AsyncDrawable, Drawable { override val guiRenderer: GUIRenderer = element.guiRenderer override val renderWindow: RenderWindow = guiRenderer.renderWindow private val clickCounter = MouseClickCounter() var mesh: GUIMesh = GUIMesh(renderWindow, guiRenderer.matrix, DirectArrayFloatList(1000)) override val skipDraw: Boolean - get() = if (element is Drawable) element.skipDraw else false + get() = if (element is BaseDrawable) element.skipDraw else false protected var lastRevision = 0L protected var lastPosition: Vec2i? = null protected var lastDragPosition: Vec2i? = null @@ -114,6 +116,12 @@ open class GUIMeshElement( } } + override fun drawAsync() { + if (element is AsyncDrawable) { + element.drawAsync() + } + } + fun initMesh() { mesh.load() } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/dragged/DraggedManager.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/dragged/DraggedManager.kt index 7fb1bae10..204af441a 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/dragged/DraggedManager.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/dragged/DraggedManager.kt @@ -17,20 +17,21 @@ import de.bixilon.kotlinglm.vec2.Vec2d import de.bixilon.kotlinglm.vec2.Vec2i import de.bixilon.kutil.time.TimeUtil import de.bixilon.minosoft.config.key.KeyCodes -import de.bixilon.minosoft.gui.rendering.gui.GUIElementDrawer import de.bixilon.minosoft.gui.rendering.gui.GUIRenderer import de.bixilon.minosoft.gui.rendering.gui.hud.Initializable import de.bixilon.minosoft.gui.rendering.gui.input.mouse.MouseActions import de.bixilon.minosoft.gui.rendering.gui.input.mouse.MouseButtons import de.bixilon.minosoft.gui.rendering.input.InputHandler import de.bixilon.minosoft.gui.rendering.input.count.MouseClickCounter +import de.bixilon.minosoft.gui.rendering.renderer.drawable.AsyncDrawable +import de.bixilon.minosoft.gui.rendering.renderer.drawable.Drawable import de.bixilon.minosoft.gui.rendering.system.window.CursorModes import de.bixilon.minosoft.gui.rendering.system.window.KeyChangeTypes import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition class DraggedManager( - override val guiRenderer: GUIRenderer, -) : Initializable, InputHandler, GUIElementDrawer { + private val guiRenderer: GUIRenderer, +) : Initializable, InputHandler, AsyncDrawable, Drawable { private val clickCounter = MouseClickCounter() var element: DraggedGUIElement<*>? = null set(value) { @@ -50,7 +51,7 @@ class DraggedManager( } applyCursor() } - override var lastTickTime: Long = -1L + private var lastTickTime: Long = -1L override fun init() { } @@ -70,7 +71,7 @@ class DraggedManager( window.cursorMode = if (element == null) CursorModes.NORMAL else CursorModes.HIDDEN } - fun draw() { + override fun drawAsync() { val element = element ?: return val time = TimeUtil.millis val tick = time - lastTickTime > ProtocolDefinition.TICK_TIME @@ -91,10 +92,17 @@ class DraggedManager( } element.prepare() element.prepareAsync() + } + + override fun draw() { + val element = element ?: return + if (!element.enabled) { + return + } element.postPrepare() guiRenderer.setup() - if (!element.enabled || element.mesh.data.isEmpty) { + if (element.mesh.data.isEmpty) { return } element.mesh.draw() diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/popper/PopperManager.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/popper/PopperManager.kt index 05c7b7260..79bd12be4 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/popper/PopperManager.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/popper/PopperManager.kt @@ -19,18 +19,19 @@ import de.bixilon.kutil.concurrent.pool.DefaultThreadPool import de.bixilon.kutil.latch.CountUpAndDownLatch import de.bixilon.kutil.time.TimeUtil import de.bixilon.minosoft.config.key.KeyCodes -import de.bixilon.minosoft.gui.rendering.gui.GUIElementDrawer import de.bixilon.minosoft.gui.rendering.gui.GUIRenderer import de.bixilon.minosoft.gui.rendering.gui.hud.Initializable import de.bixilon.minosoft.gui.rendering.input.InputHandler +import de.bixilon.minosoft.gui.rendering.renderer.drawable.AsyncDrawable +import de.bixilon.minosoft.gui.rendering.renderer.drawable.Drawable import de.bixilon.minosoft.gui.rendering.system.window.KeyChangeTypes import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition class PopperManager( - override val guiRenderer: GUIRenderer, -) : Initializable, InputHandler, GUIElementDrawer { + private val guiRenderer: GUIRenderer, +) : Initializable, InputHandler, AsyncDrawable, Drawable { private val poppers: MutableList = mutableListOf() - override var lastTickTime: Long = -1L + private var lastTickTime: Long = -1L fun onMatrixChange() { @@ -39,7 +40,7 @@ class PopperManager( } } - fun draw() { + override fun drawAsync() { val toRemove: MutableSet = mutableSetOf() val time = TimeUtil.millis val tick = time - lastTickTime > ProtocolDefinition.TICK_TIME @@ -59,7 +60,7 @@ class PopperManager( } if (!popper.skipDraw) { - popper.draw() + popper.drawAsync() } latch.inc() popper.prepare() @@ -69,8 +70,13 @@ class PopperManager( latch.await() poppers -= toRemove + } + override fun draw() { for (popper in poppers) { + if (!popper.skipDraw) { + popper.draw() + } popper.postPrepare() guiRenderer.setup() diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/HUDManager.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/HUDManager.kt index 08062314a..e4910b8de 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/HUDManager.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/HUDManager.kt @@ -37,19 +37,22 @@ import de.bixilon.minosoft.gui.rendering.gui.hud.elements.other.PerformanceHUDEl import de.bixilon.minosoft.gui.rendering.gui.hud.elements.scoreboard.ScoreboardSideElement import de.bixilon.minosoft.gui.rendering.gui.hud.elements.tab.TabListElement import de.bixilon.minosoft.gui.rendering.gui.hud.elements.title.TitleElement +import de.bixilon.minosoft.gui.rendering.renderer.drawable.AsyncDrawable +import de.bixilon.minosoft.gui.rendering.renderer.drawable.Drawable import de.bixilon.minosoft.util.KUtil.toResourceLocation class HUDManager( override val guiRenderer: GUIRenderer, -) : GUIElementDrawer, Initializable { +) : GUIElementDrawer, Initializable, AsyncDrawable, Drawable { val renderWindow = guiRenderer.renderWindow - private val hudElements: LockMap = lockMapOf() override var lastTickTime = 0L var enabled: Boolean = true + private var values: Collection = emptyList() + fun registerElement(hudBuilder: HUDBuilder<*>) { val hudElement = hudBuilder.build(guiRenderer) hudElements[hudBuilder.RESOURCE_LOCATION] = hudElement @@ -105,10 +108,16 @@ class HUDManager( } } - fun draw() { + override fun drawAsync() { hudElements.lock.acquire() - drawElements(hudElements.values) + this.values = hudElements.values hudElements.lock.release() + tickElements(values) + prepareElements(values) + } + + override fun draw() { + drawElements(values) } operator fun get(hudBuilder: HUDBuilder): T? { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/CustomHUDElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/CustomHUDElement.kt index d9fcabe89..28d82b162 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/CustomHUDElement.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/CustomHUDElement.kt @@ -16,7 +16,7 @@ package de.bixilon.minosoft.gui.rendering.gui.hud.elements import de.bixilon.minosoft.gui.rendering.RenderWindow import de.bixilon.minosoft.gui.rendering.gui.GUIRenderer import de.bixilon.minosoft.gui.rendering.gui.hud.HUDElement -import de.bixilon.minosoft.gui.rendering.renderer.Drawable +import de.bixilon.minosoft.gui.rendering.renderer.drawable.Drawable abstract class CustomHUDElement(final override val guiRenderer: GUIRenderer) : HUDElement, Drawable { override val renderWindow: RenderWindow = guiRenderer.renderWindow diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/chat/AbstractChatElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/chat/AbstractChatElement.kt index 2a70ad88b..6276cbccd 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/chat/AbstractChatElement.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/chat/AbstractChatElement.kt @@ -22,7 +22,7 @@ import de.bixilon.minosoft.gui.rendering.gui.gui.AbstractLayout import de.bixilon.minosoft.gui.rendering.gui.hud.Initializable import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexConsumer import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexOptions -import de.bixilon.minosoft.gui.rendering.renderer.Drawable +import de.bixilon.minosoft.gui.rendering.renderer.drawable.Drawable abstract class AbstractChatElement(guiRenderer: GUIRenderer) : Element(guiRenderer), Initializable, Drawable, AbstractLayout { protected val connection = renderWindow.connection diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/chat/ChatElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/chat/ChatElement.kt index 9ec028206..3e8b483db 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/chat/ChatElement.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/chat/ChatElement.kt @@ -54,7 +54,7 @@ class ChatElement(guiRenderer: GUIRenderer) : AbstractChatElement(guiRenderer), } override var skipDraw: Boolean // skips hud draw and draws it in gui stage - get() = chatProfile.hidden || active + get() = active || chatProfile.hidden set(value) { chatProfile.hidden = !value } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/other/BreakProgressHUDElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/other/BreakProgressHUDElement.kt index a2d432044..df92c6d72 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/other/BreakProgressHUDElement.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/other/BreakProgressHUDElement.kt @@ -26,10 +26,10 @@ import de.bixilon.minosoft.gui.rendering.gui.gui.LayoutedGUIElement import de.bixilon.minosoft.gui.rendering.gui.hud.elements.HUDBuilder import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexConsumer import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexOptions -import de.bixilon.minosoft.gui.rendering.renderer.Drawable +import de.bixilon.minosoft.gui.rendering.renderer.drawable.AsyncDrawable import de.bixilon.minosoft.util.KUtil.toResourceLocation -class BreakProgressHUDElement(guiRenderer: GUIRenderer) : Element(guiRenderer), LayoutedElement, Drawable { +class BreakProgressHUDElement(guiRenderer: GUIRenderer) : Element(guiRenderer), LayoutedElement, AsyncDrawable { private val textElement = TextElement(guiRenderer, "").apply { parent = this@BreakProgressHUDElement } private val breakInteractionHandler = guiRenderer.renderWindow.inputHandler.interactionManager.`break` private var previousProgress = -1.0 @@ -40,7 +40,7 @@ class BreakProgressHUDElement(guiRenderer: GUIRenderer) : Element(guiRenderer), private var percent = -1 - override fun draw() { + override fun drawAsync() { val breakProgress = breakInteractionHandler.breakProgress if (this.previousProgress == breakProgress) { return diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/scoreboard/ScoreboardSideElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/scoreboard/ScoreboardSideElement.kt index 2bbf0d99e..e8b4bc8f1 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/scoreboard/ScoreboardSideElement.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/scoreboard/ScoreboardSideElement.kt @@ -35,14 +35,14 @@ import de.bixilon.minosoft.gui.rendering.gui.hud.Initializable import de.bixilon.minosoft.gui.rendering.gui.hud.elements.HUDBuilder import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexConsumer import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexOptions -import de.bixilon.minosoft.gui.rendering.renderer.Drawable +import de.bixilon.minosoft.gui.rendering.renderer.drawable.AsyncDrawable import de.bixilon.minosoft.gui.rendering.util.vec.vec2.Vec2iUtil.EMPTY import de.bixilon.minosoft.modding.event.events.scoreboard.* import de.bixilon.minosoft.modding.event.events.scoreboard.team.TeamUpdateEvent import de.bixilon.minosoft.modding.event.invoker.CallbackEventInvoker import de.bixilon.minosoft.util.KUtil.toResourceLocation -class ScoreboardSideElement(guiRenderer: GUIRenderer) : Element(guiRenderer), LayoutedElement, Initializable, Drawable { +class ScoreboardSideElement(guiRenderer: GUIRenderer) : Element(guiRenderer), LayoutedElement, Initializable, AsyncDrawable { private val backgroundElement = ColorElement(guiRenderer, size = Vec2i.EMPTY, color = RenderConstants.TEXT_BACKGROUND_COLOR) private val nameBackgroundElement = ColorElement(guiRenderer, size = Vec2i.EMPTY, color = RenderConstants.TEXT_BACKGROUND_COLOR) private val nameElement = TextElement(guiRenderer, "", background = false, parent = this) @@ -205,7 +205,7 @@ class ScoreboardSideElement(guiRenderer: GUIRenderer) : Element(guiRenderer), La }) } - override fun draw() { + override fun drawAsync() { // check if content was changed, and we need to re-prepare before drawing if (!cacheUpToDate) { recalculateSize() diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/tab/TabListElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/tab/TabListElement.kt index 529997fab..b68d82b6e 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/tab/TabListElement.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/tab/TabListElement.kt @@ -35,7 +35,7 @@ import de.bixilon.minosoft.gui.rendering.gui.hud.Initializable import de.bixilon.minosoft.gui.rendering.gui.hud.elements.HUDBuilder import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexConsumer import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexOptions -import de.bixilon.minosoft.gui.rendering.renderer.Drawable +import de.bixilon.minosoft.gui.rendering.renderer.drawable.AsyncDrawable import de.bixilon.minosoft.gui.rendering.util.vec.vec2.Vec2iUtil.EMPTY import de.bixilon.minosoft.modding.event.events.TabListEntryChangeEvent import de.bixilon.minosoft.modding.event.events.TabListInfoChangeEvent @@ -44,7 +44,7 @@ import de.bixilon.minosoft.util.KUtil.toResourceLocation import java.util.* import java.util.concurrent.locks.ReentrantLock -class TabListElement(guiRenderer: GUIRenderer) : Element(guiRenderer), LayoutedElement, Initializable, Drawable { +class TabListElement(guiRenderer: GUIRenderer) : Element(guiRenderer), LayoutedElement, Initializable, AsyncDrawable { val header = TextElement(guiRenderer, "", background = false, fontAlignment = HorizontalAlignments.CENTER, parent = this) val footer = TextElement(guiRenderer, "", background = false, fontAlignment = HorizontalAlignments.CENTER, parent = this) @@ -239,7 +239,7 @@ class TabListElement(guiRenderer: GUIRenderer) : Element(guiRenderer), LayoutedE } - override fun draw() { + override fun drawAsync() { // check if content was changed, and we need to re-prepare before drawing if (needsApply) { forceApply() diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/ParticleRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/ParticleRenderer.kt index 15cc77123..aff3352ba 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/ParticleRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/ParticleRenderer.kt @@ -28,8 +28,8 @@ import de.bixilon.minosoft.gui.rendering.RenderConstants import de.bixilon.minosoft.gui.rendering.RenderWindow import de.bixilon.minosoft.gui.rendering.modding.events.CameraMatrixChangeEvent import de.bixilon.minosoft.gui.rendering.particle.types.Particle -import de.bixilon.minosoft.gui.rendering.renderer.AsyncRenderer -import de.bixilon.minosoft.gui.rendering.renderer.RendererBuilder +import de.bixilon.minosoft.gui.rendering.renderer.renderer.AsyncRenderer +import de.bixilon.minosoft.gui.rendering.renderer.renderer.RendererBuilder import de.bixilon.minosoft.gui.rendering.system.base.RenderSystem import de.bixilon.minosoft.gui.rendering.system.base.phases.SkipAll import de.bixilon.minosoft.gui.rendering.system.base.phases.TranslucentDrawable diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/MeshSwapper.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/MeshSwapper.kt index bb55dadb7..0e5c98ccb 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/MeshSwapper.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/MeshSwapper.kt @@ -13,6 +13,7 @@ package de.bixilon.minosoft.gui.rendering.renderer +import de.bixilon.minosoft.gui.rendering.renderer.renderer.Renderer import de.bixilon.minosoft.gui.rendering.util.mesh.LineMesh import de.bixilon.minosoft.gui.rendering.util.mesh.Mesh diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/drawable/AsyncDrawable.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/drawable/AsyncDrawable.kt new file mode 100644 index 000000000..6613c1e90 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/drawable/AsyncDrawable.kt @@ -0,0 +1,26 @@ +/* + * Minosoft + * 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. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.gui.rendering.renderer.drawable + +interface AsyncDrawable : DeltaAsyncDrawable { + + /** + * Functions gets called every frame + */ + fun drawAsync() {} + + override fun drawAsync(millis: Long) { + drawAsync() + } +} diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/drawable/BaseDrawable.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/drawable/BaseDrawable.kt new file mode 100644 index 000000000..faf564e39 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/drawable/BaseDrawable.kt @@ -0,0 +1,19 @@ +/* + * Minosoft + * 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. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.gui.rendering.renderer.drawable + +interface BaseDrawable { + val skipDraw: Boolean + get() = false +} diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/drawable/DeltaAsyncDrawable.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/drawable/DeltaAsyncDrawable.kt new file mode 100644 index 000000000..8cd515662 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/drawable/DeltaAsyncDrawable.kt @@ -0,0 +1,22 @@ +/* + * Minosoft + * 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. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.gui.rendering.renderer.drawable + +interface DeltaAsyncDrawable : BaseDrawable { + + /** + * Functions gets called every frame + */ + fun drawAsync(millis: Long) = Unit +} diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/DeltaDrawable.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/drawable/DeltaDrawable.kt similarity index 87% rename from src/main/java/de/bixilon/minosoft/gui/rendering/renderer/DeltaDrawable.kt rename to src/main/java/de/bixilon/minosoft/gui/rendering/renderer/drawable/DeltaDrawable.kt index c1ea06ae1..cfcd0331d 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/DeltaDrawable.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/drawable/DeltaDrawable.kt @@ -11,12 +11,9 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.gui.rendering.renderer - -interface DeltaDrawable { - val skipDraw: Boolean - get() = false +package de.bixilon.minosoft.gui.rendering.renderer.drawable +interface DeltaDrawable : BaseDrawable { /** * Functions gets called every frame */ diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/Drawable.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/drawable/Drawable.kt similarity index 94% rename from src/main/java/de/bixilon/minosoft/gui/rendering/renderer/Drawable.kt rename to src/main/java/de/bixilon/minosoft/gui/rendering/renderer/drawable/Drawable.kt index 34dd3da73..83bc3076b 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/Drawable.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/drawable/Drawable.kt @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.gui.rendering.renderer +package de.bixilon.minosoft.gui.rendering.renderer.drawable interface Drawable : DeltaDrawable { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/AsyncRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/renderer/AsyncRenderer.kt similarity index 90% rename from src/main/java/de/bixilon/minosoft/gui/rendering/renderer/AsyncRenderer.kt rename to src/main/java/de/bixilon/minosoft/gui/rendering/renderer/renderer/AsyncRenderer.kt index 6503cc716..505ad9090 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/AsyncRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/renderer/AsyncRenderer.kt @@ -11,9 +11,9 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.gui.rendering.renderer +package de.bixilon.minosoft.gui.rendering.renderer.renderer interface AsyncRenderer : Renderer { - fun prepareDrawAsync() = Unit + fun prepareDrawAsync() } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/Renderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/renderer/Renderer.kt similarity index 96% rename from src/main/java/de/bixilon/minosoft/gui/rendering/renderer/Renderer.kt rename to src/main/java/de/bixilon/minosoft/gui/rendering/renderer/renderer/Renderer.kt index 304b55047..934397eda 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/Renderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/renderer/Renderer.kt @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.gui.rendering.renderer +package de.bixilon.minosoft.gui.rendering.renderer.renderer import de.bixilon.kutil.latch.CountUpAndDownLatch import de.bixilon.minosoft.gui.rendering.RenderWindow diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/RendererBuilder.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/renderer/RendererBuilder.kt similarity index 91% rename from src/main/java/de/bixilon/minosoft/gui/rendering/renderer/RendererBuilder.kt rename to src/main/java/de/bixilon/minosoft/gui/rendering/renderer/renderer/RendererBuilder.kt index 7dde2edf6..75d964f9b 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/RendererBuilder.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/renderer/RendererBuilder.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2021 Moritz Zwerger + * 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. * @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.gui.rendering.renderer +package de.bixilon.minosoft.gui.rendering.renderer.renderer import de.bixilon.minosoft.data.registries.CompanionResourceLocation import de.bixilon.minosoft.gui.rendering.RenderWindow diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/RendererManager.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/renderer/RendererManager.kt similarity index 99% rename from src/main/java/de/bixilon/minosoft/gui/rendering/renderer/RendererManager.kt rename to src/main/java/de/bixilon/minosoft/gui/rendering/renderer/renderer/RendererManager.kt index ba0f4637c..b61e0a44b 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/RendererManager.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/renderer/RendererManager.kt @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.gui.rendering.renderer +package de.bixilon.minosoft.gui.rendering.renderer.renderer import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.collections.CollectionUtil.synchronizedMapOf diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/instance/SkeletalInstance.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/instance/SkeletalInstance.kt index 14a710d09..476caaa46 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/instance/SkeletalInstance.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/instance/SkeletalInstance.kt @@ -19,7 +19,7 @@ import de.bixilon.kotlinglm.vec3.Vec3 import de.bixilon.kutil.time.TimeUtil import de.bixilon.minosoft.data.entities.EntityRotation import de.bixilon.minosoft.gui.rendering.RenderWindow -import de.bixilon.minosoft.gui.rendering.renderer.DeltaDrawable +import de.bixilon.minosoft.gui.rendering.renderer.drawable.DeltaDrawable import de.bixilon.minosoft.gui.rendering.skeletal.baked.BakedSkeletalModel import de.bixilon.minosoft.gui.rendering.skeletal.model.animations.SkeletalAnimation import de.bixilon.minosoft.gui.rendering.skeletal.model.outliner.SkeletalOutliner diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/model/animations/CustomSkeletalAnimation.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/model/animations/CustomSkeletalAnimation.kt index b824cb1c6..b42254439 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/model/animations/CustomSkeletalAnimation.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/model/animations/CustomSkeletalAnimation.kt @@ -13,7 +13,7 @@ package de.bixilon.minosoft.gui.rendering.skeletal.model.animations -import de.bixilon.minosoft.gui.rendering.renderer.DeltaDrawable +import de.bixilon.minosoft.gui.rendering.renderer.drawable.DeltaDrawable import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition abstract class CustomSkeletalAnimation(override val name: String) : SkeletalAnimation, DeltaDrawable { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/sky/SkyRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/sky/SkyRenderer.kt index 08c9828bb..aa4f1fd38 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/sky/SkyRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/sky/SkyRenderer.kt @@ -24,8 +24,8 @@ import de.bixilon.minosoft.data.text.formatting.color.RGBColor import de.bixilon.minosoft.gui.rendering.RenderConstants import de.bixilon.minosoft.gui.rendering.RenderWindow import de.bixilon.minosoft.gui.rendering.modding.events.CameraMatrixChangeEvent -import de.bixilon.minosoft.gui.rendering.renderer.Renderer -import de.bixilon.minosoft.gui.rendering.renderer.RendererBuilder +import de.bixilon.minosoft.gui.rendering.renderer.renderer.Renderer +import de.bixilon.minosoft.gui.rendering.renderer.renderer.RendererBuilder import de.bixilon.minosoft.gui.rendering.system.base.* import de.bixilon.minosoft.gui.rendering.system.base.buffer.frame.Framebuffer import de.bixilon.minosoft.gui.rendering.system.base.phases.PreDrawable diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/CustomDrawable.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/CustomDrawable.kt index 4e053228e..5b5dce61c 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/CustomDrawable.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/CustomDrawable.kt @@ -13,7 +13,7 @@ package de.bixilon.minosoft.gui.rendering.system.base.phases -import de.bixilon.minosoft.gui.rendering.renderer.Renderer +import de.bixilon.minosoft.gui.rendering.renderer.renderer.Renderer interface CustomDrawable : Renderer { val skipCustom: Boolean diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/OpaqueDrawable.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/OpaqueDrawable.kt index b246e810c..d15d7f21d 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/OpaqueDrawable.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/OpaqueDrawable.kt @@ -13,7 +13,7 @@ package de.bixilon.minosoft.gui.rendering.system.base.phases -import de.bixilon.minosoft.gui.rendering.renderer.Renderer +import de.bixilon.minosoft.gui.rendering.renderer.renderer.Renderer interface OpaqueDrawable : Renderer { val skipOpaque: Boolean diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/OtherDrawable.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/OtherDrawable.kt index a74d3f714..7df320f3f 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/OtherDrawable.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/OtherDrawable.kt @@ -13,7 +13,7 @@ package de.bixilon.minosoft.gui.rendering.system.base.phases -import de.bixilon.minosoft.gui.rendering.renderer.Renderer +import de.bixilon.minosoft.gui.rendering.renderer.renderer.Renderer interface OtherDrawable : Renderer { val skipOther: Boolean diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/PostDrawable.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/PostDrawable.kt index 8336f035b..96e771ae6 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/PostDrawable.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/PostDrawable.kt @@ -13,7 +13,7 @@ package de.bixilon.minosoft.gui.rendering.system.base.phases -import de.bixilon.minosoft.gui.rendering.renderer.Renderer +import de.bixilon.minosoft.gui.rendering.renderer.renderer.Renderer interface PostDrawable : Renderer { val skipPost: Boolean diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/PreDrawable.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/PreDrawable.kt index 29ed0434e..18c0616a5 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/PreDrawable.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/PreDrawable.kt @@ -13,7 +13,7 @@ package de.bixilon.minosoft.gui.rendering.system.base.phases -import de.bixilon.minosoft.gui.rendering.renderer.Renderer +import de.bixilon.minosoft.gui.rendering.renderer.renderer.Renderer interface PreDrawable : Renderer { val skipPre: Boolean diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/RenderPhases.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/RenderPhases.kt index f205b4534..b5e62d7cb 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/RenderPhases.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/RenderPhases.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2021 Moritz Zwerger + * 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. * @@ -14,7 +14,7 @@ package de.bixilon.minosoft.gui.rendering.system.base.phases import de.bixilon.kutil.cast.CastUtil.unsafeCast -import de.bixilon.minosoft.gui.rendering.renderer.Renderer +import de.bixilon.minosoft.gui.rendering.renderer.renderer.Renderer import kotlin.reflect.KClass class RenderPhases( diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/TranslucentDrawable.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/TranslucentDrawable.kt index 138262991..4e51c905f 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/TranslucentDrawable.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/TranslucentDrawable.kt @@ -13,7 +13,7 @@ package de.bixilon.minosoft.gui.rendering.system.base.phases -import de.bixilon.minosoft.gui.rendering.renderer.Renderer +import de.bixilon.minosoft.gui.rendering.renderer.renderer.Renderer import de.bixilon.minosoft.gui.rendering.system.base.BlendingFunctions interface TranslucentDrawable : Renderer { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/TransparentDrawable.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/TransparentDrawable.kt index 0d3214661..eb8369020 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/TransparentDrawable.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/TransparentDrawable.kt @@ -13,7 +13,7 @@ package de.bixilon.minosoft.gui.rendering.system.base.phases -import de.bixilon.minosoft.gui.rendering.renderer.Renderer +import de.bixilon.minosoft.gui.rendering.renderer.renderer.Renderer interface TransparentDrawable : Renderer { val skipTransparent: Boolean diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/shader/Shader.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/shader/Shader.kt index 52d748055..79ae4fc82 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/shader/Shader.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/shader/Shader.kt @@ -28,7 +28,7 @@ import kotlin.math.max interface Shader { val loaded: Boolean val renderWindow: RenderWindow - val uniforms: List + val uniforms: Set val defines: MutableMap val log: String diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/OpenGLShader.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/OpenGLShader.kt index 7455dec4b..6f3409288 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/OpenGLShader.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/OpenGLShader.kt @@ -41,7 +41,7 @@ class OpenGLShader( private set override val defines: MutableMap = mutableMapOf() private var shader = -1 - override var uniforms: MutableList = mutableListOf() + override var uniforms: MutableSet = mutableSetOf() private set private val uniformLocations: Object2IntOpenHashMap = Object2IntOpenHashMap() diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/world/WorldRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/world/WorldRenderer.kt index 463f80bec..981b744dc 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/world/WorldRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/world/WorldRenderer.kt @@ -38,8 +38,8 @@ import de.bixilon.minosoft.gui.rendering.RenderWindow import de.bixilon.minosoft.gui.rendering.RenderingStates import de.bixilon.minosoft.gui.rendering.modding.events.RenderingStateChangeEvent import de.bixilon.minosoft.gui.rendering.modding.events.VisibilityGraphChangeEvent -import de.bixilon.minosoft.gui.rendering.renderer.Renderer -import de.bixilon.minosoft.gui.rendering.renderer.RendererBuilder +import de.bixilon.minosoft.gui.rendering.renderer.renderer.Renderer +import de.bixilon.minosoft.gui.rendering.renderer.renderer.RendererBuilder import de.bixilon.minosoft.gui.rendering.system.base.DepthFunctions import de.bixilon.minosoft.gui.rendering.system.base.RenderSystem import de.bixilon.minosoft.gui.rendering.system.base.RenderingCapabilities diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/world/border/WorldBorderRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/world/border/WorldBorderRenderer.kt index e13443895..cdbf5efa2 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/world/border/WorldBorderRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/world/border/WorldBorderRenderer.kt @@ -21,8 +21,8 @@ import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.text.formatting.color.RGBColor.Companion.asColor import de.bixilon.minosoft.data.world.border.WorldBorderState import de.bixilon.minosoft.gui.rendering.RenderWindow -import de.bixilon.minosoft.gui.rendering.renderer.Renderer -import de.bixilon.minosoft.gui.rendering.renderer.RendererBuilder +import de.bixilon.minosoft.gui.rendering.renderer.renderer.Renderer +import de.bixilon.minosoft.gui.rendering.renderer.renderer.RendererBuilder import de.bixilon.minosoft.gui.rendering.system.base.BlendingFunctions import de.bixilon.minosoft.gui.rendering.system.base.RenderSystem import de.bixilon.minosoft.gui.rendering.system.base.phases.TranslucentDrawable diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/world/chunk/ChunkBorderRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/world/chunk/ChunkBorderRenderer.kt index 5bb05d929..acd46b24b 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/world/chunk/ChunkBorderRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/world/chunk/ChunkBorderRenderer.kt @@ -25,9 +25,9 @@ import de.bixilon.minosoft.data.registries.dimension.DimensionProperties import de.bixilon.minosoft.data.text.formatting.color.ChatColors import de.bixilon.minosoft.gui.rendering.RenderConstants import de.bixilon.minosoft.gui.rendering.RenderWindow -import de.bixilon.minosoft.gui.rendering.renderer.AsyncRenderer import de.bixilon.minosoft.gui.rendering.renderer.MeshSwapper -import de.bixilon.minosoft.gui.rendering.renderer.RendererBuilder +import de.bixilon.minosoft.gui.rendering.renderer.renderer.AsyncRenderer +import de.bixilon.minosoft.gui.rendering.renderer.renderer.RendererBuilder import de.bixilon.minosoft.gui.rendering.system.base.RenderSystem import de.bixilon.minosoft.gui.rendering.system.base.phases.OpaqueDrawable import de.bixilon.minosoft.gui.rendering.util.mesh.LineMesh diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/world/outline/BlockOutlineRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/world/outline/BlockOutlineRenderer.kt index 27edc386d..4127ea50e 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/world/outline/BlockOutlineRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/world/outline/BlockOutlineRenderer.kt @@ -24,9 +24,9 @@ import de.bixilon.minosoft.data.registries.blocks.types.entity.BlockWithEntity import de.bixilon.minosoft.gui.rendering.RenderConstants import de.bixilon.minosoft.gui.rendering.RenderWindow import de.bixilon.minosoft.gui.rendering.camera.target.targets.BlockTarget -import de.bixilon.minosoft.gui.rendering.renderer.AsyncRenderer import de.bixilon.minosoft.gui.rendering.renderer.MeshSwapper -import de.bixilon.minosoft.gui.rendering.renderer.RendererBuilder +import de.bixilon.minosoft.gui.rendering.renderer.renderer.AsyncRenderer +import de.bixilon.minosoft.gui.rendering.renderer.renderer.RendererBuilder import de.bixilon.minosoft.gui.rendering.system.base.DepthFunctions import de.bixilon.minosoft.gui.rendering.system.base.RenderSystem import de.bixilon.minosoft.gui.rendering.system.base.phases.OtherDrawable