PBO或任何类型的缓冲区对象是否在OpenGL中的多个上下文中共享(例如纹理)?
我的最佳猜测是NO,因为下面的代码不起作用:
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, lastFrame->pbo);
glDrawPixels(lastFrame->width, lastFrame->height, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, NULL);lastFrame->pbo是由另一个GL上下文创建的缓冲区。PBO的大小是4*lastFrame->width*lastFrame->height。如果不是绑定PBO,而是从内存中上传数据(大小相同),那么它可以正常工作。
glDrawPixels命令正在抛出GL_INVALID_OPERATION。
编辑:lastFrame->pbo是GLuint,width和height是u_int32_t
编辑2:我在上下文中使用GLFW。
发布于 2018-07-16 17:12:05
OpenGL规范4.6在其第5章中说:
可以在上下文中共享的对象包括缓冲区对象、程序和着色器对象、渲染缓冲区对象、取样器对象、同步对象和纹理对象(名为零的纹理对象除外)。
和
包含对其他对象的引用的对象包括帧缓冲区、程序管道、查询、转换反馈和顶点数组对象。这些对象称为容器对象,不共享。
像素缓冲对象(PBO)是一个缓冲对象。因此,是共享的。
您的GL_INVALID_OPERATION错误可能来自于没有将使用gl-调用的上下文设置为当前。或者尝试同时将相同的上下文设置为两个不同的线程。
发布于 2018-07-16 19:19:52
问题是,一个PBO对象或任何类型的缓冲区对象是否在OpenGL中的多个上下文中共享(例如纹理)。
正如@Ripi2 2的答复所指出的,GL规范允许在上下文之间共享缓冲区和纹理对象。但这并不意味着它们是自动共享的。必须创建共享GL上下文才能使其工作。
我在上下文中使用glfw
上下文共享在GLFW文件中进行了解释。
https://stackoverflow.com/questions/51366693
复制相似问题