gytebot/src/main/java/me/srvstr/shader/ShaderProgram.java

52 lines
1.4 KiB
Java

package me.srvstr.shader;
import org.lwjgl.opengl.GL20C;
public class ShaderProgram
implements AutoCloseable {
protected int program;
private Shader vertexShader;
private Shader fragmentShader;
public ShaderProgram(String shaderName) throws AssertionError {
this.program = GL20C.glCreateProgram();
this.vertexShader = new Shader(String.valueOf(shaderName) + ".vsh.glsl", 35633);
this.fragmentShader = new Shader(String.valueOf(shaderName) + ".fsh.glsl", 35632);
GL20C.glAttachShader(this.program, this.vertexShader.getHandle());
GL20C.glAttachShader(this.program, this.fragmentShader.getHandle());
GL20C.glBindAttribLocation(this.program, 0, "vertexPosition");
GL20C.glLinkProgram(this.program);
if (GL20C.glGetProgrami(this.program, 35714) == 0) {
System.err.println(GL20C.glGetProgramInfoLog(this.program));
throw new AssertionError("Unable to create shader program");
}
GL20C.glValidateProgram(this.program);
if (GL20C.glGetProgrami(this.program, 35715) == 0) {
System.err.println(GL20C.glGetProgramInfoLog(this.program));
throw new AssertionError("Unable to create shader program");
}
}
public void bind() {
GL20C.glUseProgram(this.program);
}
public void close() {
GL20C.glDeleteProgram(this.program);
this.vertexShader.close();
this.fragmentShader.close();
}
public void unbind() {
GL20C.glUseProgram(0);
}
}