Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在opengl中绘制多个小位图_Java_Android_Performance_Opengl Es_Bitmap - Fatal编程技术网

Java 如何在opengl中绘制多个小位图

Java 如何在opengl中绘制多个小位图,java,android,performance,opengl-es,bitmap,Java,Android,Performance,Opengl Es,Bitmap,我是opengl新手,我想快速绘制许多位图。我给自己写了一些画位图的课程。如果我使用这些类来绘制一些大位图,速度会很快,但是如果我使用它们来绘制许多小位图,速度会很慢。这是我的密码: 画家班: public void draw(int id, FloatBuffer vertexBuffer) { // bind the previously generated texture gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[id

我是opengl新手,我想快速绘制许多位图。我给自己写了一些画位图的课程。如果我使用这些类来绘制一些大位图,速度会很快,但是如果我使用它们来绘制许多小位图,速度会很慢。这是我的密码:

画家班:

 public void draw(int id, FloatBuffer vertexBuffer) {
     // bind the previously generated texture
     gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[id]);

     // Point to our buffers
     gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
     gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

     gl.glEnable(GL10.GL_BLEND);
     gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);

     gl.glColor4f(1,1,1,1);

     // Set the face rotation
     gl.glFrontFace(GL10.GL_CW);

     // Point to our vertex buffer
     gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
     gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);

     // Draw the vertices as triangle strip      
     gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);

     //Disable the client state before leaving
     gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
     gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
 }
然后我这样称呼它:

 painter.draw(bmp, vert);
“bmp”是int值,vert是FloatBuffer。 位图在每一帧中的位置都会发生变化,因此我为每个位图计算每一帧中的FloatBuffer


你认为有更快的方法来绘制它吗?

我的建议是将需要渲染的所有位图的顶点放在一个大顶点数组中的一个帧中,然后一次性渲染。但是,为了避免手动切换纹理,您必须使用所有位图创建一个纹理图集,或者如果您可以使用这些位图(您需要OpenGL 3或EXT_texture_array)。

感谢您的快速回答,我将尝试制作一个大的顶点数组并一次性渲染。我使用OpenGL ES 2.0,我认为在这种情况下,您必须使用纹理图集。这可能会让你感兴趣:再次感谢,我会看一看,这需要一段时间,直到我可以测试它