sha*_*vey 5 iphone opengl-es cocos2d-iphone
我正在尝试使用glReadPixels读取alpha像素值.我做的第一件事就是单独读取像素.为了加快速度,我尝试一次读取所有像素:
GLubyte *pixels = new GLubyte[w*h*4];
glReadPixels(0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
Run Code Online (Sandbox Code Playgroud)
它工作,但真的很慢.现在我试图只检索alpha值,而不会浪费RGB组件的空间:
GLubyte *pixels = new GLubyte[w*h];
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glPixelStorei(GL_PACK_ALIGNMENT, 1);
glReadPixels(0, 0, w, h, GL_ALPHA, GL_UNSIGNED_BYTE, pixels);
Run Code Online (Sandbox Code Playgroud)
但我明白了:OpenGL error 0x0500 in -[EAGLView swapBuffers].
任何想法为什么INVALID_ENUM (0x0500)抛出?
根据关于OpenGL ES的glReadPixels()的文档, format参数唯一有效的枚举值是GL_RGBA和GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES.您需要检查并查看GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES作为iPhone格式的含义,但它可能无法提供支持GL_ALPHA.
无论如何,我怀疑那条路会大大加快你的读取速度,因为所有这一切都会丢弃RGB组件.glReadPixels()的性能问题可能在其他地方.可以在此处的讨论主题中找到对此原因的良好讨论.
您是否有可能渲染到由纹理支持的屏幕外帧缓冲区,然后使用该纹理在GPU上进行进一步处理?这听起来比使用它会产生更好的性能glReadPixels().
| 归档时间: |
|
| 查看次数: |
3188 次 |
| 最近记录: |