当前位置: 首页 > 知识库问答 >
问题:

单窗口设备上下文,多个opengl上下文

王宏扬
2023-03-14

我有一个带有主窗口的应用程序。它有自己的线程和opengl上下文。这个应用程序每个处理器还有一个工作线程来创建和上传软件渲染的纹理。这工作得非常好。

我担心的是工作线程opengl上下文是使用主窗口的device_context创建的。因此,在双处理器系统的情况下,这意味着3个opengl上下文被绑定到同一个window device_context。它们都是在主窗口线程中创建的,然后调用sharelist使它们共享纹理,然后每个gl_context仅在一个线程中激活,一个用于主窗口线程,另一个用于每个工作线程。

正如我之前所写的,这在我测试过的所有机器上都运行得很好,但是我没有看到任何描述我正在做什么的文档,我发现的唯一确认我正在做的事情很好的是这个链接的最后一条评论:在一个窗口中的OpenGL多重渲染上下文。

因此,我希望有人知道确认这将适用于所有系统。

编辑:我之前忘了提到它,但是有一个问题,如果两个工作线程同时调用wglmakecurrent(common_window_device_context,private_opengl_context),其中一个将在glgeterror=GL_INVALID_OPERATION时失败。在这种情况下,解决方案是调用睡眠(1)以允许其他线程中的相同调用有时间完成,然后再次调用wglmakecurrent,然后一切都非常顺利。至少在我测试过的所有机器上。

共有1个答案

袁羽
2023-03-14

因此,我希望有人知道确认这将适用于所有系统。

在同一设备上下文中,不同线程的多个OpenGL上下文处于活动状态是非常好的。最糟糕的情况是,OpenGL同步点的交互会产生严重的性能问题和未定义的渲染结果。只有在从多个OpenGL上下文进行渲染调用时,才会出现问题。然而,您似乎希望将它们纯粹用于I/O工作,即加载VBO数据的纹理。只要不从渲染线程引用由工作线程操纵的数据对象,就不会发生同步点副作用,并且您处于安全状态。

多上下文交互的确切语义在OpenGL-3和更高版本的规范中定义。我建议你读一下。

 类似资料:
  • 我想把unity上下文放到opengl中,这样我就可以在opengl glfw窗口中显示unity渲染纹理。我尝试使用 ,但是oldContext的值为null。 任何帮助都将不胜感激!

  • 问题内容: 我的问题是关于接口的设计选择。如果要从中创建上下文,可以执行以下操作: 如果是接口的一部分,那就更好了,这样我们可以简单地写: 对我来说似乎干净得多。它更短,并且不需要。 为什么产生子上下文的函数不是接口的一部分? 问题答案: 这是类型: 这很简单。如果要编写它的实现,可以这样做吗?是的,很容易。由于没有“设置”方法,因此每个方法都只能返回默认值/ 零值,并且是“有效”的实现。这正是背

  • 问题内容: 由于Go中的错误处理,我经常会遇到多个值函数。到目前为止,我的管理方式非常混乱,我正在寻找编写更简洁代码的最佳实践。 假设我具有以下功能: 我如何优雅地分配一个新变量。在引入错误处理之前,我的函数刚刚返回,我可以简单地做到这一点: 现在,我这样做: 有没有办法直接访问第一个返回的变量? 问题答案: 如果是多值返回函数,则在调用函数时不能引用具有特定结果值的字段或方法。 如果他们中的一个

  • 问题内容: 我正在使用通过上下文传递的函数。 现在我用。这可行。 如果我需要来自两个不同父组件的函数,该怎么办? 问题答案: 您仍然可以通过16.3 Context API来使用子级功能消费者节点,这是React文档建议的做法: 要在组件的上下文中使用函数,通常将组件包装在HOC中,以便将上下文作为prop传递: 如果您正在运行React 16.8+,则还可以使用钩子更干净地执行此操作,而无需使用

  • stackoverflow中有一些指南,用于在Visual Studio中打开多个窗口。但它是在他们谈论的Visual Studio内部。 这是我想要的。我的桌面上有一个名为A.txt的txt文件,我右键单击它,上下文选项显示“用代码打开”,然后打开它。我的桌面上还有一个名为B.txt的txt文件。当我用visualstudio代码右剪并打开它时,这两个文件都在同一个窗口中。 有没有设置两个文件可

  • 问题内容: 我正在使用一个有趣的世界编辑器,并使用Java和JLWGL。到目前为止一切正常。现在,我尝试创建一个窗口,可以在其中添加要使用的地形或新模型。问题是,当我尝试从主界面创建地形并创建并显示该地形时,但是当我尝试通过按钮事件监听器调用该地形时,出现错误: 在当前线程中未找到OpenGL上下文。 我基本上知道为什么会得到错误。我用来获取输入并单击按钮的框架没有opengl上下文。 现在的问题