Skip to content

Commit 80316fc

Browse files
committed
fixed GLRenderer yay
1 parent 7ef695f commit 80316fc

File tree

1 file changed

+48
-36
lines changed
  • modules/ui/src/main/kotlin/org/polyfrost/oneconfig/api/ui/v1/internal

1 file changed

+48
-36
lines changed

modules/ui/src/main/kotlin/org/polyfrost/oneconfig/api/ui/v1/internal/GLRendererImpl.kt

Lines changed: 48 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ class GLRendererImpl(private val nsvg: NanoSvgApi, private val stb: StbApi) : Re
8686
private var pixelRatio = 1f
8787
private var alphaCap = 1f
8888
private var popFlushNeeded = false
89+
private val init get() = program != 0
8990

9091
private var slotX = 0
9192
private var slotY = 0
@@ -284,6 +285,7 @@ class GLRendererImpl(private val nsvg: NanoSvgApi, private val stb: StbApi) : Re
284285
}
285286

286287
override fun init() {
288+
if (init) return
287289
// check if instancing extension is available
288290
require(GlCapabilities.isGl21Available) { "At least OpenGL 2.1 is required" }
289291
if (!GlCapabilities.isGl33Available) { // asm: skip check, both are core past 3.3
@@ -398,6 +400,7 @@ class GLRendererImpl(private val nsvg: NanoSvgApi, private val stb: StbApi) : Re
398400
private fun flush() {
399401
if (count == 0) return
400402
buffer.flip()
403+
val prevActive = glGetInteger(GL_ACTIVE_TEXTURE)
401404
val prevTex = glGetInteger(GL_TEXTURE_BINDING_2D)
402405
val prevProg = glGetInteger(GL_CURRENT_PROGRAM)
403406
val prevBuf = glGetInteger(GL_ARRAY_BUFFER_BINDING)
@@ -459,6 +462,7 @@ class GLRendererImpl(private val nsvg: NanoSvgApi, private val stb: StbApi) : Re
459462
if (prevDepth) glEnable(GL_DEPTH_TEST)
460463
if (prevCull) glEnable(GL_CULL_FACE)
461464
glUseProgram(prevProg)
465+
glActiveTexture(prevActive)
462466
glBindTexture(GL_TEXTURE_2D, prevTex)
463467
glBindBuffer(GL_ARRAY_BUFFER, prevBuf)
464468
if (GlCapabilities.isGl3Available) org.lwjgl.opengl.GL30.glBindVertexArray(prevVao)
@@ -598,7 +602,7 @@ class GLRendererImpl(private val nsvg: NanoSvgApi, private val stb: StbApi) : Re
598602
buffer.put(EMPTY_ROW) // zero radii
599603
buffer.put(r).put(g).put(b).put(a)
600604
buffer.put(EMPTY_ROW) // color1 unused
601-
buffer.put(glyph.u).put(glyph.v).put(glyph.uw).put(glyph.vh)
605+
buffer.put(glyph, 0, 4)
602606
buffer.put(-1f) // thickness = -1 for text
603607
penX += glyph.xAdvance * scaleFactor
604608
count += 1
@@ -796,18 +800,23 @@ class GLRendererImpl(private val nsvg: NanoSvgApi, private val stb: StbApi) : Re
796800
h[0] / ATLAS_SIZE.toFloat()
797801
)
798802

799-
val prevTex = glGetInteger(GL_TEXTURE_BINDING_2D)
800-
glBindTexture(GL_TEXTURE_2D, atlas)
801-
glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
802-
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0)
803-
glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0)
804-
glPixelStorei(GL_UNPACK_SKIP_ROWS, 0)
805-
glTexSubImage2D(GL_TEXTURE_2D, 0, slotX, slotY, w[0], h[0], GL_RGBA, GL_UNSIGNED_BYTE, d)
806-
when (mipmapMode) {
807-
1 -> org.lwjgl.opengl.GL30.glGenerateMipmap(GL_TEXTURE_2D)
808-
2 -> org.lwjgl.opengl.EXTFramebufferObject.glGenerateMipmapEXT(GL_TEXTURE_2D)
803+
synchronized(this) {
804+
val prevActive = glGetInteger(GL_ACTIVE_TEXTURE)
805+
val prevTex = glGetInteger(GL_TEXTURE_BINDING_2D)
806+
glActiveTexture(GL_TEXTURE0)
807+
glBindTexture(GL_TEXTURE_2D, atlas)
808+
glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
809+
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0)
810+
glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0)
811+
glPixelStorei(GL_UNPACK_SKIP_ROWS, 0)
812+
glTexSubImage2D(GL_TEXTURE_2D, 0, slotX, slotY, w[0], h[0], GL_RGBA, GL_UNSIGNED_BYTE, d)
813+
when (mipmapMode) {
814+
1 -> org.lwjgl.opengl.GL30.glGenerateMipmap(GL_TEXTURE_2D)
815+
2 -> org.lwjgl.opengl.EXTFramebufferObject.glGenerateMipmapEXT(GL_TEXTURE_2D)
816+
}
817+
glBindTexture(GL_TEXTURE_2D, prevTex)
818+
glActiveTexture(prevActive)
809819
}
810-
glBindTexture(GL_TEXTURE_2D, prevTex)
811820
if (image.type == PolyImage.Type.Raster) stb.image_free(d)
812821

