2012-07-19 59 views
2

我試圖在iOS 5.0+上使用CVOpenGLESTextureCache將視頻文件作爲紋理應用於OpenGL ES。在OpenGL ES中將紋理傳遞給CVOpenGLESTextureCache以統一

我發現蘋果的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

在RosyWriter例子,我認爲他們能夠逃脫沒有在任何時候爲videoframe統一使用glUniformi()的原因是,他們的輸入紋理綁定到紋理單元0

當指定一個紋理的統一值,你使用的值是紋理綁定到的紋理單元。如果您沒有爲統一設置一個值,我相信它應該默認爲0,所以通過將紋理綁定到單位0,他們永遠不必爲videoframe統一設置值。它仍將拉入單元0所附的紋理。