Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package org.dark.shaders.invert;
- import com.fs.starfarer.api.combat.ViewportAPI;
- import com.fs.starfarer.api.input.InputEventAPI;
- import java.util.List;
- import org.dark.shaders.util.ShaderAPI;
- import org.dark.shaders.util.ShaderHelper;
- import org.dark.shaders.util.ShaderLib;
- import static org.lwjgl.opengl.GL20.*;
- public class InvertShader implements ShaderAPI {
- private int program;
- private boolean enabled = false;
- private boolean active = false;
- @Override
- public void renderInWorldCoords(ViewportAPI viewport) {
- // Stub
- }
- @Override
- public void renderInScreenCoords(ViewportAPI viewport) {
- // Stub
- }
- @Override
- public void advance(float amount, List<InputEventAPI> events) {
- if (!enabled) {
- return;
- }
- for (InputEventAPI event : events) {
- if (event.isConsumed()) {
- continue;
- }
- if (event.isKeyDownEvent() && event.getEventValue() == org.lwjgl.input.Keyboard.KEY_PERIOD) {
- active = !active;
- event.consume();
- break;
- }
- }
- if (!active) {
- return;
- }
- invertScreen();
- }
- @Override
- public void initCombat() {
- }
- @Override
- public RenderOrder getRenderOrder() {
- return RenderOrder.DISTORTED_SPACE;
- }
- public InvertShader() {
- if (!ShaderLib.areShadersAllowed()) {
- return;
- }
- String vertShader = "#version 110\n"
- + "\n"
- + "void main() {\n"
- + " gl_Position = ftransform();\n"
- + " gl_TexCoord[0] = gl_MultiTexCoord0;\n"
- + "}";
- String fragShader = "#version 110\n"
- + "\n"
- + "uniform sampler2D tex;\n"
- + "uniform vec2 boundary;\n"
- + "\n"
- + "vec2 coord = gl_TexCoord[0].xy;\n"
- + "\n"
- + "void main() {\n"
- + " if (coord.x <= boundary.x && coord.y <= boundary.y) {\n"
- + " vec4 color = texture2D(tex, coord);\n"
- + " gl_FragColor = vec4(1.0 - color.r, 1.0 - color.g, 1.0 - color.b, 1.0);\n"
- + " }\n"
- + "}";
- program = ShaderLib.loadShader(vertShader, fragShader);
- if (program == 0) {
- return;
- }
- enabled = true;
- }
- private void invertScreen() {
- ShaderLib.beginDraw(program);
- int index;
- index = glGetUniformLocation(program, "tex");
- glUniform1i(index, 0);
- index = glGetUniformLocation(program, "boundary");
- glUniform2f(index, ShaderLib.getVisibleU(), ShaderLib.getVisibleV());
- ShaderLib.screenDraw();
- ShaderLib.exitDraw();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement