我正在尝试设置一个 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_imageEGL_KHR_image_baseEGL_KHR_gl_texture_2D_imageEGL_KHR_gl_renderbuffer_image 等)。
  • 我还意识到,当我使用 GL_RENDERBUFFERGL_TEXTURE_2D 作为源时,EGLImage 的内部格式可能存在差异。所以我尝试首先使用 OES_EGL_image_external 扩展,将纹理作为源,然后是渲染缓冲区。纹理一如既往地工作正常,渲染缓冲区的 GL_INVALID_OPERATION 相同。绑定(bind)时使用外部图像对生成的错误没有影响。
  • 每次调用后都会检查 GL 和 EGL 错误。
  • 最佳答案

    恐怕这可能是一个合法的故障点。如果驱动程序无法从提供的 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/

    10-09 12:29