Advertisement
Guest User

Untitled

a guest
Nov 7th, 2012
263
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.42 KB | None | 0 0
  1. public class ShaderBatch extends SpriteBatch {
  2.    
  3.     static final String vertexShader = "attribute vec4 " + ShaderProgram.POSITION_ATTRIBUTE + ";\n" //
  4.         + "attribute vec4 " + ShaderProgram.COLOR_ATTRIBUTE + ";\n" //
  5.         + "attribute vec2 " + ShaderProgram.TEXCOORD_ATTRIBUTE + "0;\n" //
  6.         + "uniform mat4 u_projTrans;\n" //
  7.         + "varying vec4 v_color;\n" //
  8.         + "varying vec2 v_texCoords;\n" //
  9.         + "\n" //
  10.         + "void main()\n" //
  11.         + "{\n" //
  12.         + "   v_color = " + ShaderProgram.COLOR_ATTRIBUTE + ";\n" //
  13.         + "   v_texCoords = " + ShaderProgram.TEXCOORD_ATTRIBUTE + "0;\n" //
  14.         + "   gl_Position =  u_projTrans * " + ShaderProgram.POSITION_ATTRIBUTE + ";\n" //
  15.         + "}\n";
  16.    
  17.     static final String fragmentShader = "#ifdef GL_ES\n" //
  18.         + "#define LOWP lowp\n" //
  19.         + "precision mediump float;\n" //
  20.         + "#else\n" //
  21.         + "#define LOWP \n" //
  22.         + "#endif\n" //
  23.         + "varying LOWP vec4 v_color;\n" //
  24.         + "varying vec2 v_texCoords;\n" //
  25.         + "uniform sampler2D u_texture;\n" //
  26.         + "uniform float brightness;\n" //
  27.         + "uniform float contrast;\n" //
  28.         + "void main()\n"//
  29.         + "{\n" //
  30.         + "  vec4 color = v_color * texture2D(u_texture, v_texCoords);\n"
  31.         + "  color.rgb /= color.a;\n" //ignore alpha
  32.         + "  color.rgb = ((color.rgb - 0.5) * max(contrast, 0.0)) + 0.5;\n" //apply contrast
  33.         + "  color.rgb += brightness;\n" //apply brightness
  34.         + "  color.rgb *= color.a;\n" //return alpha
  35.         + "  gl_FragColor = color;\n"
  36.         + "}";
  37.    
  38.     ShaderProgram shader;
  39.     public final boolean isCompiled;
  40.     public final String log;
  41.    
  42.     protected int brightnessLoc=-1, contrastLoc=-1;
  43.    
  44.     //ideally use getters/setters here...
  45.     public float brightness=0f;
  46.     public float contrast=1f;
  47.    
  48.     public ShaderBatch(int size) {
  49.         super(size);
  50.        
  51.         if (Gdx.graphics.isGL20Available()) {
  52.             ShaderProgram.pedantic = false;
  53.             shader = new ShaderProgram(vertexShader, fragmentShader);
  54.             isCompiled = shader.isCompiled();
  55.             log = shader.getLog();
  56.             if (isCompiled) {
  57.                 setShader(shader);
  58.                 begin();
  59.                 brightnessLoc = shader.getUniformLocation("brightness");
  60.                 contrastLoc = shader.getUniformLocation("contrast");
  61.                 end();
  62.             }
  63.         } else {
  64.             isCompiled = false;
  65.             log = "Shaders not supported in GL11";
  66.         }
  67.     }
  68.    
  69.     public void begin() {
  70.         super.begin();
  71.         if (brightnessLoc!=-1 && shader!=null)
  72.             shader.setUniformf(brightnessLoc, brightness);
  73.         if (contrastLoc!=-1 && shader!=null)
  74.             shader.setUniformf(contrastLoc, contrast);
  75.     }      
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement