我一直在尝试添加对GL_RGB_422_APPLE的支持。
internalFormat = GL_RGB;
pixelFormat = GL_RGB_422_APPLE;
PixelType = GL_UNSIGNED_SHORT_8_8_APPLE;
glTexImage2D(GL_TEXTURE_2D, 0, InternalFormat, 2048, 2048, 0, PixelFormat, PixelType, 0);
但是`glCheckFramebufferStatus`正在返回GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT错误。
它适用于以下格式:internalFormat = GL_RGB;
pixelFormat = GL_RGB;
PixelType = GL_UNSIGNED_BYTE;
还有其他步骤可以支持GL_RGB_422_APPLE吗?
在我们的项目中,我们使用的纹理只为每个像素存储bool值(0/1)。对于存储bool值16bits / pixel是如此昂贵。这就是为什么我正在寻找上面的实现。
答案 0 :(得分:1)
作为一名纯粹的OpenGL开发人员,您不能为任何事情“添加支持”。这是实施者的工作。使用OpenGL ES(GLES)2.0,除非得到扩展程序的支持,否则您无法使用RGB_422_APPLE
作为帧缓冲附件。实际上,GLES 2.0规范甚至没有提到任何大小的内部格式。奇怪的是,他们做使用大小的内部格式来描述帧缓冲附件何时是合法的并且不会损害帧缓冲完整性。
无论如何,即使您确实支持常规纹理和RGBA_422_APPLE
通过适当的扩展,也没有说明[size internal]格式是否以及如何合法用作帧缓冲附件和通过略读所述格式的extension spec,没有迹象表明它是合法的。
我猜你在这个特殊情况下运气不好。
编辑:为了澄清,为了能够使用非深度/非模板纹理作为帧缓冲附件,必须 颜色可渲染。上面提到的规范没有提到任何关于这个问题的内容,你正在使用的实现似乎也是如此。