diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/system/dummy/DummyRenderSystem.kt b/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/system/dummy/DummyRenderSystem.kt index 44c52e975..b87d07c80 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/system/dummy/DummyRenderSystem.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/system/dummy/DummyRenderSystem.kt @@ -36,6 +36,7 @@ import de.bixilon.minosoft.gui.rendering.system.dummy.shader.DummyNativeShader import de.bixilon.minosoft.gui.rendering.system.dummy.texture.DummyTextureManager import de.bixilon.minosoft.gui.rendering.util.mesh.MeshOrder import de.bixilon.minosoft.gui.rendering.util.mesh.MeshStruct +import de.bixilon.minosoft.gui.rendering.util.vec.vec2.Vec2iUtil.EMPTY import java.nio.FloatBuffer class DummyRenderSystem( @@ -47,6 +48,8 @@ class DummyRenderSystem( override var framebuffer: Framebuffer? = null override val active: Boolean = true + override var viewport = Vec2i.EMPTY + override fun init() { vendor = DummyVendor } diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/system/dummy/DummyVendor.kt b/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/system/dummy/DummyVendor.kt index 666fb5647..84a45e115 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/system/dummy/DummyVendor.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/system/dummy/DummyVendor.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 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,10 @@ package de.bixilon.minosoft.gui.rendering.system.dummy import de.bixilon.minosoft.gui.rendering.system.base.GPUVendor +import de.bixilon.minosoft.gui.rendering.system.base.driver.DriverHacks object DummyVendor : GPUVendor { override val shaderDefine: String = "__DUMMY" + + override val hacks = DriverHacks.set() } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/RenderLoader.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/RenderLoader.kt index 10b366577..2a48d03f4 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/RenderLoader.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/RenderLoader.kt @@ -23,11 +23,13 @@ import de.bixilon.kutil.reflection.ReflectionUtil.forceSet import de.bixilon.kutil.unit.UnitFormatter.formatNanos import de.bixilon.minosoft.gui.rendering.RenderUtil.pause import de.bixilon.minosoft.gui.rendering.RenderUtil.runAsync +import de.bixilon.minosoft.gui.rendering.events.ResizeWindowEvent import de.bixilon.minosoft.gui.rendering.font.manager.FontManager import de.bixilon.minosoft.gui.rendering.gui.GUIRenderer import de.bixilon.minosoft.gui.rendering.input.key.DebugKeyBindings import de.bixilon.minosoft.gui.rendering.input.key.DefaultKeyBindings import de.bixilon.minosoft.gui.rendering.renderer.renderer.DefaultRenderer +import de.bixilon.minosoft.modding.event.listener.CallbackEventListener.Companion.listen import de.bixilon.minosoft.protocol.network.connection.play.PlayConnectionStates import de.bixilon.minosoft.util.Stopwatch import de.bixilon.minosoft.util.delegate.RenderingDelegate.observeRendering @@ -130,6 +132,7 @@ object RenderLoader { input.init() DefaultKeyBindings.register(this) DebugKeyBindings.register(this) + connection.events.listen { system.viewport = it.size } this::state.observe(this) { if (it == RenderingStates.PAUSED || it == RenderingStates.SLOW || it == RenderingStates.STOPPED) { @@ -137,7 +140,6 @@ object RenderLoader { } } - window.postInit() textures.dynamic.activate() diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/RenderSystem.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/RenderSystem.kt index 85fe49aca..911e5366a 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/RenderSystem.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/RenderSystem.kt @@ -153,7 +153,6 @@ interface RenderSystem { fun polygonOffset(factor: Float, unit: Float) - fun resetBlending() { disable(RenderingCapabilities.BLENDING) setBlendFunction(BlendingFunctions.ONE, BlendingFunctions.ONE_MINUS_SOURCE_ALPHA, BlendingFunctions.ONE, BlendingFunctions.ZERO) @@ -165,4 +164,6 @@ interface RenderSystem { shader.reload() } } + + var viewport: Vec2i } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/OpenGLRenderSystem.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/OpenGLRenderSystem.kt index f2b453493..8e1a64a2f 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/OpenGLRenderSystem.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/OpenGLRenderSystem.kt @@ -19,7 +19,6 @@ import de.bixilon.minosoft.data.registries.identified.ResourceLocation import de.bixilon.minosoft.data.text.formatting.color.Colors import de.bixilon.minosoft.data.text.formatting.color.RGBColor import de.bixilon.minosoft.gui.rendering.RenderContext -import de.bixilon.minosoft.gui.rendering.events.ResizeWindowEvent import de.bixilon.minosoft.gui.rendering.shader.Shader import de.bixilon.minosoft.gui.rendering.system.base.* import de.bixilon.minosoft.gui.rendering.system.base.buffer.frame.Framebuffer @@ -34,10 +33,10 @@ import de.bixilon.minosoft.gui.rendering.system.opengl.buffer.uniform.FloatOpenG import de.bixilon.minosoft.gui.rendering.system.opengl.buffer.uniform.IntOpenGLUniformBuffer import de.bixilon.minosoft.gui.rendering.system.opengl.buffer.vertex.FloatOpenGLVertexBuffer import de.bixilon.minosoft.gui.rendering.system.opengl.texture.OpenGLTextureManager -import de.bixilon.minosoft.gui.rendering.system.opengl.vendor.* +import de.bixilon.minosoft.gui.rendering.system.opengl.vendor.OpenGLVendor import de.bixilon.minosoft.gui.rendering.util.mesh.MeshOrder import de.bixilon.minosoft.gui.rendering.util.mesh.MeshStruct -import de.bixilon.minosoft.modding.event.listener.CallbackEventListener.Companion.listen +import de.bixilon.minosoft.gui.rendering.util.vec.vec2.Vec2iUtil.EMPTY import de.bixilon.minosoft.terminal.RunConfiguration import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels @@ -118,12 +117,7 @@ class OpenGLRenderSystem( this.vendorString = glGetString(GL_VENDOR) ?: "UNKNOWN" val vendorString = vendorString.lowercase() - vendor = when { - vendorString.contains("nvidia") -> NvidiaOpenGLVendor - vendorString.contains("intel") -> MesaOpenGLVendor - vendorString.contains("amd") || vendorString.contains("ati") -> ATIOpenGLVendor - else -> OtherOpenGLVendor - } + vendor = OpenGLVendor.of(vendorString) if (context.preferQuads && DriverHacks.USE_QUADS_OVER_TRIANGLE !in vendor.hacks) { throw IllegalStateException("Your GPU driver does not support the `prefer_quads` config option!") } @@ -131,11 +125,6 @@ class OpenGLRenderSystem( this.version = glGetString(GL_VERSION) ?: "UNKNOWN" this.gpuType = glGetString(GL_RENDERER) ?: "UNKNOWN" - context.connection.events.listen { - context.queue += { - glViewport(0, 0, it.size.x, it.size.y) - } - } if (DEBUG_MODE) { glEnable(GL_DEBUG_OUTPUT) glDebugMessageCallback({ source, type, id, severity, length, message, userParameter -> @@ -332,6 +321,13 @@ class OpenGLRenderSystem( Log.log(LogMessageType.RENDERING, LogLevels.VERBOSE) { "[OpenGL] ${builder.invoke()}" } } + override var viewport: Vec2i = Vec2i.EMPTY + set(value) { + if (field == value) return + field = Vec2i(value) + glViewport(0, 0, viewport.x, viewport.y) + } + companion object : RenderSystemFactory { const val DEBUG_MODE = false diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/vendor/ATIOpenGLVendor.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/vendor/AMDOpenGLVendor.kt similarity index 93% rename from src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/vendor/ATIOpenGLVendor.kt rename to src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/vendor/AMDOpenGLVendor.kt index 4b0d4317c..cc086ab51 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/vendor/ATIOpenGLVendor.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/vendor/AMDOpenGLVendor.kt @@ -17,8 +17,8 @@ import de.bixilon.minosoft.gui.rendering.system.base.driver.DriverHacks import org.lwjgl.opengl.ATIMeminfo.GL_VBO_FREE_MEMORY_ATI import org.lwjgl.opengl.GL11.glGetInteger -object ATIOpenGLVendor : OpenGLVendor { - override val shaderDefine: String = "__ATI" +object AMDOpenGLVendor : OpenGLVendor { + override val shaderDefine: String = "__AMD" override val availableVRAM: Long get() = glGetInteger(GL_VBO_FREE_MEMORY_ATI).toLong() * 1024 diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/vendor/MesaOpenGLVendor.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/vendor/IntelOpenGLVendor.kt similarity index 91% rename from src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/vendor/MesaOpenGLVendor.kt rename to src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/vendor/IntelOpenGLVendor.kt index 0063b381a..b5005c47f 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/vendor/MesaOpenGLVendor.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/vendor/IntelOpenGLVendor.kt @@ -15,8 +15,8 @@ package de.bixilon.minosoft.gui.rendering.system.opengl.vendor import de.bixilon.minosoft.gui.rendering.system.base.driver.DriverHacks -object MesaOpenGLVendor : OpenGLVendor { - override val shaderDefine: String = "__MESA" +object IntelOpenGLVendor : OpenGLVendor { + override val shaderDefine: String = "__INTEL" override val hacks = DriverHacks.set() } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/vendor/OpenGLVendor.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/vendor/OpenGLVendor.kt index 22c8c281f..09457ff17 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/vendor/OpenGLVendor.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/vendor/OpenGLVendor.kt @@ -22,4 +22,15 @@ interface OpenGLVendor : GPUVendor { get() = -1L val maximumVRAM: Long get() = -1L + + + companion object { + + fun of(vendor: String): OpenGLVendor = when { + vendor.contains("nvidia") -> NvidiaOpenGLVendor + vendor.contains("intel") -> IntelOpenGLVendor + vendor.contains("amd") || vendor.contains("ati") -> AMDOpenGLVendor + else -> OtherOpenGLVendor + } + } }