package me.srvstr.shader; import java.io.BufferedReader; import java.io.InputStreamReader; import org.lwjgl.opengl.GL20C; public class Shader implements AutoCloseable { private int shaderHandle; public Shader(String fileName, int shaderType) throws AssertionError { this.shaderHandle = GL20C.glCreateShader(shaderType); GL20C.glShaderSource(this.shaderHandle, getSource(fileName)); GL20C.glCompileShader(this.shaderHandle); if (GL20C.glGetShaderi(this.shaderHandle, 35713) == 0) { System.err.println(GL20C.glGetShaderInfoLog(this.shaderHandle)); throw new AssertionError("Could not compile Shader: " + fileName); } } private String getSource(String fileName) { try { BufferedReader reader = new BufferedReader(new InputStreamReader(getClass().getResource(fileName).openStream())); String result = reader.lines().reduce("", (A, B) -> String.valueOf(A) + B + System.lineSeparator()); reader.close(); return result; } catch (Exception e) { e.printStackTrace(); return null; } } public final int getHandle() { return this.shaderHandle; } public void close() { GL20C.glDeleteShader(this.shaderHandle); } }