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); } }