gpt4 book ai didi

Android OpenGL 缓冲和 glFlush

转载 作者:行者123 更新时间:2023-11-29 00:46:19 26 4
gpt4 key购买 nike

所以我正在制作一个使用 GLSurfaceView 的 Android 2.2 应用程序。我的问题是,由于 OpenGL 倾向于缓冲命令,这是否意味着它需要相关内存(例如调用 glTexSubImage2D() 时的位图)一直保留到完成为止?或者它是否使自己成为缓冲命令所需的任何内存的副本?

我问这个代码往往会导致长时间停顿并最终导致硬件 (HTC Desrire) 崩溃,但不会导致模拟器崩溃:

//bm is a Bitmap stored in a vector from previous commands
//pt is a Point stored at the same time
GLUtils.texSubImage2D(GL10.GL_TEXTURE_2D, 0, pt.x, pt.y, bm);
bm.recycle();

现在,如果我像这样添加 glFlush():

//bm is a Bitmap stored in a vector from previous commands
//pt is a Point stored at the same time
GLUtils.texSubImage2D(GL10.GL_TEXTURE_2D, 0, pt.x, pt.y, bm);
**AGL.glFlush();** //or glFinish
bm.recycle();

它看起来效果很好。现在这是 glFlush/glFinish 的实际功能,以防止从 OpenGL 下清除内存吗?

最佳答案

好问题。顺便说一下,使用纹理和顶点缓冲区对象后,一旦调用了实际为纹理加载图像数据的方法,就无需保留客户端内存中的缓冲区/数组。

不要将渲染缓冲区误认为是与纹理关联的内存。纹理图形保存在 GPU 的内存中,它们不是被刷新以最终绘制的缓冲区的一部分。

关于Android OpenGL 缓冲和 glFlush,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6217101/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com