813822
slotX += w[0]
@@ -976,30 +985,33 @@ class GLRendererImpl(private val nsvg: NanoSvgApi, private val stb: StbApi) : Re
976985
stb.free(packed)
977986
stb.free(range)
978987

979-
// dumpAtlas()
980-
981-
val prevTex = glGetInteger(GL_TEXTURE_BINDING_2D)
982-
glBindTexture(GL_TEXTURE_2D, atlas)
983-
glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
984-
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0)
985-
glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0)
986-
glPixelStorei(GL_UNPACK_SKIP_ROWS, 0)
987-
// can't write to the alpha channel in GL3 core! lol haha
988-
glTexSubImage2D(
989-
GL_TEXTURE_2D,
990-
0,
991-
sx,
992-
sy,
993-
FONT_MAX_BITMAP_W,
994-
FONT_MAX_BITMAP_H,
995-
GL_RED,
996-
GL_UNSIGNED_BYTE,
997-
bitMap
998-
)
999-
glBindTexture(GL_TEXTURE_2D, prevTex)
1000-
when (mipmapMode) {
1001-
1 -> org.lwjgl.opengl.GL30.glGenerateMipmap(GL_TEXTURE_2D)
1002-
2 -> org.lwjgl.opengl.EXTFramebufferObject.glGenerateMipmapEXT(GL_TEXTURE_2D)
988+
synchronized(this@GLRendererImpl) {
989+
val prevActive = glGetInteger(GL_ACTIVE_TEXTURE)
990+
val prevTex = glGetInteger(GL_TEXTURE_BINDING_2D)
991+
glActiveTexture(GL_TEXTURE0)
992+
glBindTexture(GL_TEXTURE_2D, atlas)
993+
glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
994+
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0)
995+
glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0)
996+
glPixelStorei(GL_UNPACK_SKIP_ROWS, 0)
997+
// can't write to the alpha channel in GL3 core! lol haha
998+
glTexSubImage2D(
999+
GL_TEXTURE_2D,
1000+
0,
1001+
sx,
1002+
sy,
1003+
FONT_MAX_BITMAP_W,
1004+
FONT_MAX_BITMAP_H,
1005+
GL_RED,
1006+
GL_UNSIGNED_BYTE,
1007+
bitMap
1008+
)
1009+
when (mipmapMode) {
1010+
1 -> org.lwjgl.opengl.GL30.glGenerateMipmap(GL_TEXTURE_2D)
1011+
2 -> org.lwjgl.opengl.EXTFramebufferObject.glGenerateMipmapEXT(GL_TEXTURE_2D)
1012+
}
1013+
glBindTexture(GL_TEXTURE_2D, prevTex)
1014+
glActiveTexture(prevActive)
10031015
}
10041016
slotX += totalSizeX
10051017
atlasRowHeight = maxOf(atlasRowHeight, totalSizeY)

0 commit comments

Comments
 (0)