blob: 7fb13ab8604413a71f184cecee30d01347d044e7 (
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
|
package at.hannibal2.skyhanni.utils.shader
import at.hannibal2.skyhanni.utils.LorenzUtils
import net.minecraft.client.shader.ShaderLinkHelper
import org.apache.commons.lang3.StringUtils
import org.lwjgl.opengl.GL11
import java.util.function.Supplier
/**
* Superclass for shader objects to compile and attach vertex and fragment shaders to the shader program
*
* Modified class from SkyblockAddons
*
* Credit: [Shader.java](https://github.com/BiscuitDevelopment/SkyblockAddons/blob/main/src/main/java/codes/biscuit/skyblockaddons/shader/Shader.java)
*/
abstract class Shader(vertex: String, fragment: String) {
var shaderProgram: Int = ShaderLinkHelper.getStaticShaderLinkHelper().createProgram()
private val uniforms: MutableList<Uniform<*>> = mutableListOf()
init {
val vertexShaderID = ShaderManager.loadShader(ShaderType.VERTEX, vertex)
ShaderManager.attachShader(shaderProgram, vertexShaderID)
val fragmentShaderID = ShaderManager.loadShader(ShaderType.FRAGMENT, fragment)
ShaderManager.attachShader(shaderProgram, fragmentShaderID)
ShaderHelper.glLinkProgram(shaderProgram)
val linkStatus = ShaderHelper.glGetProgrami(shaderProgram, ShaderHelper.GL_LINK_STATUS)
if (linkStatus == GL11.GL_FALSE) {
LorenzUtils.consoleLog(
"Error occurred when linking program with Vertex Shader: $vertex and Fragment Shader: $fragment : " +
StringUtils.trim(ShaderHelper.glGetProgramInfoLog(shaderProgram, 1024))
)
}
this.registerUniforms()
}
abstract fun registerUniforms()
fun updateUniforms() {
for (uniform in uniforms) {
uniform.update()
}
}
fun enable() = ShaderHelper.glUseProgram(shaderProgram)
fun disable() = ShaderHelper.glUseProgram(0)
fun <T> registerUniform(uniformType: Uniform.UniformType<T>, name: String, uniformValuesSupplier: Supplier<T>) {
uniforms.add(Uniform(this, uniformType, name, uniformValuesSupplier))
}
}
|