2013-08-29 43 views
0

我需要在PBO映射時測試glReadPixels的INVALID_OPERATION錯誤。但沒有得到什麼確切的緩衝區映射。 下面的代碼部分:緩衝區映射對於PBO意味着什麼?

glGenBuffers(1, iBufferObj); 

    // Bind the buffer 
    glBindBuffer(GL_PIXEL_PACK_BUFFER, *iBufferObj); 
    glBufferData(GL_PIXEL_PACK_BUFFER, iSize, 0, GL_STREAM_READ); // iSize is my framebuffer size 
    glReadPixels(0, 0, iSurfaceWidth, iSurfaceHeight, GL_RGBA, GL_UNSIGNED_BYTE, 0); 
    ptr = (GLuint*)glMapBufferRange(GL_PIXEL_PACK_BUFFER, 0, iSize, GL_MAP_READ_BIT); 
    glReadPixels(0, 0, iSurfaceWidth, iSurfaceHeight, GL_RGBA, GL_UNSIGNED_BYTE, cBuff); // cBuff client buffer container 
    glUnmapBuffer(GL_PIXEL_PACK_BUFFER); 

它是正確的期待在第二glReadPixel調用錯誤,作爲緩衝與glMapBufferRange映射()?

你能幫助理解映射緩衝區的概念嗎?

回答

2

我不確定我是否理解這個問題。 Mapping a buffer意味着您可以通過指針「直接」訪問它的內容。這與glBufferSubDataglGetBufferSubData相反。

而且,除非您使用的是really advanced version of OpenGL,否則在映射時不能以任何方式使用緩衝區。這包括通過PBO閱讀進行閱讀。

+1

所以,當我們使用glMapBufferRange()時,這意味着緩衝區被映射。 「在映射時不能使用任何緩衝區」,這是否意味着在glMapBufferRange()應該產生一些錯誤(GL_INVALID_OPERATION)後,根據opengles 3規範調用glReadPixels「如果一個非零緩衝區對象名稱生成,則會生成GL_INVALID_OPERATION綁定到GL_PIXEL_PACK_BUFFER目標,並且當前映射緩衝區對象的數據存儲區。「 – user1896853