Android opengl真的比画布慢得多吗?

时间:2011-12-16 14:11:30

标签: android performance opengl-es canvas

我修改了一个示例opengl应用程序,用于一些真正使opengl看起来很慢的速度测试,我想知道我在这里做错了什么。

“设置”,“加载”和“装订”和“渲染”是不同的功能,并在屏幕上显示正方形,但是以6 fps的速度显示。我写的相同代码使用canvas更快。

我能做些什么来加快速度,我的意思是加快这个速度?

(PS:我已经尝试过glDrawTexiOES,但速度更快,它仍然靠近画布)

// Setup of opengl
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);

// Loading & Binding of Texture
InputStream is = context.getResources().openRawResource(R.drawable.t2);
map = BitmapFactory.decodeStream(is);

gl.glGenTextures(1, textures, 0);

gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[i]);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);

gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_REPEAT);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_REPEAT);

GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, map, 0);


// Rendering

public void draw(GL10 g, int screenx, int screeny, int[] mem)
{   GL11 gl = (GL11) g;

    //Point to our buffers
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
    //Set the face rotation
    gl.glFrontFace(GL10.GL_CCW);
    //Enable the vertex and texture state
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
    gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);

    //Bind our only previously generated texture in this case
    gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
    //Draw the vertices as triangles, based on the Index Buffer information
    gl.glDrawElements(GL10.GL_TRIANGLES, indices.length, GL10.GL_UNSIGNED_BYTE, indexBuffer);

    // Cleanup
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);   
}

1 个答案:

答案 0 :(得分:1)

我尝试了你发布的代码,这对我没有任何问题。显然我的Galaxy S比Core i7 920上的模拟器更快(很多)。看到在实际设备上你的速度比模拟器慢,问题应该在SD卡上的文件写入。尝试对其进行注释,或者在数组/列表上写入,然后在关闭应用程序时在SD上写入数组(警告:数组/列表大小增长很快)。请记住,如果您每帧都在SD上写字,OpenGL必须每次至少等待15ms。 如果不是这样,你应该给我们更多的信息。