1

glreadpixels で INVALID_OPERATION を与える作業コードがあるため、混乱しています。私の推測では、パフォーマンスの問題を引き起こしている/引き起こす可能性があります。

FBO へのオフスクリーン レンダリングを行ってから、PBO からシステム メモリを読み込んでいます。

glReadPixels は INVALID_OPERATION を返しますが、最初のフレームを除くすべてのフレームを返します。どういうわけか、最初はエラーが発生しませんが、それ以降は文句を言います。そのエラーにもかかわらず、コードは正常に機能することを強調する必要があります。

私のコードは次のようになります。

初期化 (起動時にのみ呼び出されます):

glGenFramebuffers(1, &fbo);

glBindFramebuffer(GL_FRAMEBUFFER, fbo);

//render buffer

glGenRenderbuffers(1, &render_buf);

glBindRenderbuffer(GL_RENDERBUFFER, render_buf);

glRenderbufferStorage(GL_RENDERBUFFER, GL_RGB8, _width, _height);

glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, render_buf);

//depth buffer

glGenRenderbuffers(1, &depth_buf);

glBindRenderbuffer(GL_RENDERBUFFER, depth_buf);

glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, _width, _height);

glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depth_buf);


glBindFramebuffer(GL_FRAMEBUFFER, fbo);


glBindFramebuffer(GL_FRAMEBUFFER, 0);

GLenum fbStatus = glCheckFramebufferStatus(GL_FRAMEBUFFER);


//Add the pixel buffer object
glGenBuffers(1, &pbo);

glBindBuffer(GL_PIXEL_PACK_BUFFER, pbo);

glBufferData(GL_PIXEL_PACK_BUFFER, _width* _height * 4, NULL, GL_DYNAMIC_READ);

glBindFramebuffer(GL_FRAMEBUFFER, fbo);

glReadBuffer(GL_COLOR_ATTACHMENT0);

glBindBuffer(GL_PIXEL_PACK_BUFFER, pbo);

オフスクリーン レンダリング (フレームごとに 1 回呼び出される):

glReadPixels(0, 0, _width, _height, GL_BGR, GL_UNSIGNED_BYTE, 0); 

void* mappedRegion = glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY);
glUnmapBuffer(GL_PIXEL_PACK_BUFFER);

return (uint8_t*)mappedRegion; //I am only reading, not writing to this one
4

0 に答える 0