通过只有一个glDrawArray调用来绘制更多的四元组?

编辑

在最初认为我的精灵批量testing比单独调用每个精灵更快之后,看起来情况并非如此! 🙁

通过一组GL调用每个精灵,我可以获得大约90个四边形移动而不降低性能

通过我的批量testing,我可以得到12(全部在一个电话)。

问题在于我无法在任何地方find任何示例(代码),以了解如何使用Android(Java)和OpenGL ES 2.0实现这一点。

我的方法涉及传递一个坐标集数组,而不是一组坐标,然后该方法将建立一个数组来存储这些坐标,然后渲染相关数量的顶点。 就像我说的,它的工作原理,但性能是可怕的! 这是正确的方法吗?

谁能帮忙? 谢谢!

我正在使用Android与openGLES 2.0,我不能解决如何绘制2(或更多,但为了简单起见,让暂时说2)纹理四方只使用1调用glDrawArrays。

我的着色器是相当标准的,并考虑到精灵不透明度,如下所示:

//vertex shader String strVShader = "uniform mat4 uMVPMatrix;" + "attribute vec4 a_position;\n"+ "attribute vec2 a_texCoords;" + "varying vec2 v_texCoords;" + "void main()\n" + "{\n" + "gl_Position = uMVPMatrix * a_position;\n"+ "v_texCoords = a_texCoords;" + "}"; //Fragment shader String strFShader = "precision mediump float;" + "uniform float opValue;"+ "varying vec2 v_texCoords;" + "uniform sampler2D u_baseMap;" + "void main()" + "{" + "gl_FragColor = texture2D(u_baseMap, v_texCoords);" + "gl_FragColor *= opValue;"+ "}"; 

然后我的渲染方法需要顶点设置四边形的位置和大小,设置纹理,应用旋转(如果有的话)等…

然后用下面一行描述:

 GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4); 

我一直在寻找几天的例子来说明如何实现这个目标,但似乎并没有解释它是如何实现的。

任何人都可以给我任何线索?

注:为了保持简短的问题,我省略了我的实际绘制方法。 如果需要这个更全面的答案,请问,我会发布。

另外请注意,我需要这样做,因为我正在试图如何批量我的精灵,以提高性能。

glDrawArrays声明传入的glDrawArrays值指定了一个原始types,一个开始索引和一个索引计数。 假设每个索引代表一个顶点,则需要指定多于4个索引才能绘制多个四边形。

http://www.opengl.org/sdk/docs/man/xhtml/glDrawArrays.xml