【问题标题】:Pass Texture to Uniform with CVOpenGLESTextureCache in OpenGL ES在 OpenGL ES 中使用 CVOpenGLESTextureCache 将纹理传递给 Uniform
【发布时间】:2012-07-20 05:07:29
【问题描述】:

我正在尝试使用 CVOpenGLESTextureCache 在 iOS 5.0+ 上的 OpenGL ES 中将视频文件作为纹理应用。

我找到了 Apple 的 RosyWriter 示例代码,并且一直在阅读它。

我的问题是:

纹理最终是如何传递到片段着色器中的制服的?

在 RosyWriterPreviewView 类中,我一直跟踪到

glBindTexture(CVOpenGLESTextureGetTarget(texture), 
               CVOpenGLESTextureGetName(texture))

之后指定一些纹理参数。

但是,我没有看到示例代码明确引用了纹理统一(sampler2D 视频帧)。我已经习惯的纹理发送代码看起来像:

GLint uniform = glGetUniformLocation(program, "u_uniformName");

随后调用实际将纹理发送到制服:

glUniform1i(GLint location, GLint x);

所以我知道 RosyWriter 以某种方式将纹理传递到其片段着色器中的制服,但我看不出它是如何以及在何处发生的。

事实上,示例代码包含构建 OpenGL 程序的注释:

// we don't need to get uniform locations in this example

任何关于为什么会这样以及如何发送纹理的帮助都会很棒。

【问题讨论】:

    标签: ios opengl-es


    【解决方案1】:

    在 RosyWriter 示例中,我认为他们能够在不使用 glUniformi() 的任何时候为 videoframe 制服而逃脱的原因是他们将输入纹理绑定到纹理单元 0。

    为纹理指定统一值时,您使用的值是纹理绑定到的纹理单元。如果您不为制服设置值,我相信它应该默认为 0,因此通过将纹理绑定到单元 0,他们永远不必为 videoframe 制服设置值。它仍然会拉入附加到单元 0 的纹理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-20
      • 2017-11-09
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多