Advertisement
Guest User

Untitled

a guest
Mar 26th, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.76 KB | None | 0 0
  1. public SpriteBatch (int size, ShaderProgram defaultShader) {
  2. // 32767 is max vertex index, so 32767 / 4 vertices per sprite = 8191 sprites max.
  3. if (size > 8191) throw new IllegalArgumentException("Can't have more than 8191 sprites per batch: " + size);
  4.  
  5. VertexDataType vertexDataType = (Gdx.gl30 != null) ? VertexDataType.VertexBufferObjectWithVAO : defaultVertexDataType;
  6.  
  7. mesh = new Mesh(vertexDataType, false, size * 4, size * 6,
  8. new VertexAttribute(Usage.Position, 2, ShaderProgram.POSITION_ATTRIBUTE),
  9. new VertexAttribute(Usage.ColorPacked, 4, ShaderProgram.COLOR_ATTRIBUTE),
  10. new VertexAttribute(Usage.TextureCoordinates, 2, ShaderProgram.TEXCOORD_ATTRIBUTE + "0"));
  11.  
  12. projectionMatrix.setToOrtho2D(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
  13.  
  14. vertices = new float[size * Sprite.SPRITE_SIZE];
  15.  
  16. int len = size * 6;
  17. short[] indices = new short[len];
  18. short j = 0;
  19. for (int i = 0; i < len; i += 6, j += 4) {
  20. indices[i] = j;
  21. indices[i + 1] = (short)(j + 1);
  22. indices[i + 2] = (short)(j + 2);
  23. indices[i + 3] = (short)(j + 2);
  24. indices[i + 4] = (short)(j + 3);
  25. indices[i + 5] = j;
  26. }
  27. mesh.setIndices(indices);
  28.  
  29. if (defaultShader == null) {
  30. shader = createDefaultShader();
  31. ownsShader = true;
  32. } else
  33. shader = defaultShader;
  34. }
  35.  
  36. /** Returns a new instance of the default shader used by SpriteBatch for GL2 when no shader is specified. */
  37. static public ShaderProgram createDefaultShader () {
  38. String vertexShader = "attribute vec4 " + ShaderProgram.POSITION_ATTRIBUTE + ";\n" //
  39. + "attribute vec4 " + ShaderProgram.COLOR_ATTRIBUTE + ";\n" //
  40. + "attribute vec2 " + ShaderProgram.TEXCOORD_ATTRIBUTE + "0;\n" //
  41. + "uniform mat4 u_projTrans;\n" //
  42. + "varying vec4 v_color;\n" //
  43. + "varying vec2 v_texCoords;\n" //
  44. + "\n" //
  45. + "void main()\n" //
  46. + "{\n" //
  47. + " v_color = " + ShaderProgram.COLOR_ATTRIBUTE + ";\n" //
  48. + " v_color.a = v_color.a * (255.0/254.0);\n" //
  49. + " v_texCoords = " + ShaderProgram.TEXCOORD_ATTRIBUTE + "0;\n" //
  50. + " gl_Position = u_projTrans * " + ShaderProgram.POSITION_ATTRIBUTE + ";\n" //
  51. + "}\n";
  52. String fragmentShader = "#ifdef GL_ES\n" //
  53. + "#define LOWP lowp\n" //
  54. + "precision mediump float;\n" //
  55. + "#else\n" //
  56. + "#define LOWP \n" //
  57. + "#endif\n" //
  58. + "varying LOWP vec4 v_color;\n" //
  59. + "varying vec2 v_texCoords;\n" //
  60. + "uniform sampler2D u_texture;\n" //
  61. + "void main()\n"//
  62. + "{\n" //
  63. + " gl_FragColor = v_color * texture2D(u_texture, v_texCoords);\n" //
  64. + "}";
  65.  
  66. ShaderProgram shader = new ShaderProgram(vertexShader, fragmentShader);
  67. if (!shader.isCompiled()) throw new IllegalArgumentException("Error compiling shader: " + shader.getLog());
  68. return shader;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement