iphone - glReadPixels 和 GL_ALPHA

标签 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);

它确实有效,但速度非常慢。现在我尝试只检索 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);

但是我得到:-[EAGLView swapBuffers] 中的 OpenGL 错误 0x0500

知道为什么会抛出 INVALID_ENUM (0x0500) 吗?

最佳答案

根据documentation on glReadPixels() for OpenGL ES ,格式参数的唯一有效枚举值是 GL_RGBAGL_IMPLMENTATION_COLOR_READ_FORMAT_OES。您需要检查并了解 GL_IMPLMENTATION_COLOR_READ_FORMAT_OES 作为 iPhone 格式的含义,但它可能不提供对 GL_ALPHA 的支持。

无论如何,我怀疑走这条路会显着加快你的读取速度,因为这样做只会丢弃 RGB 分量。 glReadPixels() 的性能问题可能出在其他地方。关于其原因的很好的讨论可以在讨论线程 here 中找到。 .

您是否可以渲染到由纹理支持的离屏帧缓冲区,然后使用该纹理在 GPU 上进行进一步处理?这听起来比使用 glReadPixels() 会产生更好的性能。

关于iphone - glReadPixels 和 GL_ALPHA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4235812/

相关文章:

Iphone Objective-C 文本字段属性 auto CorrectionType 和 autocapitalizationType 不能同时工作

iphone - 在 View 中填充 UIScrollView w/PageControl

iphone - OpenGL ES(在 iOS 上): EXC_BAD_ACCESS on glDrawArrays call for sphere drawing

java - 如何在android中的opengl中实现撤销功能

iphone - 那里有什么好的 chipmunk/cocos2d 示例源吗?

iphone - 是否可以为 iPhone/iPod 应用程序音频添加效果?

ios - 如何从 View 中显示 View Controller ?

android - PowerVR SGX540 Android 纹理问题

objective-c - cocos2d ccTintTo,实现无限变化的颜色标签

ios - 如何在 Cocos2D 3.x 中为 CCSprite 制作动画?