微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

渲染缓冲区作为源兄弟和纹理作为目标兄弟的EGLImages

我想设置一个EGLImage源兄弟是一个GL_RENDERBUFFER ( EGLClientBuffer指定为EGLClientBuffer的参数)。 在另一个上下文中,我使用GL_TEXTURE_2D创build一个GL_TEXTURE_2D并将其指定为GL_TEXTURE_2D的目标兄弟。 不幸的是,后者调用导致GL_INVALID_OPERATION 。 如果源和目标兄弟姐妹都是GL_TEXTURE_2D ,则设置就像一个魅力。

从我的阅读说明书,这应该是一个允许的操作。 我的简化testing用例还有其他一些正交的问题。 虽然我怀疑这个,因为当源和目标同胞都是GL_TEXTURE_2D时,设置工作正常。 但是,如果这是问题(并且EGLImage的这种用法是EGLImage的),可能会导致GL_INVALID_OPERATION问题是什么。 或者我只是误解了我对规范的解释?

引用的扩展:

http://www.khronos.org/registry/gles/extensions/OES/OES_EGL_image.txt

任何人都知道如何解决Android Studio中的“无法parsing符号”注入“错误

发送AT命令到串口,并在android中得到答案

如何使用Samsumg galaxy 5设备开发Android应用程序?

Android的USB驱动程序是否可以互换?

adb没有看到android实例的visual studio模拟器

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 。 绑定时使用外部图像对生成错误没有影响。

GL和EGL错误在每次调用后都会被检查。

使用adbshell连接到wi-fi

multipartentity不能被parsing为一个types

定位独立可执行文件和Android棒棒糖

在android和windows之间同步文件的最佳方法

dev服务器返回的错误代码403反应原生

恐怕这可能是一个合法的失败点。 如果驱动程序无法从提供的EGLImage中创建纹理,则会出现GL_INVALID_OPERATION错误

http://www.khronos.org/registry/gles/extensions/OES/OES_EGL_image.txt

如果GL无法使用提供的eglImageOES指定纹理对象(例如,如果指的是多采样eglImageOES),则会生成错误INVALID_OPERATION。

在将它传递给eglCreateImageKHR之前,您是否使用glFramebufferRenderbufferOES调用eglCreateImageKHR ? 如果是这样,建议您尝试调整您的创建渲染缓冲区(例如尝试不同的格式,大小)来确定哪些情况会导致此错误

在遇到这个问题之后,我花了很多时间在这个和EGLImage上。 阿罗诺巴赫的假设是正确的。

如果由于某种原因,驱动程序不能从提供的EGLImage创建一个纹理兄弟,那么会返回一个模糊的GL_INVALID_OPERATION 。 我的印象是,如果我能够创建一个有效的EGLImage (即,不是EGL_NO_IMAGE_KHR ),并且支持相应的扩展,我可以使用rendebuffer或texture兄弟(在GL_OES_EGL_image )将其绑定到相同的位置。 当然不是这样的。 它也似乎有很大的不同,从设备到设备。 我能够在NVidia Tegra单元上工作,但不能在Adreno 320 。

这是否意味着在Android上可靠地使用EGLImages是不可能的? 不完全的。 特别是对于我遇到的问题,我可以通过将扩展GL_OES_rgb8_rgba8中的GL_OES_rgb8_rgba8指定为源渲染缓冲区( glrenderbufferStorage参数2)的内部格式,将纹理兄弟绑定到使用渲染缓冲区源创建的glrenderbufferStorage 。 这不是理想的,但证明了源和目标兄弟姐妹的内部格式必须匹配的点,并且如果不匹配,驾驶员没有义务适应变化并且可以自由放弃。

尝试成功使用EGLImage的另一个熵源(至少在Android是一般的)是创建EGLImage的方式。 我发现使用EGL_ANDROID_image_native_buffer扩展中指定的EGL_NATIVE_BUFFER_ANDROID目标创建一个EGLImage是可靠的。 如果这样的扩展可用于您的平台,强烈建议以后备方式使用它们。

总之,似乎对我来说可靠工作的解决方案似乎是先尝试使用任何和所有可用的扩展以后备方式创建一个有效的EGLImage 。 然后使用该EGLImage尝试绑定到目标兄弟类型。 如果这对操作不产生错误,那么该设备支持EGLImage / TargetKind对,并可用于后续操作。 如果任一操作失败,则检查后备链中的下一个项目。 如果一切都失败了,一个不使用EGLImage的解决方案应该可能存在。 我还没有遇到过这样的Android设备(手指交叉)

我仍然发现角落案件和优化,并将保持这个答案与调查结果更新。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