wglMakeCurrent,绘图和多线程会引起竞争吗?

问题描述 投票:2回答:1

如果我有两个opengl渲染线程,每个线程都有一个设置其上下文的模式,以固定的帧速率进行绘制。会有比赛吗?

我担心会发生以下情况:

  1. 线程1调用wglMakeCurrent
  2. 线程2调用wglMakeCurrent
  3. 线程2绘制
  4. 线程1绘制

反过来,两个线程都在第二个线程的上下文中绘制。

我是否应该在设置渲染上下文时使用锁定,并绘制以确保操作不会干扰其他渲染线程?

multithreading winapi opengl
1个回答
0
投票

只要每个线程都有自己的上下文,就可以安全地绘制两个线程。

只有当您想要在线程之间共享单个上下文时,才能确保上下文一次只在一个线程中是最新的。

documentationwglMakeCurrent()制定了规则:

一个线程可以有一个当前的渲染上下文。一个进程可以通过多线程具有多个渲染上下文。

线程必须在调用任何OpenGL函数之前设置当前渲染上下文。否则,将忽略所有OpenGL调用。

渲染上下文一次只能是一个线程。您无法将渲染上下文设置为多个线程。

应用程序可以通过使不同的呈现上下文当前到不同的线程来执行多线程绘制,为每个线程提供其自己的呈现上下文和设备上下文。

© www.soinside.com 2019 - 2024. All rights reserved.