为什么使用OpenGL函数需要Windows. h?

3zwtqj6y  于 2023-04-11  发布在  Windows
关注(0)|答案(1)|浏览(122)

我正在开发一个使用OpenGL制作简单游戏的应用程序。刚刚开始学习OpenGL。为什么,在下面的代码片段中,我需要<Windows.h>来识别GLuint vao?删除包含会导致错误。

#include <Windows.h>
#include <gl/GL.h>

int main() {
    GLuint vao;
}

当我删除包含<Windows.h>时,我得到了868个错误。像'APIENTRY': this use of 'void' is not validint APIENTRY: redefinitionint WINGDIAPI: redefinition这样的错误,老实说还有很多。
我在Windows上开发,但这将自动意味着跨平台是不可能的,没有一些外部工具包/库,如GLEW,GLUT等?我知道他们强烈建议,但由于原因,我不能使用它们。
另外,这是否意味着我需要在使用OpenGL函数的每个文件中包含<Windows.h>?我认为这不是很好的做法。

j91ykkif

j91ykkif1#

在Windows上,需要在包含GL. h之前包含Windows. h。
但实际问题不是GL. h中定义的GLuint的定义,但是在GL.h中定义的所有方法都需要WINGDIAPIAPIENTRY宏的定义。WINGDIAPI告诉编译器必须从dll加载该方法。APIENTRY在minwindef. h中定义。两者都包含在Windows. h中。
关于跨平台:问题是,虽然OpenGL API(一般)平台无关,OpenGL实现以及OpenGL上下文处理都不是。不同的系统甚至不使用相同的OpenGL头文件。例如,MacOS使用OpenGL/gl.h,而Windows使用GL/gl.h。其他示例,OpenGL上下文是在Windows上通过wgl API创建的,而其他一些系统使用glx。如果你想开发跨平台,你要么需要自己抽象所有这些,或者使用已经为您完成此操作的库之一(glfw、glew)。

相关问题