使用OpenGL ES中的CVOpenGLESTextureCache将纹理传递给Uniform

时间:2012-07-19 17:49:42

标签: ios opengl-es

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

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

我的问题是:

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

在RosyWriterPreviewView类中,我一直遵循

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

之后指定了一些纹理参数。

但是,我没有看到示例代码明确引用纹理均匀(sampler2D videoframe)。纹理发送代码我已经习惯了看起来像:

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

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

glUniform1i(GLint location, GLint x);

所以我知道有些RosyWriter在片段着色器中将纹理传递给制服,但我看不出它是如何以及在哪里发生的。

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

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

任何帮助,为什么这是&如何将纹理发送过来会很棒。

1 个答案:

答案 0 :(得分:0)

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

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