OpenGL - API design

OpenGL - API design

本文关键字:design API OpenGL      更新时间:2023-10-16

我一直在研究我的新的基于opengl的渲染引擎,我遇到了以下问题:我想公开opengl功能,如glClear(); glUniformxx, ...,但我需要用户在调用任何这些函数之前创建一个opengl上下文。问题是opengl 不为您管理上下文,并且在调用任何gl函数之前会导致未定义的行为(大多数时候是段错误)。所以我的问题是我应该如何在任何openGL函数调用之前施加上下文创建?

  • 我的第一个想法是创建一个名为GLFeatures的单例类,它将暴露所有openGL功能,并且只有在传递有效上下文时才调用它们。

完全基于意见:

我建议为OpenGL上下文管理写一个完全不同的类,这样你就可以在它们之间切换多窗口渲染。你的"GLFeatures"类可以有一个名为"SetCurrentContext"的函数,它设置了一个指向上下文管理类的指针。在初始化上下文之前,您仍然可以通过在每个函数的开头断言上下文指针来保护所有函数不被调用。

然而,仅仅使用单例也应该工作,上面就是我如何做到的。