PostProcessing.java 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package eu.tankernn.gameEngine.postProcessing;
  2. import org.lwjgl.opengl.Display;
  3. import org.lwjgl.opengl.GL11;
  4. import org.lwjgl.opengl.GL20;
  5. import org.lwjgl.opengl.GL30;
  6. import eu.tankernn.gameEngine.models.RawModel;
  7. import eu.tankernn.gameEngine.postProcessing.bloom.BrightFilter;
  8. import eu.tankernn.gameEngine.postProcessing.bloom.CombineFilter;
  9. import eu.tankernn.gameEngine.postProcessing.gaussianBlur.HorizontalBlur;
  10. import eu.tankernn.gameEngine.postProcessing.gaussianBlur.VerticalBlur;
  11. import eu.tankernn.gameEngine.renderEngine.Loader;
  12. public class PostProcessing {
  13. private static final int blurFactor = 2;
  14. private static final float[] POSITIONS = {-1, 1, -1, -1, 1, 1, 1, -1};
  15. private static RawModel quad;
  16. private static ContrastChanger contrastChanger;
  17. private static HorizontalBlur hBlur[] = new HorizontalBlur[blurFactor];
  18. private static VerticalBlur vBlur[] = new VerticalBlur[blurFactor];
  19. private static BrightFilter brightFilter;
  20. private static CombineFilter combineFilter;
  21. public static void init(Loader loader) {
  22. quad = loader.loadToVAO(POSITIONS, 2);
  23. contrastChanger = new ContrastChanger();
  24. for (int i = 0; i < blurFactor; i++) {
  25. int temp = i + 1;
  26. hBlur[i] = new HorizontalBlur(Display.getWidth() / temp, Display.getHeight() / temp);
  27. vBlur[i] = new VerticalBlur(Display.getWidth() / temp, Display.getHeight() / temp);
  28. }
  29. brightFilter = new BrightFilter(Display.getWidth() / 2, Display.getHeight() / 2);
  30. combineFilter = new CombineFilter();
  31. }
  32. public static void doPostProcessing(int colorTexture, int brightTexture) {
  33. start();
  34. //brightFilter.render(colorTexture);
  35. int bloomTexture = brightTexture;
  36. for (int i = 0; i < blurFactor; i++) {
  37. hBlur[i].render(bloomTexture);
  38. vBlur[i].render(hBlur[i].getOutputTexture());
  39. bloomTexture = vBlur[i].getOutputTexture();
  40. }
  41. combineFilter.render(colorTexture, bloomTexture);
  42. //contrastChanger.render(bloomTexture);
  43. end();
  44. }
  45. public static void cleanUp() {
  46. contrastChanger.cleanUp();
  47. for (int i = 0; i < blurFactor; i++) {
  48. hBlur[i].cleanUp();
  49. vBlur[i].cleanUp();
  50. }
  51. brightFilter.cleanUp();
  52. combineFilter.cleanUp();
  53. }
  54. private static void start() {
  55. GL30.glBindVertexArray(quad.getVaoID());
  56. GL20.glEnableVertexAttribArray(0);
  57. GL11.glDisable(GL11.GL_DEPTH_TEST);
  58. }
  59. private static void end() {
  60. GL11.glEnable(GL11.GL_DEPTH_TEST);
  61. GL20.glDisableVertexAttribArray(0);
  62. GL30.glBindVertexArray(0);
  63. }
  64. }