2

我正在尝试使用 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

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

4

1 回答 1

0

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

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

于 2012-07-19T21:07:29.270 回答