Advertisement
Guest User

Shader

a guest
May 9th, 2015
13
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.13 KB | None | 0 0
  1. package net.lesson.graphics.shaders;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.FileReader;
  5. import java.io.IOException;
  6. import org.lwjgl.opengl.*;
  7. import org.lwjgl.opengl.GL20;
  8.  
  9. public abstract class Shader {
  10.  
  11.     private int programID;
  12.     private int vertexShaderID;
  13.     private int fragmentShaderID;
  14.    
  15.     public Shader(String vertexFile, String fragmentFile){
  16.         vertexShaderID =loadShader(vertexFile,GL20.GL_VERTEX_SHADER);
  17.         fragmentShaderID =loadShader(fragmentFile,GL20.GL_FRAGMENT_SHADER);
  18.         programID = GL20.glCreateProgram();
  19.         GL20.glAttachShader(programID, vertexShaderID);
  20.         GL20.glAttachShader(programID, fragmentShaderID);
  21.    
  22.         GL20.glLinkProgram(programID);
  23.         GL20.glValidateProgram(programID);
  24.         bindAttributes(vertexShaderID, vertexFile);
  25.         bindAttributes(fragmentShaderID, fragmentFile);
  26.     }
  27.    
  28.  
  29.     protected void bindAttributes(int attribute, String varibaleName){
  30.        
  31.         GL20.glBindAttribLocation(programID, attribute, varibaleName);
  32.     }
  33.    
  34. public void start(){
  35.     GL20.glUseProgram(programID);
  36. }
  37.     public void stop(){
  38.         GL20.glUseProgram(0);
  39.     }
  40.     public void cleanUp(){
  41.         stop();
  42.         GL20.glDetachShader(programID, vertexShaderID);
  43.         GL20.glDetachShader(programID, fragmentShaderID);
  44.         GL20.glDeleteShader(vertexShaderID);
  45.         GL20.glDeleteShader(fragmentShaderID);
  46.         GL20.glDeleteProgram(programID);
  47.     }
  48.     private static int loadShader(String file, int type){
  49.         StringBuilder shaderSource = new StringBuilder();
  50.         try{
  51.             BufferedReader reader = new BufferedReader(new FileReader(file));
  52.             String line;
  53.             while((line = reader.readLine())!=null){
  54.         shaderSource.append(line).append("\n");
  55.             }
  56.             reader.close();
  57.             }catch(IOException ex){
  58.                 System.err.println("Could not read file");
  59.                 ex.printStackTrace();
  60.                 System.exit(-1);
  61.         }
  62.         int shaderID = GL20.glCreateShader(type);
  63.         GL20.glShaderSource(shaderID, shaderSource);
  64.         GL20.glCompileShader(shaderID);
  65.         if(GL20.glGetShaderi(shaderID, GL20.GL_COMPILE_STATUS)==GL11.GL_FALSE){
  66.             System.out.println(GL20.glGetShaderInfoLog(shaderID, 500));
  67.             System.err.println("Could not compile");
  68.             System.exit(-1);
  69.         }
  70.         return shaderID;
  71.        
  72.     }
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement