您應該能夠建立具有紋理渲染使用如下代碼它支持:
// Offscreen position framebuffer object
glGenFramebuffers(1, &positionFramebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, positionFramebuffer);
glGenRenderbuffers(1, &positionRenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, positionRenderbuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8_OES, FBO_WIDTH, FBO_HEIGHT);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, positionRenderbuffer);
// Offscreen position framebuffer texture target
glGenTextures(1, &positionRenderTexture);
glBindTexture(GL_TEXTURE_2D, positionRenderTexture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, FBO_WIDTH, FBO_HEIGHT, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, positionRenderTexture, 0);
交換緩衝區是使用這樣的代碼一樣簡單:
glBindFramebuffer(GL_FRAMEBUFFER, positionFramebuffer);
glViewport(0, 0, FBO_WIDTH, FBO_HEIGHT);
然後,您可以渲染到該緩衝區,並將結果紋理傳遞給一個簡單的着色器,並將其顯示在矩形幾何圖形中。該紋理也可以輸入到着色器中,該着色器渲染到由紋理支持的另一個類似的渲染緩衝區,等等。
如果您需要執行一些基於CPU的處理或讀出,則可以使用glReadPixels()
從屏幕外渲染緩衝區中提取像素。
例如,您可以試用我的示例應用程序here和here。前者處理來自相機的視頻幀,其中一個設置允許在屏幕渲染緩衝區中進行處理時進行視頻直通。後一個例子在一個點上呈現立方體貼圖紋理,然後使用該紋理在茶壺上進行環境貼圖。
這是一個夢幻般的答案。你爲什麼稱它爲「position」Framebuffer? – Nektarios 2011-02-04 19:47:01