Advertisement
Guest User

Untitled

a guest
Dec 22nd, 2014
264
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.60 KB | None | 0 0
  1. public abstract class Shader {
  2.     private final int programID;
  3.     private final int vsID;
  4.     private final int fsID;
  5.    
  6.     public Shader(String name) {
  7.         programID = glCreateProgram();
  8.         vsID = loadShader(name+".vs", GL_VERTEX_SHADER);
  9.         fsID = loadShader(name+".fs", GL_FRAGMENT_SHADER);
  10.         glAttachShader(programID, vsID);
  11.         glAttachShader(programID, fsID);
  12.         bindAttributes();
  13.         glLinkProgram(programID);
  14.         glValidateProgram(programID);
  15.        
  16.         getAllUniformLocations();
  17.     }
  18.    
  19.     protected abstract void bindAttributes();
  20.     protected abstract void getAllUniformLocations();
  21.    
  22.     protected void bindAttribute(int attrib, String varName) {
  23.         glBindAttribLocation(programID, attrib, varName);
  24.     }
  25.    
  26.     protected int getUniformLocation(String varName) {
  27.         return glGetUniformLocation(programID, varName);
  28.     }
  29.    
  30.     public void loadMatrix(int loc, Matrix4f matrix) {
  31.         FloatBuffer matrixBuffer = BufferUtils.createFloatBuffer(16);
  32.         matrix.store(matrixBuffer);
  33.         matrixBuffer.flip();
  34.         glUniformMatrix4(loc, false, matrixBuffer);
  35.        
  36.         matrixBuffer = null;
  37.     }
  38.    
  39.     public void loadLight(int loc1, int loc2, Light light) {
  40.         loadVector(loc1, light.getPos());
  41.         loadVector(loc2, light.getColor());
  42.     }
  43.    
  44.     public void loadColor(int loc, float r, float g, float b) {
  45.         loadVector(loc, new Vector3f(r,g,b));
  46.     }
  47.    
  48.     public void loadShininess(int loc1, int loc2, float shineDamper, float refl) {
  49.         loadFloat(loc1, shineDamper);
  50.         loadFloat(loc2, refl);
  51.     }
  52.    
  53.     protected void loadVector(int loc, Vector3f vec) {
  54.         glUniform3f(loc, vec.x, vec.y,vec.z);
  55.     }
  56.    
  57.     protected void loadFloat(int loc, float value) {
  58.         glUniform1f(loc, value);
  59.     }
  60.    
  61.     public void loadBoolean(int loc, boolean value) {
  62.         if(value) {
  63.             loadFloat(loc, 1);
  64.         } else {
  65.             loadFloat(loc, 0);
  66.         }
  67.     }
  68.    
  69.     public void start() {
  70.         glUseProgram(programID);
  71.     }
  72.    
  73.     public void stop() {
  74.         glUseProgram(0);
  75.     }
  76.    
  77.     private int loadShader(String name, int type) {
  78.         StringBuilder shaderSource = new StringBuilder();
  79.         try {
  80.             BufferedReader reader = new BufferedReader(new FileReader(maindir+"/res/shader/"+name));
  81.             String line;
  82.             while((line = reader.readLine()) != null) {
  83.                 shaderSource.append(line).append("\n");
  84.             }
  85.         } catch (FileNotFoundException ex) {
  86.             Logger.getLogger(Shader.class.getName()).log(Level.SEVERE, null, ex);
  87.         } catch (IOException ex) {
  88.             Logger.getLogger(Shader.class.getName()).log(Level.SEVERE, null, ex);
  89.         }
  90.        
  91.         int shaderID = glCreateShader(type);
  92.         glShaderSource(shaderID, shaderSource);
  93.         glCompileShader(shaderID);
  94.         if(glGetShaderi(shaderID, GL_COMPILE_STATUS)==GL_FALSE) {
  95.             System.out.println(glGetShaderInfoLog(shaderID));
  96.             System.err.println("[SHADER] Could not compile shader");
  97.             GameClass.exit(1);
  98.         }
  99.        
  100.         return shaderID;
  101.     }
  102.    
  103.     public int getProgramID() {
  104.         return programID;
  105.     }
  106.    
  107.     public void delete() {
  108.         stop();
  109.         glDetachShader(programID, vsID);
  110.         glDetachShader(programID, fsID);
  111.         glDeleteShader(vsID);
  112.         glDeleteShader(fsID);
  113.         glDeleteProgram(programID);
  114.         System.out.println("[SHADER] Deleted shader # "+programID);
  115.     }
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement