【发布时间】:2016-02-02 03:15:31
【问题描述】:
为了在 SurfaceTexture 上执行高斯模糊,我正在执行双通道渲染,这意味着我将纹理通过一个着色器(水平模糊),然后通过另一个着色器(垂直模糊)。
我理解这背后的理论:将第一个纹理渲染到 FBO,第二个渲染到 SurfaceTexture 本身。
有一些这样的例子,但它们似乎都不适用,因为 SurfaceTexture 在 glBindTexture 中使用 GL_TEXTURE_EXTERNAL_OES 作为其目标,而不是 GL_TEXTURE_2D。所以在调用glFramebufferTexture2D时,GL_TEXTURE_2D不能作为textarget,我认为GL_TEXTURE_EXTERNAL_OES不能在这个调用中使用。
谁能建议一种方法来渲染纹理两次,最终渲染到 SurfaceTexture?
重要更新:我正在使用 SurfaceTexture,因为这是在表面上播放的视频的动态模糊。
编辑:这个问题被问到我的一些误解。 SurfaceTexture 不是显示元素。相反,它从表面接收数据,并附加到 GL_TEXTURE_EXTERNAL_OES。
谢谢。
【问题讨论】:
-
我一直使用 GL_TEXTURE_2D。由于某种原因,这对您不起作用吗?
-
当我使用 GL_TEXTURE_EXTERNAL_OES 作为 glBindTexture 的目标时,在 glFramebufferTexture2D 中传递相同的纹理名称时出现无效操作错误,无论我在该调用中使用的是 GL_TEXTURE_2D 还是 GL_TEXTURE_EXTERNAL_OES。如果 glBindTexture 中的目标是 GL_TEXTURE_2D,绑定似乎可以工作,但显然我不能再将 FBO 渲染到 SurfaceTexture。
标签: android opengl-es shader surfaceview