package com.bitwaffle.spaceguts.graphics.glsl; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL20; public class GLSLShader { private int handle; private String logString; public GLSLShader(ShaderTypes type){ handle = GL20.glCreateShader(type.getGLInt()); if(handle == 0){ System.out.println("Error creating shader handle!"); } } public boolean compileShaderFromFile(String fileName){ try{ BufferedReader reader = new BufferedReader(new FileReader(fileName)); String source = ""; String line; while ((line = reader.readLine()) != null) { source += line + "\n"; } return compileShaderFromString(source); } catch(IOException e){ e.printStackTrace(); return false; } } public boolean compileShaderFromString(String source){ GL20.glShaderSource(handle, source); GL20.glCompileShader(handle); int result = GL20.glGetShader(handle, GL20.GL_COMPILE_STATUS); if(result == GL11.GL_FALSE){ int length = GL20.glGetShader(handle, GL20.GL_INFO_LOG_LENGTH); logString = ""; if(length > 0){ logString = GL20.glGetShaderInfoLog(handle, length); } return false; } else{ //GL20.glAttachShader(handle, shaderHandle); return true; } } public String log() { return logString; } public int getHandle() { return handle; } }