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