StaticShader.java 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. package eu.tankernn.gameEngine.shaders;
  2. import java.util.List;
  3. import org.lwjgl.util.vector.Matrix4f;
  4. import org.lwjgl.util.vector.Vector2f;
  5. import org.lwjgl.util.vector.Vector3f;
  6. import org.lwjgl.util.vector.Vector4f;
  7. import eu.tankernn.gameEngine.entities.Camera;
  8. import eu.tankernn.gameEngine.entities.Light;
  9. import eu.tankernn.gameEngine.util.Maths;
  10. public class StaticShader extends ShaderProgram {
  11. private static final int MAX_LIGHTS = 4;
  12. private static final String VERTEX_FILE = "vertexShader.glsl";
  13. private static final String FRAGMENT_FILE = "fragmentShader.glsl";
  14. private int location_transformationMatrix;
  15. private int location_projecttionMatrix;
  16. private int location_viewMatrix;
  17. private int[] location_lightPosition;
  18. private int[] location_lightColor;
  19. private int[] location_attenuation;
  20. private int location_shineDamper;
  21. private int location_reflectivity;
  22. private int location_useFakeLighting;
  23. private int location_skyColor;
  24. private int location_numberOfRows;
  25. private int location_offset;
  26. private int location_plane;
  27. private int location_toShadowMapSpace;
  28. private int location_shadowMap;
  29. private int location_shadowDistance;
  30. private int location_specularMap;
  31. private int location_usesSpecularMap;
  32. private int location_modelTexture;
  33. private int location_cameraPosition;
  34. private int location_enviroMap;
  35. public StaticShader() {
  36. super(VERTEX_FILE, FRAGMENT_FILE);
  37. }
  38. @Override
  39. protected void bindAttributes() {
  40. super.bindAttribute(0, "position");
  41. super.bindAttribute(1, "textureCoords");
  42. super.bindAttribute(2, "normal");
  43. }
  44. @Override
  45. protected void getAllUniformLocations() {
  46. location_transformationMatrix = super.getUniformLocation("transformationMatrix");
  47. location_projecttionMatrix = super.getUniformLocation("projectionMatrix");
  48. location_viewMatrix = super.getUniformLocation("viewMatrix");
  49. location_shineDamper = super.getUniformLocation("shineDamper");
  50. location_reflectivity = super.getUniformLocation("reflectivity");
  51. location_useFakeLighting = super.getUniformLocation("useFakeLighting");
  52. location_skyColor = super.getUniformLocation("skyColor");
  53. location_numberOfRows = super.getUniformLocation("numberOfRows");
  54. location_offset = super.getUniformLocation("offset");
  55. location_plane = super.getUniformLocation("plane");
  56. location_toShadowMapSpace = super.getUniformLocation("toShadowMapSpace");
  57. location_shadowMap = super.getUniformLocation("shadowMap");
  58. location_shadowDistance = super.getUniformLocation("shadowDistance");
  59. location_specularMap = super.getUniformLocation("specularMap");
  60. location_usesSpecularMap = super.getUniformLocation("usesSpecularMap");
  61. location_modelTexture = super.getUniformLocation("modelTexture");
  62. location_cameraPosition = super.getUniformLocation("cameraPosition");
  63. location_enviroMap = super.getUniformLocation("enviroMap");
  64. location_lightPosition = new int[MAX_LIGHTS];
  65. location_lightColor = new int[MAX_LIGHTS];
  66. location_attenuation = new int[MAX_LIGHTS];
  67. for (int i = 0; i < MAX_LIGHTS; i++) {
  68. location_lightPosition[i] = super.getUniformLocation("lightPosition[" + i + "]");
  69. location_lightColor[i] = super.getUniformLocation("lightColor[" + i + "]");
  70. location_attenuation[i] = super.getUniformLocation("attenuation[" + i + "]");
  71. }
  72. }
  73. public void connectTextureUnits() {
  74. super.loadInt(location_shadowMap, 5);
  75. super.loadInt(location_modelTexture, 0);
  76. super.loadInt(location_specularMap, 1);
  77. super.loadInt(location_enviroMap, 10);
  78. }
  79. public void loadUseSpecularMap(boolean useSpecularMap) {
  80. super.loadBoolean(location_usesSpecularMap, useSpecularMap);
  81. }
  82. public void loadShadowDistance(float distance) {
  83. super.loadFloat(location_shadowDistance, distance);
  84. }
  85. public void loadToShadowSpaceMatrix(Matrix4f matrix) {
  86. super.loadMatrix(location_toShadowMapSpace, matrix);
  87. }
  88. public void loadClipPlane(Vector4f plane) {
  89. super.loadVector(location_plane, plane);
  90. }
  91. public void loadNumberOfRows(int numberOfRows) {
  92. super.loadFloat(location_numberOfRows, numberOfRows);
  93. }
  94. public void loadOffset(float x, float y) {
  95. super.load2DVector(location_offset, new Vector2f(x, y));
  96. }
  97. public void loadSkyColor(float r, float g, float b) {
  98. super.loadVector(location_skyColor, new Vector3f(r, g, b));
  99. }
  100. public void loadFakeLightingVariable(boolean useFake) {
  101. super.loadBoolean(location_useFakeLighting, useFake);
  102. }
  103. public void loadShineVariables(float damper, float reflectivity) {
  104. super.loadFloat(location_shineDamper, damper);
  105. super.loadFloat(location_reflectivity, reflectivity);
  106. }
  107. public void loadTransformationMatrix(Matrix4f matrix) {
  108. super.loadMatrix(location_transformationMatrix, matrix);
  109. }
  110. public void loadCameraPosition(Vector3f vector) {
  111. super.loadVector(location_cameraPosition, vector);
  112. }
  113. public void loadLights(List<Light> lights) {
  114. for (int i = 0; i < MAX_LIGHTS; i++) {
  115. if (i < lights.size()) {
  116. super.loadVector(location_lightPosition[i], lights.get(i).getPosition());
  117. super.loadVector(location_lightColor[i], lights.get(i).getColor());
  118. super.loadVector(location_attenuation[i], lights.get(i).getAttenuation());
  119. } else {
  120. super.loadVector(location_lightPosition[i], new Vector3f(0, 0, 0));
  121. super.loadVector(location_lightColor[i], new Vector3f(0, 0, 0));
  122. super.loadVector(location_attenuation[i], new Vector3f(1, 0, 0));
  123. }
  124. }
  125. }
  126. public void loadViewMatrix(Camera camera) {
  127. Matrix4f viewMatrix = Maths.createViewMatrix(camera);
  128. super.loadMatrix(location_viewMatrix, viewMatrix);
  129. }
  130. public void loadProjectionMatrix(Matrix4f projection) {
  131. super.loadMatrix(location_projecttionMatrix, projection);
  132. }
  133. }