Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public SpriteBatch (int size, ShaderProgram defaultShader) {
- // 32767 is max vertex index, so 32767 / 4 vertices per sprite = 8191 sprites max.
- if (size > 8191) throw new IllegalArgumentException("Can't have more than 8191 sprites per batch: " + size);
- VertexDataType vertexDataType = (Gdx.gl30 != null) ? VertexDataType.VertexBufferObjectWithVAO : defaultVertexDataType;
- mesh = new Mesh(vertexDataType, false, size * 4, size * 6,
- new VertexAttribute(Usage.Position, 2, ShaderProgram.POSITION_ATTRIBUTE),
- new VertexAttribute(Usage.ColorPacked, 4, ShaderProgram.COLOR_ATTRIBUTE),
- new VertexAttribute(Usage.TextureCoordinates, 2, ShaderProgram.TEXCOORD_ATTRIBUTE + "0"));
- projectionMatrix.setToOrtho2D(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
- vertices = new float[size * Sprite.SPRITE_SIZE];
- int len = size * 6;
- short[] indices = new short[len];
- short j = 0;
- for (int i = 0; i < len; i += 6, j += 4) {
- indices[i] = j;
- indices[i + 1] = (short)(j + 1);
- indices[i + 2] = (short)(j + 2);
- indices[i + 3] = (short)(j + 2);
- indices[i + 4] = (short)(j + 3);
- indices[i + 5] = j;
- }
- mesh.setIndices(indices);
- if (defaultShader == null) {
- shader = createDefaultShader();
- ownsShader = true;
- } else
- shader = defaultShader;
- }
- /** Returns a new instance of the default shader used by SpriteBatch for GL2 when no shader is specified. */
- static public ShaderProgram createDefaultShader () {
- String vertexShader = "attribute vec4 " + ShaderProgram.POSITION_ATTRIBUTE + ";\n" //
- + "attribute vec4 " + ShaderProgram.COLOR_ATTRIBUTE + ";\n" //
- + "attribute vec2 " + ShaderProgram.TEXCOORD_ATTRIBUTE + "0;\n" //
- + "uniform mat4 u_projTrans;\n" //
- + "varying vec4 v_color;\n" //
- + "varying vec2 v_texCoords;\n" //
- + "\n" //
- + "void main()\n" //
- + "{\n" //
- + " v_color = " + ShaderProgram.COLOR_ATTRIBUTE + ";\n" //
- + " v_color.a = v_color.a * (255.0/254.0);\n" //
- + " v_texCoords = " + ShaderProgram.TEXCOORD_ATTRIBUTE + "0;\n" //
- + " gl_Position = u_projTrans * " + ShaderProgram.POSITION_ATTRIBUTE + ";\n" //
- + "}\n";
- String fragmentShader = "#ifdef GL_ES\n" //
- + "#define LOWP lowp\n" //
- + "precision mediump float;\n" //
- + "#else\n" //
- + "#define LOWP \n" //
- + "#endif\n" //
- + "varying LOWP vec4 v_color;\n" //
- + "varying vec2 v_texCoords;\n" //
- + "uniform sampler2D u_texture;\n" //
- + "void main()\n"//
- + "{\n" //
- + " gl_FragColor = v_color * texture2D(u_texture, v_texCoords);\n" //
- + "}";
- ShaderProgram shader = new ShaderProgram(vertexShader, fragmentShader);
- if (!shader.isCompiled()) throw new IllegalArgumentException("Error compiling shader: " + shader.getLog());
- return shader;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement