我正在尝试使用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
任何帮助,为什么这是&如何将纹理发送过来会很棒。
答案 0 :(得分:0)
在RosyWriter示例中,我认为他们能够在glUniformi()
制服的任何点使用videoframe
而逃脱的原因是他们将输入纹理绑定到纹理单元0 。
为纹理指定统一值时,您使用的值是纹理绑定到的纹理单位。如果你没有为制服设置一个值,我相信它应该默认为0,所以通过将纹理绑定到单元0总是他们永远不必为videoframe
制服设置一个值。它仍将拉入附加到单元0的纹理。