我正在尝试设置一个 EGLImage
,其中源兄弟是 GL_RENDERBUFFER
(指定为 EGLClientBuffer
参数的 eglCreateImageKHR
)。在另一个上下文中,我创建了一个 GL_TEXTURE_2D
并使用 EGLImage
将其指定为 glEGLImageTargetTexture2DOES
的目标兄弟。不幸的是,后一个调用导致 GL_INVALID_OPERATION
。如果源和目标 sibling 都是 GL_TEXTURE_2D
,则设置就像一个魅力。
从我对规范的阅读来看,这应该是一个允许的操作。我的简化测试用例也可能存在其他一些正交问题。虽然我对此表示怀疑,因为当源和目标 sibling 都是 GL_TEXTURE_2D
时,设置工作正常。但是,如果这是问题(并且 EGLImage
的这种用法是允许的),那么可能导致 GL_INVALID_OPERATION
的可能问题是什么。还是我对规范的解释有误?
引用扩展:
http://www.khronos.org/registry/gles/extensions/OES/OES_EGL_image.txt
http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_base.txt
说明:
EGL_KHR_image
、 EGL_KHR_image_base
、 EGL_KHR_gl_texture_2D_image
、 EGL_KHR_gl_renderbuffer_image
等)。 GL_RENDERBUFFER
和 GL_TEXTURE_2D
作为源时,EGLImage 的内部格式可能存在差异。所以我尝试首先使用 OES_EGL_image_external
扩展,将纹理作为源,然后是渲染缓冲区。纹理一如既往地工作正常,渲染缓冲区的 GL_INVALID_OPERATION
相同。绑定(bind)时使用外部图像对生成的错误没有影响。 最佳答案
恐怕这可能是一个合法的故障点。如果驱动程序无法从提供的 EGLImage 创建纹理,则会出现 GL_INVALID_OPERATION
错误。
http://www.khronos.org/registry/gles/extensions/OES/OES_EGL_image.txt
在将渲染缓冲区传递给 glFramebufferRenderbufferOES
之前,您是否使用渲染缓冲区调用 eglCreateImageKHR
?如果是这样,建议您尝试调整您创建渲染缓冲区的方式(例如尝试不同的格式、大小)以确定什么条件会导致您出现此错误。
关于android - 以渲染缓冲区作为源兄弟和纹理作为目标兄弟的 EGLImages,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23234006/