PBO是否在OpenGL上下文中共享?
在OpenGL中,PBO或任何类型的缓冲区对象是否在多个上下文中共享(例如纹理) 我的最佳猜测是否,因为以下代码不起作用: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
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事实上,这就是问题所在。我犯了一个愚蠢的错误。谢谢你解决了我的问题事实上,这就是问题所在。我犯了一个愚蠢的错误。谢谢你解决了我的问题