Advertisement
mbl111

Shader.java

Dec 12th, 2013
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.78 KB | None | 0 0
  1. package com.mbl111.engine.shaders;
  2.  
  3. import static org.lwjgl.opengl.GL20.*;
  4. import static org.lwjgl.opengl.GL32.*;
  5.  
  6. import java.io.BufferedReader;
  7. import java.io.FileReader;
  8. import java.util.HashMap;
  9.  
  10. import com.mbl111.engine.Material;
  11. import com.mbl111.engine.Matrix4f;
  12. import com.mbl111.engine.RenderUtil;
  13. import com.mbl111.engine.Util;
  14. import com.mbl111.engine.Vector3f;
  15.  
  16. public class Shader {
  17.  
  18. private int program;
  19. private HashMap<String, Integer> uniforms;
  20.  
  21. public Shader() {
  22. program = glCreateProgram();
  23. uniforms = new HashMap<String, Integer>();
  24.  
  25. if (program == 0) {
  26. System.err.println("Shader Creation Failed! No valid memory location found");
  27. System.exit(1);
  28. }
  29.  
  30. }
  31.  
  32. public void bind() {
  33. glUseProgram(program);
  34. }
  35.  
  36. private static String loadShader(String filename) {
  37. StringBuilder source = new StringBuilder();
  38. BufferedReader reader = null;
  39.  
  40. try {
  41. reader = new BufferedReader(new FileReader("./res/shaders/" + filename));
  42.  
  43. String line;
  44.  
  45. while ((line = reader.readLine()) != null) {
  46. source.append(line).append("\n");
  47. }
  48.  
  49. reader.close();
  50. } catch (Exception e) {
  51. System.err.println("Failed to read shader");
  52. e.printStackTrace();
  53. System.exit(1);
  54. }
  55.  
  56. return source.toString();
  57. }
  58.  
  59. public void updateUniforms(Matrix4f worldMatrix, Matrix4f projectedMatrix, Material material) {
  60. }
  61.  
  62. public void setMaterial(Material material) {
  63.  
  64. }
  65.  
  66. public void addUniform(String uniform) {
  67. int uniformLocation = glGetUniformLocation(program, uniform);
  68.  
  69. if (uniformLocation == 0xFFFFFFFF) {
  70. System.err.println("Uniform Variable Creation Failed! " + uniform);
  71. new Exception().printStackTrace();
  72. System.exit(1);
  73. }
  74.  
  75. uniforms.put(uniform, uniformLocation);
  76. }
  77.  
  78. public void addVertexShaderFromFile(String text) {
  79. addProgram(loadShader(text), GL_VERTEX_SHADER);
  80. }
  81.  
  82. public void addGeometryShaderFromFile(String text) {
  83. addProgram(loadShader(text), GL_GEOMETRY_SHADER);
  84. }
  85.  
  86. public void addFragmentShaderFromFile(String text) {
  87. addProgram(loadShader(text), GL_FRAGMENT_SHADER);
  88. }
  89.  
  90. public void addVertexShader(String text) {
  91. addProgram(text, GL_VERTEX_SHADER);
  92. }
  93.  
  94. public void addGeometryShader(String text) {
  95. addProgram(text, GL_GEOMETRY_SHADER);
  96. }
  97.  
  98. public void addFragmentShader(String text) {
  99. addProgram(text, GL_FRAGMENT_SHADER);
  100. }
  101.  
  102. public void compileShader() {
  103.  
  104. glLinkProgram(program);
  105.  
  106. if (glGetProgram(program, GL_LINK_STATUS) == 0) {
  107. System.err.println("Shader Creation Failed!" + glGetShaderInfoLog(program, 1024));
  108. System.exit(1);
  109. }
  110.  
  111. glValidateProgram(program);
  112.  
  113. if (glGetProgram(program, GL_VALIDATE_STATUS) == 0) {
  114. System.err.println("Shader Creation Failed!" + glGetShaderInfoLog(program, 1024));
  115. System.exit(1);
  116. }
  117. }
  118.  
  119. private void addProgram(String text, int type) {
  120. int shader = glCreateShader(type);
  121.  
  122. if (shader == 0) {
  123. System.err.println("Shader Creation Failed! No valid memory location found while adding shader");
  124. System.exit(1);
  125. }
  126.  
  127. glShaderSource(shader, text);
  128. glCompileShader(shader);
  129.  
  130. if (glGetShader(shader, GL_COMPILE_STATUS) == 0) {
  131. System.err.println("Shader Creation Failed!" + glGetShaderInfoLog(shader, 1024));
  132. System.exit(1);
  133. }
  134.  
  135. glAttachShader(program, shader);
  136.  
  137. }
  138.  
  139. public void setUniformi(String uniform, int value) {
  140. glUniform1i(uniforms.get(uniform), value);
  141. }
  142.  
  143. public void setUniformf(String uniform, float value) {
  144. glUniform1f(uniforms.get(uniform), value);
  145. }
  146.  
  147. public void setUniform(String uniform, Vector3f vec) {
  148. glUniform3f(uniforms.get(uniform), vec.getX(), vec.getY(), vec.getZ());
  149. }
  150.  
  151. public void setUniform(String uniform, Matrix4f mat) {
  152. glUniformMatrix4(uniforms.get(uniform), true, Util.createFlippedBuffer(mat));
  153. }
  154.  
  155. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement