52 lines
1.4 KiB
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);
|
|
}
|
|
}
|