Advertisement
DarkRevenant

Untitled

May 1st, 2014
308
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.90 KB | None | 0 0
  1. package org.dark.shaders.invert;
  2.  
  3. import com.fs.starfarer.api.combat.ViewportAPI;
  4. import com.fs.starfarer.api.input.InputEventAPI;
  5.  
  6. import java.util.List;
  7.  
  8. import org.dark.shaders.util.ShaderAPI;
  9. import org.dark.shaders.util.ShaderHelper;
  10. import org.dark.shaders.util.ShaderLib;
  11.  
  12. import static org.lwjgl.opengl.GL20.*;
  13.  
  14. public class InvertShader implements ShaderAPI {
  15.  
  16.     private int program;
  17.     private boolean enabled = false;
  18.     private boolean active = false;
  19.  
  20.     @Override
  21.     public void renderInWorldCoords(ViewportAPI viewport) {
  22.         // Stub
  23.     }
  24.  
  25.     @Override
  26.     public void renderInScreenCoords(ViewportAPI viewport) {
  27.         // Stub
  28.     }
  29.  
  30.     @Override
  31.     public void advance(float amount, List<InputEventAPI> events) {
  32.         if (!enabled) {
  33.             return;
  34.         }
  35.  
  36.         for (InputEventAPI event : events) {
  37.             if (event.isConsumed()) {
  38.                 continue;
  39.             }
  40.  
  41.             if (event.isKeyDownEvent() && event.getEventValue() == org.lwjgl.input.Keyboard.KEY_PERIOD) {
  42.                 active = !active;
  43.                 event.consume();
  44.                 break;
  45.             }
  46.         }
  47.  
  48.         if (!active) {
  49.             return;
  50.         }
  51.  
  52.         invertScreen();
  53.     }
  54.  
  55.     @Override
  56.     public void initCombat() {
  57.     }
  58.  
  59.     @Override
  60.     public RenderOrder getRenderOrder() {
  61.         return RenderOrder.DISTORTED_SPACE;
  62.     }
  63.  
  64.     public InvertShader() {
  65.         if (!ShaderLib.areShadersAllowed()) {
  66.             return;
  67.         }
  68.  
  69.         String vertShader = "#version 110\n"
  70.                 + "\n"
  71.                 + "void main() {\n"
  72.                 + "    gl_Position = ftransform();\n"
  73.                 + "    gl_TexCoord[0] = gl_MultiTexCoord0;\n"
  74.                 + "}";
  75.  
  76.         String fragShader = "#version 110\n"
  77.                 + "\n"
  78.                 + "uniform sampler2D tex;\n"
  79.                 + "uniform vec2 boundary;\n"
  80.                 + "\n"
  81.                 + "vec2 coord = gl_TexCoord[0].xy;\n"
  82.                 + "\n"
  83.                 + "void main() {\n"
  84.                 + " if (coord.x <= boundary.x && coord.y <= boundary.y) {\n"
  85.                 + "     vec4 color = texture2D(tex, coord);\n"
  86.                 + "     gl_FragColor = vec4(1.0 - color.r, 1.0 - color.g, 1.0 - color.b, 1.0);\n"
  87.                 + " }\n"
  88.                 + "}";
  89.  
  90.         program = ShaderLib.loadShader(vertShader, fragShader);
  91.  
  92.         if (program == 0) {
  93.             return;
  94.         }
  95.  
  96.         enabled = true;
  97.     }
  98.  
  99.     private void invertScreen() {
  100.         ShaderLib.beginDraw(program);
  101.  
  102.         int index;
  103.         index = glGetUniformLocation(program, "tex");
  104.         glUniform1i(index, 0);
  105.         index = glGetUniformLocation(program, "boundary");
  106.         glUniform2f(index, ShaderLib.getVisibleU(), ShaderLib.getVisibleV());
  107.  
  108.         ShaderLib.screenDraw();
  109.  
  110.         ShaderLib.exitDraw();
  111.     }
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement