【发布时间】:2014-11-04 22:10:37
【问题描述】:
我正在尝试使用 OpenEXR 编写使用 OpenGL 渲染的 16 位纹理,遵循 the example in page 4 from the documentation,但由于某种原因,我的代码在执行 file_exr.writePixels(512) 时崩溃。我在这里有什么遗漏吗?
更新:我确实检查了 fboId 和 pboId 是否已正确初始化,并且在此之前不存在任何 OpenGL 错误。
const Imf::Rgba * dest;
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fboId);
glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, pboId);
glReadPixels(0, 0, 512, 512, GL_BGRA, GL_HALF_FLOAT_NV, 0);
dest = (const Imf::Rgba *)glMapBuffer(GL_PIXEL_PACK_BUFFER_ARB, GL_READ_ONLY_ARB);
Imf::RgbaOutputFile file_exr("/tmp/file.exr", 512, 512, Imf::WRITE_RGBA);
file_exr.setFrameBuffer(dest, 1, 512);
file_exr.writePixels(512);
glUnmapBufferARB(GL_PIXEL_PACK_BUFFER_ARB);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, 0);
【问题讨论】:
标签: c++ image opengl 16-bit openexr