aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/features/chroma/ChromaFontRenderer.kt
blob: 4e3a4d37fa704b95e2d9f38b3f8b94f834347076 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package at.hannibal2.skyhanni.features.chroma

import at.hannibal2.skyhanni.utils.ColorUtils
import at.hannibal2.skyhanni.utils.shader.ShaderHelper
import net.minecraft.client.renderer.GlStateManager
import org.lwjgl.opengl.GL11

/**
 * Class to handle chroma font rendering
 *
 * Modified class from SkyblockAddons
 *
 * Credit: [DrawStateFontRenderer.java](https://github.com/BiscuitDevelopment/SkyblockAddons/blob/main/src/main/java/codes/biscuit/skyblockaddons/utils/draw/DrawStateFontRenderer.java)
 */
class ChromaFontRenderer(private val baseColor: Int) {

    private var chromaOn = false

    fun startChroma() {
        chromaOn = true
    }

    fun endChroma() {
        chromaOn = false
    }

    fun loadChromaEnv() {
        if (chromaOn) {
            newChromaEnv()
        }
    }

    fun restoreChromaEnv() {
        if (ShaderHelper.areShadersSupported() && !chromaOn) ChromaShaderManager.end()
    }

    fun newChromaEnv(): ChromaFontRenderer {
        if (ShaderHelper.areShadersSupported()) {
            ChromaShaderManager.begin(ChromaType.TEXTURED)
            GlStateManager.shadeModel(GL11.GL_SMOOTH)
        }
        return this
    }

    fun bindActualColor(): ChromaFontRenderer {
        GlStateManager.color(
            ColorUtils.getRed(baseColor).toFloat() / 255f,
            ColorUtils.getGreen(baseColor).toFloat() / 255f,
            ColorUtils.getBlue(baseColor).toFloat() / 255f,
            ColorUtils.getAlpha(baseColor).toFloat() / 255f
        )
        return this
    }

    fun endChromaEnv(): ChromaFontRenderer {
        if (ShaderHelper.areShadersSupported()) {
            ChromaShaderManager.end()
            GlStateManager.shadeModel(GL11.GL_FLAT)
        }
        return this
    }

    fun getChromaState() = chromaOn
}