GLEW库介绍
由于OpenGL本身只是一个标准图形API的接口规范,本身不包含对API的接口实现,实际的实现过程都是由各个显卡厂家实现的。不同的显卡公司,也会发布一些只有自家显卡才支持的扩展函数,如果想用这些函数,就必须去寻找最新的glext.h文件。因此即便是通过OpenGL编写的图形程序,在安装不同显卡的主机上也不一定能够正常运行。而GLEW库的出现就是为了解决这个问题,GLEW是一个跨平台的C++扩展库,基于OpenGL图形接口。GLEW能自动识别当前平台所支持的全部OpenGL高级扩展涵数。也就是说,只要包含一个glew.h头文件,就能使用gl,glu,glext,wgl,glx的全 部函数。GLEW支持目前流行的各种操作系统(including Windows, Linux, Mac OS X, FreeBSD, Irix, and Solaris)。
获取GLEW库
在GLEW的官方页面http://glew.sourceforge.net/可以看到已经编译好的二进制包下载链接,如果动手能力强的话也可以下载源码自己移植编译。我这边是win10的环境,所以就直接下载二进制包了。
添加GLEW库
和添加GLFW库一样在工程的根目录添加一个GLEW文件夹,把下载的GLEW库文件复制进去。
跟之前添加GLFW库一样,选择添加外部库,但是这次要选择静态库的方式。然后点击下一步就好了。
库添加完成后,修改下main.cpp中的代码,测试下GLEW库能否正常运行。这里要注意包含glew.h文件的位置,一定要在最开始。然后就是编译执行。
#include <iostream>
#include <GL/glew.h> //这个头文件一定要在最前面包含
#include <GLFW/glfw3.h>
using namespace std;
int main(void)
{
GLFWwindow* window;
/* Initialize the library */
if (!glfwInit())
return -1;
/* Create a windowed mode window and its OpenGL context */
window = glfwCreateWindow(640, 480, "出来吧,三角形", NULL, NULL);
if (!window)
{
glfwTerminate();
return -1;
}
/* Make the window's context current */
glfwMakeContextCurrent(window);
if(glewInit()!=GLEW_OK)
{
printf("GLEW Init Failed \n");
return 0;
}
printf("%s\n",glGetString(GL_VERSION));//打印当前的OpenGL版本号
/* Loop until the user closes the window */
while (!glfwWindowShouldClose(window))
{
/* Render here */
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);//开始绘制三角形
#if 0
glVertex2f(-0.5f,-0.5f);//顶点坐标 ,这里一定要填三个坐标,否则绘制不出来三角形
glVertex2f(0.0f,0.5f);//顶点坐标
glVertex2f(0.5f,-0.5f);//顶点坐标
#else
GLfloat points[]={-0.5f,-0.5f,0.0f,0.5f,0.5f,-0.5f};
glVertex2fv(&points[0]);
glVertex2fv(&points[2]);
glVertex2fv(&points[4]);
#endif
glEnd();//绘制结束
/* Swap front and back buffers */
glfwSwapBuffers(window);
/* Poll for and process events */
glfwPollEvents();
}
glfwTerminate();
return 0;
}
添加预编译宏
和添加GLFW库一样,不出意外的话,会看到下面的错误提示,libglew32s.a库没有找到。
为了解决上面的这个错误,需要对工程的.pro文件做些修改,首先是删除下面两行内容
win32:!win32-g++: PRE_TARGETDEPS += $$PWD/../glew/lib/Release/x64/glew32s.lib
else:win32-g++: PRE_TARGETDEPS += $$PWD/../glew/lib/Release/x64/libglew32s.a
然后是添加一个预编译的宏定义,代码如下
DEFINES += GLEW_STATIC
修改后的完整.pro文件如下:
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += \
main.cpp
#添加GLFW库支持
win32: LIBS += -L$$PWD/../glfw/lib-mingw-w64/ -lglfw3dll
INCLUDEPATH += $$PWD/../glfw/include
DEPENDPATH += $$PWD/../glfw/include
#添加GLEW库支持
DEFINES += GLEW_STATIC
win32: LIBS += -L$$PWD/../glew/lib/Release/x64/ -lglew32s
INCLUDEPATH += $$PWD/../glew/include
DEPENDPATH += $$PWD/../glew/include
#opengl支持库、Windows支持库
LIBS += -lopengl32 -luser32
保存.pro文件后,就能再次编译执行程序了,这次就能看到窗口里面的白色三角形了。同时也能看到当前使用的OpenGL库版本了。