【发布时间】:2017-09-21 17:40:14
【问题描述】:
在我的应用程序中,我有一个隐藏的 GLFW 窗口,用于进行屏幕外渲染。我想使用这个窗口从几个后台线程进行渲染。保证一次只有一个线程在使用该窗口。
在后台线程上的每个渲染操作之前,我都会执行以下操作:
glfwMakeContextCurrent((GLFWwindow *)window);
glewExperimental = withGlewExperimental ? GL_TRUE : GL_FALSE;
const auto glewInitStatus = glewInit();
if (glewInitStatus != GLEW_OK)
LOG(ERROR) << "Could not initialize glew, error: " << glewGetErrorString(glewInitStatus);
第一次正常执行,但是当第二个线程获取上下文时,glewInit 失败。
Could not initialize glew, error: Missing GL version
当我为每个线程创建一个新的隐藏窗口时,这似乎不会重现,但GLFW 禁止在主线程之外创建窗口,并且为每个线程维护窗口池会使实现复杂化并创建一个很多不必要的窗户。这就是为什么我希望所有线程都渲染到同一个窗口。
有一个东西叫GLEW_MX,它支持多上下文,但它只存在于旧版本的GLEW,在2.0.0之前,而我的GLEW版本没有这个选项。
所以,我想知道以下问题的答案:
- 这个想法是否可行(从多个线程渲染到单个窗口)?
- 如果是这种情况,我该如何解决
GLEW的错误 - 如果不是这样,您会建议什么解决方法?
【问题讨论】:
-
只是猜测,但您的描述让我想起了这个英特尔驱动程序错误What is the proper OpenGL initialisation on Intel HD 3000?
-
亲爱的投票者,你能解释一下这个话题是怎么回事吗?我很困惑,那么 Stackoverflow 上的主题是什么?在我看来,这是一个合法的通用编程/软件开发问题。
-
@Spektre 谢谢你的建议,但我认为情况并非如此;我不是在同一个应用程序中创建多个上下文,而是使用来自多个线程的单个上下文。