deprecate some stuff, ConnectionUtil, cleanup RenderWindow a bit

This commit is contained in:
Bixilon 2021-12-29 18:07:09 +01:00
parent 79de462d77
commit 4fda0e0849
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
17 changed files with 133 additions and 97 deletions

View File

@ -18,20 +18,15 @@ import de.bixilon.kutil.latch.CountUpAndDownLatch
import de.bixilon.kutil.math.MMath.round10
import de.bixilon.kutil.primitive.BooleanUtil.decide
import de.bixilon.kutil.time.TimeUtil
import de.bixilon.minosoft.config.key.KeyAction
import de.bixilon.minosoft.config.key.KeyBinding
import de.bixilon.minosoft.config.key.KeyCodes
import de.bixilon.minosoft.config.profile.delegate.watcher.SimpleProfileDelegateWatcher.Companion.profileWatch
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.text.BaseComponent
import de.bixilon.minosoft.data.text.ChatColors
import de.bixilon.minosoft.data.text.ChatComponent
import de.bixilon.minosoft.gui.rendering.camera.Camera
import de.bixilon.minosoft.gui.rendering.font.Font
import de.bixilon.minosoft.gui.rendering.font.FontLoader
import de.bixilon.minosoft.gui.rendering.framebuffer.FramebufferManager
import de.bixilon.minosoft.gui.rendering.gui.hud.atlas.TextureLike
import de.bixilon.minosoft.gui.rendering.gui.hud.atlas.TextureLikeTexture
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.renderer.RendererManager
@ -40,21 +35,17 @@ import de.bixilon.minosoft.gui.rendering.stats.AbstractRenderStats
import de.bixilon.minosoft.gui.rendering.stats.ExperimentalRenderStats
import de.bixilon.minosoft.gui.rendering.stats.RenderStats
import de.bixilon.minosoft.gui.rendering.system.base.IntegratedBufferTypes
import de.bixilon.minosoft.gui.rendering.system.base.PolygonModes
import de.bixilon.minosoft.gui.rendering.system.base.RenderSystem
import de.bixilon.minosoft.gui.rendering.system.opengl.OpenGLRenderSystem
import de.bixilon.minosoft.gui.rendering.system.window.BaseWindow
import de.bixilon.minosoft.gui.rendering.system.window.GLFWWindow
import de.bixilon.minosoft.gui.rendering.tint.TintManager
import de.bixilon.minosoft.gui.rendering.util.ScreenshotTaker
import de.bixilon.minosoft.modding.event.events.InternalMessageReceiveEvent
import de.bixilon.minosoft.modding.event.events.PacketReceiveEvent
import de.bixilon.minosoft.modding.event.invoker.CallbackEventInvoker
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import de.bixilon.minosoft.protocol.packets.s2c.play.PositionAndRotationS2CP
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
import de.bixilon.minosoft.util.KUtil.format
import de.bixilon.minosoft.util.KUtil.toResourceLocation
import de.bixilon.minosoft.util.Stopwatch
import de.bixilon.minosoft.util.logging.Log
import de.bixilon.minosoft.util.logging.LogLevels
@ -86,7 +77,6 @@ class RenderWindow(
var initialized = false
private set
private lateinit var renderThread: Thread
lateinit var renderStats: AbstractRenderStats
private set
@ -140,7 +130,6 @@ class RenderWindow(
}
fun init(latch: CountUpAndDownLatch) {
renderThread = Thread.currentThread()
Log.log(LogMessageType.RENDERING_LOADING) { "Creating window..." }
val stopwatch = Stopwatch()
@ -196,7 +185,7 @@ class RenderWindow(
inputHandler.init()
registerGlobalKeyCombinations()
DefaultKeyCombinations.registerAll(this)
connection.fireEvent(ResizeWindowEvent(previousSize = Vec2i(0, 0), size = window.size))
@ -211,70 +200,6 @@ class RenderWindow(
Log.log(LogMessageType.RENDERING_GENERAL) { "Showing window after ${stopwatch.totalTime()}" }
}
private fun registerGlobalKeyCombinations() {
inputHandler.registerKeyCallback("minosoft:enable_debug_polygon".toResourceLocation(),
KeyBinding(
mapOf(
KeyAction.MODIFIER to setOf(KeyCodes.KEY_F4),
KeyAction.STICKY to setOf(KeyCodes.KEY_P),
),
)) {
val nextMode = it.decide(PolygonModes.LINE, PolygonModes.FILL)
renderSystem.framebuffer = framebufferManager.world.framebuffer
renderSystem.polygonMode = nextMode
sendDebugMessage("Polygon mode: ${nextMode.format()}")
}
inputHandler.registerKeyCallback("minosoft:quit_rendering".toResourceLocation(),
KeyBinding(
mapOf(
KeyAction.RELEASE to setOf(KeyCodes.KEY_ESCAPE),
),
)) { window.close() }
inputHandler.registerKeyCallback("minosoft:take_screenshot".toResourceLocation(),
KeyBinding(
mapOf(
KeyAction.PRESS to setOf(KeyCodes.KEY_F2),
),
ignoreConsumer = true,
)) { screenshotTaker.takeScreenshot() }
inputHandler.registerKeyCallback("minosoft:pause_incoming_packets".toResourceLocation(),
KeyBinding(
mapOf(
KeyAction.MODIFIER to setOf(KeyCodes.KEY_F4),
KeyAction.STICKY to setOf(KeyCodes.KEY_I),
),
ignoreConsumer = true,
)) {
sendDebugMessage("Pausing incoming packets: ${it.format()}")
connection.network.pauseReceiving(it)
}
inputHandler.registerKeyCallback("minosoft:pause_outgoing_packets".toResourceLocation(),
KeyBinding(
mapOf(
KeyAction.MODIFIER to setOf(KeyCodes.KEY_F4),
KeyAction.STICKY to setOf(KeyCodes.KEY_O),
),
ignoreConsumer = true,
)) {
sendDebugMessage("Pausing outgoing packets: ${it.format()}")
connection.network.pauseSending(it)
}
inputHandler.registerKeyCallback("minosoft:toggle_fullscreen".toResourceLocation(),
KeyBinding(
mapOf(
KeyAction.PRESS to setOf(KeyCodes.KEY_F11),
),
ignoreConsumer = true,
)) {
window.fullscreen = !window.fullscreen
}
}
fun startLoop() {
Log.log(LogMessageType.RENDERING_LOADING) { "Starting loop" }
var closed = false
@ -348,12 +273,4 @@ class RenderWindow(
// disconnect
connection.disconnect()
}
fun sendDebugMessage(message: Any) {
connection.fireEvent(InternalMessageReceiveEvent(connection, BaseComponent(RenderConstants.DEBUG_MESSAGES_PREFIX, ChatComponent.of(message).apply { applyDefaultColor(ChatColors.BLUE) })))
}
fun assertOnRenderThread() {
check(Thread.currentThread() === renderThread) { "Current thread (${Thread.currentThread().name} is not the render thread!" }
}
}

View File

@ -100,7 +100,7 @@ class EntityHitboxRenderer(
),
), defaultPressed = profile.enabled) {
profile.enabled = it
renderWindow.sendDebugMessage("Entity hit boxes: ${it.format()}")
connection.util.sendDebugMessage("Entity hit boxes: ${it.format()}")
}
}

