PBO是否在OpenGL上下文中共享?

PBO是否在OpenGL上下文中共享?,opengl,Opengl,在OpenGL中,PBO或任何类型的缓冲区对象是否在多个上下文中共享(例如纹理) 我的最佳猜测是否,因为以下代码不起作用: 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上下文创建的缓冲区。PB

在OpenGL中,PBO或任何类型的缓冲区对象是否在多个上下文中共享(例如纹理)

我的最佳猜测是,因为以下代码不起作用:

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\u无效\u操作

编辑:
lastFrame->pbo
GLuint
width
height
u\u int32\t

编辑2:我正在使用GLFW作为上下文。

第5章中说:

可在上下文之间共享的对象包括缓冲区对象, 程序和着色器对象、渲染缓冲对象、采样器对象、, 同步对象和纹理对象(纹理对象除外 命名为零)

包含对其他对象引用的对象包括帧缓冲区, 编程管道、查询、变换反馈和顶点数组对象。 此类对象称为容器对象,不共享

像素缓冲区对象(PBO)是缓冲区对象。因此它是共享的

您的
GL\u INVALID\u操作
错误可能来自未将使用某些GL调用的上下文设置为当前上下文。或者尝试将同一上下文同时设置为两个不同线程的当前上下文。

第5章中说:

可在上下文之间共享的对象包括缓冲区对象, 程序和着色器对象、渲染缓冲对象、采样器对象、, 同步对象和纹理对象(纹理对象除外 命名为零)

包含对其他对象引用的对象包括帧缓冲区, 编程管道、查询、变换反馈和顶点数组对象。 此类对象称为容器对象,不共享

像素缓冲区对象(PBO)是缓冲区对象。因此它是共享的

您的
GL\u INVALID\u操作
错误可能来自未将使用某些GL调用的上下文设置为当前上下文。或者尝试将同一上下文同时设置为两个不同线程的当前上下文

问题是,在OpenGL中,一个PBO对象或任何类型的缓冲区对象是否在多个上下文中共享(例如纹理)

如所述,GL规范允许在上下文之间共享缓冲区和纹理对象。但这并不意味着它们会自动共享。您必须创建共享的总账上下文才能使其正常工作

我使用glfw作为上下文

上下文共享在中进行了解释

问题是,在OpenGL中,一个PBO对象或任何类型的缓冲区对象是否在多个上下文中共享(例如纹理)

如所述,GL规范允许在上下文之间共享缓冲区和纹理对象。但这并不意味着它们会自动共享。您必须创建共享的总账上下文才能使其正常工作

我使用glfw作为上下文


有关上下文共享的说明,请参见。

谢谢您的回答。我认为问题不在于他们两个。如果我放置
printf(“%d\n”,glfwGetCurrentContext()==窗口)当窗口是所需的上下文时,我总是得到1。这个程序目前是单线程的。答案完全正确。该错误表示以下两种情况之一:1)您没有在调用GL方法的线程中设置当前共享上下文,或者您没有正确创建共享上下文。PBO是完全可共享的。它在称为异步纹理流的程序中多次使用,其中线程用于将纹理数据上载到GPUThank You以获取答案。我认为问题不在于他们两个。如果我放置
printf(“%d\n”,glfwGetCurrentContext()==窗口)当窗口是所需的上下文时,我总是得到1。这个程序目前是单线程的。答案完全正确。该错误表示以下两种情况之一:1)您没有在调用GL方法的线程中设置当前共享上下文,或者您没有正确创建共享上下文。PBO是完全可共享的。它在称为异步纹理流的程序中多次使用,其中线程用于将纹理数据上载到GPUIn事实上,这就是问题所在。我犯了一个愚蠢的错误。谢谢你解决了我的问题事实上,这就是问题所在。我犯了一个愚蠢的错误。谢谢你解决了我的问题