c++ - 在 C++ 中强制使用 Opengl 2.0 及更高版本

标签 c++ opengl

我是一名学习 c++ 和 opengl 的学生,现在已经 5 个月了,在这段时间里,我们接触了一些高级主题,从基本的 opengl 开始,如 glBegin/glEnd 到 VA 到 VBO 再到着色器等。我们的教授让我们建立起来随着时间的推移,我们的图形引擎成为一流的,他时不时地要求我们停止使用一个或其他已弃用的功能,并转向更新的版本。

现在作为当前任务的一部分,他要求我们摆脱 OpenGl ES 2.0 之前的一切。我们的代码库相当大,我想知道我是否可以将 OpenGL 设置为 2.0 及更高版本,这样那些不推荐使用的功能实际上会在编译时失败,这样我就可以确保所有这些功能都在我的引擎之外。

最佳答案

当您初始化 OpenGL 上下文时,您可以将提示传递给上下文以请求特定的上下文版本。例如,使用 GLFW图书馆:

glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_ES_API);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);

GLFWwindow* window = glfwCreateWindow(res_width, res_height, window_name, monitor, NULL);

如果 OpenGL 库不支持 ES 2.0,这将失败(对于 GLFW,它返回一个 NULL 窗口)。您平台的 native EGL(或 WGL、GLX、AGL 等)函数提供此功能。

关于c++ - 在 C++ 中强制使用 Opengl 2.0 及更高版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28606636/

相关文章:

c++ - ExpandEnvironmentStrings 不扩展我的变量

opengl - 传递给片段着色器的纹理坐标均为 0

android - C++:执行命令并返回输出导致断言失败

c++ - 如何累积持续时间

c - OpenGL 在 OS X 上包含指令

c++ - 着色器存储 block 名称问题

java - 将 2d 窗口点转换为 3d 点

opengl - glFinish 在 clEnqueueReleaseGLObjects 之后永远挂起

c++ - 如何使用 <random> header 成员在 C++ 中生成随机数?

c++ - 用字节初始化 char* 和 std::string