View File

@ -5,6 +5,7 @@ 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.system.base.PolygonModes
import de.bixilon.minosoft.modding.event.invoker.CallbackEventInvoker
class FramebufferManager(
@ -32,6 +33,7 @@ class FramebufferManager(
override fun draw() {
renderWindow.renderSystem.polygonMode = PolygonModes.FILL
world.draw()
gui.draw()
}

View File

@ -3,6 +3,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.system.base.IntegratedBufferTypes
import de.bixilon.minosoft.gui.rendering.system.base.PolygonModes
import de.bixilon.minosoft.gui.rendering.system.base.buffer.frame.Framebuffer
import de.bixilon.minosoft.gui.rendering.system.base.shader.Shader
import de.bixilon.minosoft.gui.rendering.util.mesh.Mesh
@ -12,6 +13,7 @@ interface IntegratedFramebuffer : Drawable {
val shader: Shader
val framebuffer: Framebuffer
val mesh: Mesh
val polygonMode: PolygonModes
fun init() {

View File

@ -3,6 +3,7 @@ package de.bixilon.minosoft.gui.rendering.framebuffer.gui
import de.bixilon.minosoft.gui.rendering.RenderWindow
import de.bixilon.minosoft.gui.rendering.framebuffer.FramebufferMesh
import de.bixilon.minosoft.gui.rendering.framebuffer.IntegratedFramebuffer
import de.bixilon.minosoft.gui.rendering.system.base.PolygonModes
import de.bixilon.minosoft.gui.rendering.system.base.buffer.frame.Framebuffer
import de.bixilon.minosoft.util.KUtil.toResourceLocation
@ -12,4 +13,5 @@ class GUIFramebuffer(
override val shader = renderWindow.renderSystem.createShader("minosoft:framebuffer/gui".toResourceLocation())
override val framebuffer: Framebuffer = renderWindow.renderSystem.createFramebuffer()
override val mesh = FramebufferMesh(renderWindow)
override var polygonMode: PolygonModes = PolygonModes.DEFAULT
}

View File

@ -3,6 +3,7 @@ package de.bixilon.minosoft.gui.rendering.framebuffer.world
import de.bixilon.minosoft.gui.rendering.RenderWindow
import de.bixilon.minosoft.gui.rendering.framebuffer.FramebufferMesh
import de.bixilon.minosoft.gui.rendering.framebuffer.IntegratedFramebuffer
import de.bixilon.minosoft.gui.rendering.system.base.PolygonModes
import de.bixilon.minosoft.gui.rendering.system.base.buffer.frame.Framebuffer
import de.bixilon.minosoft.util.KUtil.toResourceLocation
@ -12,4 +13,5 @@ class WorldFramebuffer(
override val shader = renderWindow.renderSystem.createShader("minosoft:framebuffer/world".toResourceLocation())
override val framebuffer: Framebuffer = renderWindow.renderSystem.createFramebuffer()
override val mesh = FramebufferMesh(renderWindow)
override var polygonMode: PolygonModes = PolygonModes.DEFAULT
}

View File

@ -43,6 +43,7 @@ import de.bixilon.minosoft.gui.rendering.renderer.Drawable
import de.bixilon.minosoft.gui.rendering.renderer.Renderer
import de.bixilon.minosoft.gui.rendering.renderer.RendererBuilder
import de.bixilon.minosoft.gui.rendering.system.base.IntegratedBufferTypes
import de.bixilon.minosoft.gui.rendering.system.base.PolygonModes
import de.bixilon.minosoft.gui.rendering.system.base.RenderSystem
import de.bixilon.minosoft.gui.rendering.system.base.buffer.frame.Framebuffer
import de.bixilon.minosoft.gui.rendering.system.base.phases.OtherDrawable
@ -69,6 +70,8 @@ class HUDRenderer(
private set
override val framebuffer: Framebuffer
get() = renderWindow.framebufferManager.gui.framebuffer
override val polygonMode: PolygonModes
get() = renderWindow.framebufferManager.gui.polygonMode
private val hudElements: MutableMap<ResourceLocation, HUDElement> = synchronizedMapOf()

View File

@ -0,0 +1,80 @@
package de.bixilon.minosoft.gui.rendering.input.key
import de.bixilon.kutil.primitive.BooleanUtil.decide
import de.bixilon.minosoft.config.key.KeyAction
import de.bixilon.minosoft.config.key.KeyBinding
import de.bixilon.minosoft.config.key.KeyCodes
import de.bixilon.minosoft.gui.rendering.RenderWindow
import de.bixilon.minosoft.gui.rendering.system.base.PolygonModes
import de.bixilon.minosoft.util.KUtil.format
import de.bixilon.minosoft.util.KUtil.toResourceLocation
object DefaultKeyCombinations {
fun registerAll(renderWindow: RenderWindow) {
val inputHandler = renderWindow.inputHandler
val window = renderWindow.window
val connection = renderWindow.connection
inputHandler.registerKeyCallback("minosoft:enable_debug_polygon".toResourceLocation(),
KeyBinding(
mapOf(
KeyAction.MODIFIER to setOf(KeyCodes.KEY_F4),
KeyAction.STICKY to setOf(KeyCodes.KEY_P),
),
)) {
val nextMode = it.decide(PolygonModes.LINE, PolygonModes.FILL)
renderWindow.framebufferManager.world.polygonMode = nextMode
connection.util.sendDebugMessage("Polygon mode: ${nextMode.format()}")
}
inputHandler.registerKeyCallback("minosoft:quit_rendering".toResourceLocation(),
KeyBinding(
mapOf(
KeyAction.RELEASE to setOf(KeyCodes.KEY_ESCAPE),
),
)) { window.close() }
inputHandler.registerKeyCallback("minosoft:take_screenshot".toResourceLocation(),
KeyBinding(
mapOf(
KeyAction.PRESS to setOf(KeyCodes.KEY_F2),
),
ignoreConsumer = true,
)) { renderWindow.screenshotTaker.takeScreenshot() }
inputHandler.registerKeyCallback("minosoft:pause_incoming_packets".toResourceLocation(),
KeyBinding(
mapOf(
KeyAction.MODIFIER to setOf(KeyCodes.KEY_F4),
KeyAction.STICKY to setOf(KeyCodes.KEY_I),
),
ignoreConsumer = true,
)) {
connection.util.sendDebugMessage("Pausing incoming packets: ${it.format()}")
connection.network.pauseReceiving(it)
}
inputHandler.registerKeyCallback("minosoft:pause_outgoing_packets".toResourceLocation(),
KeyBinding(
mapOf(
KeyAction.MODIFIER to setOf(KeyCodes.KEY_F4),
KeyAction.STICKY to setOf(KeyCodes.KEY_O),
),
ignoreConsumer = true,
)) {
connection.util.sendDebugMessage("Pausing outgoing packets: ${it.format()}")
connection.network.pauseSending(it)
}
inputHandler.registerKeyCallback("minosoft:toggle_fullscreen".toResourceLocation(),
KeyBinding(
mapOf(
KeyAction.PRESS to setOf(KeyCodes.KEY_F11),
),
ignoreConsumer = true,
)) {
window.fullscreen = !window.fullscreen
}
}
}

View File

@ -65,7 +65,7 @@ class RenderWindowInputHandler(
CursorModes.HIDDEN -> CursorModes.NORMAL
}
renderWindow.window.cursorMode = nextMode
renderWindow.sendDebugMessage("Cursor mode: ${nextMode.format()}")
connection.util.sendDebugMessage("Cursor mode: ${nextMode.format()}")
}
}

View File

@ -14,6 +14,7 @@
package de.bixilon.minosoft.gui.rendering.renderer
import de.bixilon.minosoft.gui.rendering.RenderWindow
import de.bixilon.minosoft.gui.rendering.system.base.PolygonModes
import de.bixilon.minosoft.gui.rendering.system.base.RenderSystem
import de.bixilon.minosoft.gui.rendering.system.base.buffer.frame.Framebuffer
@ -22,6 +23,8 @@ interface Renderer {
val renderSystem: RenderSystem
val framebuffer: Framebuffer?
get() = renderWindow.framebufferManager.world.framebuffer
val polygonMode: PolygonModes
get() = renderWindow.framebufferManager.world.polygonMode
fun init() = Unit

View File

@ -70,7 +70,7 @@ class RendererManager(
}
}
private fun renderAll(rendererList: Collection<Renderer>) {
private fun renderNormal(rendererList: Collection<Renderer>) {
for (phase in RenderPhases.VALUES) {
for (renderer in rendererList) {
if (renderer is SkipAll && renderer.skipAll) {
@ -83,6 +83,7 @@ class RendererManager(
continue
}
renderSystem.framebuffer = renderer.framebuffer
renderSystem.polygonMode = renderer.polygonMode
phase.invokeSetup(renderer)
phase.invokeDraw(renderer)
}
@ -93,10 +94,9 @@ class RendererManager(
val renderers = renderers.values
for (renderer in renderers) {
renderSystem.framebuffer = renderer.framebuffer
renderer.prepareDraw()
}
renderAll(renderers)
renderNormal(renderers)
renderSystem.framebuffer = null
renderPre(renderers)
@ -115,6 +115,7 @@ class RendererManager(
if (renderer.skipPre) {
continue
}
renderSystem.polygonMode = renderer.polygonMode
renderSystem.framebuffer = renderer.framebuffer
renderer.drawPre()
}
@ -131,6 +132,7 @@ class RendererManager(
if (renderer.skipPost) {
continue
}
renderSystem.polygonMode = renderer.polygonMode
renderSystem.framebuffer = renderer.framebuffer
renderer.drawPost()
}

View File

@ -21,10 +21,7 @@ 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.system.base.BlendingFunctions
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
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.PostDrawable
import de.bixilon.minosoft.gui.rendering.system.base.texture.texture.AbstractTexture
@ -50,6 +47,7 @@ class SkyRenderer(
private var updateSun: Boolean = true
var baseColor = RenderConstants.DEFAULT_SKY_COLOR
override val framebuffer: Framebuffer? = null
override val polygonMode: PolygonModes = PolygonModes.DEFAULT
override fun init() {
skyboxShader.load()

View File

@ -18,4 +18,8 @@ enum class PolygonModes {
LINE,
POINT,
;
companion object {
val DEFAULT = FILL
}
}

View File

@ -72,7 +72,7 @@ class ScreenshotTaker(
ImageIO.write(bufferedImage, "png", file)
renderWindow.sendDebugMessage(BaseComponent(
renderWindow.connection.util.sendDebugMessage(BaseComponent(
"§aScreenshot saved to ",
TextComponent(file.name).apply {
color = ChatColors.WHITE
@ -101,7 +101,7 @@ class ScreenshotTaker(
private fun Throwable?.fail() {
this?.printStackTrace()
renderWindow.sendDebugMessage("§cFailed to make a screenshot: ${this?.message}")
renderWindow.connection.util.sendDebugMessage("§cFailed to make a screenshot: ${this?.message}")
}
companion object {

View File

@ -53,7 +53,7 @@ class ChunkBorderRenderer(
),
), defaultPressed = profile.chunkBorder.enabled) {
profile.chunkBorder.enabled = it
renderWindow.sendDebugMessage("Chunk borders: ${it.format()}")
connection.util.sendDebugMessage("Chunk borders: ${it.format()}")
}
}

View File

@ -0,0 +1,16 @@
package de.bixilon.minosoft.protocol.network.connection.play
import de.bixilon.minosoft.data.text.BaseComponent
import de.bixilon.minosoft.data.text.ChatColors
import de.bixilon.minosoft.data.text.ChatComponent
import de.bixilon.minosoft.gui.rendering.RenderConstants
import de.bixilon.minosoft.modding.event.events.InternalMessageReceiveEvent
class ConnectionUtil(
private val connection: PlayConnection,
) {
fun sendDebugMessage(message: Any) {
connection.fireEvent(InternalMessageReceiveEvent(connection, BaseComponent(RenderConstants.DEBUG_MESSAGES_PREFIX, ChatComponent.of(message).apply { applyDefaultColor(ChatColors.BLUE) })))
}
}

View File

@ -78,6 +78,7 @@ class PlayConnection(
val tabList = TabList()
val scoreboardManager = ScoreboardManager(this)
val bossbarManager = BossbarManager()
val util = ConnectionUtil(this)
@Deprecated(message = "PacketSender is deprecated")
val sender = PacketSender(this)
@ -255,11 +256,13 @@ class PlayConnection(
latch.count = count
}
@Deprecated("ToDo: Version?")
override fun getPacketId(packetType: PacketTypes.C2S): Int {
// ToDo: Improve speed
return version.c2sPackets[packetType.state]?.indexOf(packetType) ?: Protocol.getPacketId(packetType) ?: error("Can not find packet $packetType for $version")
}
@Deprecated("ToDo: Version?")
override fun getPacketById(packetId: Int): PacketTypes.S2C {
return version.s2cPackets[protocolState]?.getOrNull(packetId) ?: Protocol.getPacketById(protocolState, packetId) ?: let {
// wtf, notchain sends play disconnect packet in login state...
@ -274,6 +277,7 @@ class PlayConnection(
} ?: error("Can not find packet $packetId in $protocolState for $version")
}
@Deprecated("ToDo: Packet handler")
override fun handlePacket(packet: S2CPacket) {
if (!protocolState.connected) {
return
@ -292,6 +296,7 @@ class PlayConnection(
}
}
@Deprecated("ToDo: Tag manager")
fun inTag(`object`: Any?, tagType: ResourceLocation, tag: ResourceLocation): Boolean {
fun fallback(): Boolean {