我正在开发一个使用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 valid
,int APIENTRY: redefinition
,int WINGDIAPI: redefinition
这样的错误,老实说还有很多。
我在Windows上开发,但这将自动意味着跨平台是不可能的,没有一些外部工具包/库,如GLEW,GLUT等?我知道他们强烈建议,但由于原因,我不能使用它们。
另外,这是否意味着我需要在使用OpenGL函数的每个文件中包含<Windows.h>
?我认为这不是很好的做法。
1条答案
按热度按时间j91ykkif1#
在Windows上,需要在包含GL. h之前包含Windows. h。
但实际问题不是GL. h中定义的
GLuint
的定义,但是在GL.h
中定义的所有方法都需要WINGDIAPI
和APIENTRY
宏的定义。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)。