2017-07-01 72 views
1

抽象我的游戏/渲染引擎时,我遇到了一个问题,那就是我需要一种可靠的方法来可靠地知道我正在操作的上下文。有没有一种方法来识别我正在操作的OpenGL上下文?

我正在寻找可在OpenGL规范中使用的解决方案。这是标准的OpenGL,没有任何提供包装库xyz

+0

我不太明白这个问题。您创建了OpenGL上下文。那么你怎么不知道它是哪个环境?或者你有多个上下文,并试图找出哪些是最新的? –

+0

@NicolBolas我想大部分时间都在玩一款新玩具?我的情况是,我将render-/opengl-code从实际的窗口中分离出来,这样我就可以在窗口之间推送我的'视图'对象(这些对象或多或少都与上下文同义)。我有一个着色器和程序对象的现场日,目前我需要一种方法来正确管理object-id和id所属的上下文之间的映射 - 我可以通过提供一些外部手段来识别上下文,但我仍然很好奇OpenGL规范中可用的内容。 –

+0

@NicolBolas我也偶然发现了glGetPointer和美丽的[glDebugMessageCallback](https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glDebugMessageCallback.xhtml),这将允许我滥用后者,来自OpenGL 4.3的指针向上。我目前正在做更多的挖掘/阅读,看看这种方法是否健壮或不:) –

回答

0

尽管我找不到OpenGL 3.3 Core Profile(最常见的版本iirc),但从4.3版本开始还有一些可用的版本。

可以使用glDebugMessageCallback设置自定义用户指针,并可以使用glGetPointerv检索该用户指针。

因此,可能会滥用userpointer来标记上下文。

1

简称:没有,有没有办法

的OpenGL规范不关心如何创建上下文和管理“OpenGL规范中”做到这一点。 操作系统和/或平台对此负责。

长:如果您控制应用程序,那么您应该能够检测何时切换OpenGL上下文。但是,如果这不是您想要使用的方式,除非您使用不同的设置(如OpenGL版本)设置不同的上下文,或者它们正在分离的线程中运行。同样,这第二个是不是“的OpenGL规范” ...只是招数......

2

我找了OpenGL规范

都能跟得上内有效的解决方案,得加紧了一层并通过wglGetCurrentContext()/glXGetCurrentContext()/aglGetCurrentContext()/etc询问OS的窗口系统绑定。

相关问题