Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package net.lesson.graphics.shaders;
- import java.io.BufferedReader;
- import java.io.FileReader;
- import java.io.IOException;
- import org.lwjgl.opengl.*;
- import org.lwjgl.opengl.GL20;
- public abstract class Shader {
- private int programID;
- private int vertexShaderID;
- private int fragmentShaderID;
- public Shader(String vertexFile, String fragmentFile){
- vertexShaderID =loadShader(vertexFile,GL20.GL_VERTEX_SHADER);
- fragmentShaderID =loadShader(fragmentFile,GL20.GL_FRAGMENT_SHADER);
- programID = GL20.glCreateProgram();
- GL20.glAttachShader(programID, vertexShaderID);
- GL20.glAttachShader(programID, fragmentShaderID);
- GL20.glLinkProgram(programID);
- GL20.glValidateProgram(programID);
- bindAttributes(vertexShaderID, vertexFile);
- bindAttributes(fragmentShaderID, fragmentFile);
- }
- protected void bindAttributes(int attribute, String varibaleName){
- GL20.glBindAttribLocation(programID, attribute, varibaleName);
- }
- public void start(){
- GL20.glUseProgram(programID);
- }
- public void stop(){
- GL20.glUseProgram(0);
- }
- public void cleanUp(){
- stop();
- GL20.glDetachShader(programID, vertexShaderID);
- GL20.glDetachShader(programID, fragmentShaderID);
- GL20.glDeleteShader(vertexShaderID);
- GL20.glDeleteShader(fragmentShaderID);
- GL20.glDeleteProgram(programID);
- }
- private static int loadShader(String file, int type){
- StringBuilder shaderSource = new StringBuilder();
- try{
- BufferedReader reader = new BufferedReader(new FileReader(file));
- String line;
- while((line = reader.readLine())!=null){
- shaderSource.append(line).append("\n");
- }
- reader.close();
- }catch(IOException ex){
- System.err.println("Could not read file");
- ex.printStackTrace();
- System.exit(-1);
- }
- int shaderID = GL20.glCreateShader(type);
- GL20.glShaderSource(shaderID, shaderSource);
- GL20.glCompileShader(shaderID);
- if(GL20.glGetShaderi(shaderID, GL20.GL_COMPILE_STATUS)==GL11.GL_FALSE){
- System.out.println(GL20.glGetShaderInfoLog(shaderID, 500));
- System.err.println("Could not compile");
- System.exit(-1);
- }
- return shaderID;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement