From 139c6fbaced84205bd44181e3bed821d63d59424 Mon Sep 17 00:00:00 2001 From: Deftu Date: Thu, 26 Dec 2024 20:04:23 +0200 Subject: [PATCH] Fix GL state going out of whack because of NanoVG --- .../api/ui/v1/internal/RendererImpl.kt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/modules/ui/src/main/kotlin/org/polyfrost/oneconfig/api/ui/v1/internal/RendererImpl.kt b/modules/ui/src/main/kotlin/org/polyfrost/oneconfig/api/ui/v1/internal/RendererImpl.kt index ac25e7a3a..87c2d45fa 100644 --- a/modules/ui/src/main/kotlin/org/polyfrost/oneconfig/api/ui/v1/internal/RendererImpl.kt +++ b/modules/ui/src/main/kotlin/org/polyfrost/oneconfig/api/ui/v1/internal/RendererImpl.kt @@ -39,6 +39,7 @@ import org.polyfrost.polyui.data.Font import org.polyfrost.polyui.data.PolyImage import org.polyfrost.polyui.unit.Vec2 import org.polyfrost.polyui.utils.* +import org.polyfrost.universal.shader.BlendState import java.nio.ByteBuffer import java.nio.ByteOrder import org.polyfrost.polyui.color.PolyColor as Color @@ -105,6 +106,12 @@ class RendererImpl( private val errorHandler: (Throwable) -> Unit = { LOGGER.error("failed to load resource!", it) } + // GL state cache + private var blendState: BlendState? = null + private var depthState: Boolean? = null + private var activeTexture: Int? = null + private var textureState: Int? = null + override fun init() { vg.maybeSetup() @@ -136,6 +143,12 @@ class RendererImpl( GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS) } + blendState = BlendState.active() + depthState = GL11.glIsEnabled(GL11.GL_DEPTH_TEST) + activeTexture = UGraphics.getActiveTexture() + activeTexture?.let(UGraphics::setActiveTexture) + textureState = GL11.glGetInteger(GL11.GL_TEXTURE_BINDING_2D) + vg.beginFrame(width, height, pixelRatio) isDrawing = true } @@ -148,6 +161,11 @@ class RendererImpl( GL11.glPopAttrib() } + blendState?.activate() + depthState?.let { if (it) UGraphics.enableDepth() else UGraphics.disableDepth() } + textureState?.let { GL11.glBindTexture(GL11.GL_TEXTURE_2D, it) } + activeTexture?.let(UGraphics::setActiveTexture) + isDrawing = false }