47 lines
1.2 KiB
Java
47 lines
1.2 KiB
Java
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);
|
|
}
|
|
}
|