我正在尝试使用 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
关于为什么会这样以及如何发送纹理的任何帮助都会很棒。
最佳答案
在 RosyWriter 示例中,我认为他们能够在不使用 glUniformi()
的情况下逃脱的原因随时为videoframe
uniform 是它们将输入纹理绑定(bind)到纹理单元 0。
为纹理指定统一值时,您使用的值是纹理绑定(bind)到的纹理单元。如果您不为制服设置值,我相信它应该默认为 0,因此通过将纹理绑定(bind)到单元 0,他们永远不必为 videoframe
设置值。制服。它仍然会拉入附加到单元 0 的纹理。
关于ios - 在 OpenGL ES 中使用 CVOpenGLESTextureCache 将纹理传递给 Uniform,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11566520/