我正在尝试使用 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
关于为什么会这样以及如何发送纹理的任何帮助都会很棒。