首先科普一下什么是glew:
GLEW跨平台C++扩展库基于OpenGL图形接口使用OpenGL朋友都知道window目前支持OpenGL1.1函数 OpenGL现都发展2.0要使用些OpenGL高级特性必须载新扩展另外同显卡公司发布些自家显卡才支 持扩展函数要想用数涵数寻找新glext.h,GLEW扩展库再用找函数接口烦恼GLEW能自识 别平台所支持全部OpenGL高级扩展涵数说要包含glew.h文件能使用gl,glu,glext,wgl,glx全 部函数GLEW支持目前流行各种操作系统(including Windows, Linux, Mac OS X, FreeBSD, Irix, and Solaris)
长话短说,就是因为windows对opengl的支持不好,为了不使用软模拟的opengl,需要从显卡厂家的驱动里抽取opengl的实现,而glew方便了这个过程。只需要调用一下glewInit就可以使用gl*函数了。
glew还提供了两个实用小工具,检测系统对opengl的支持程度,分别是glewinfo.exe和visualinfo.exe,运行后会生成两个文本文件。
要使用glew库首先要保证电脑的OpenGL版本较高(大于2.0吧),windows默认只支持OpenGL1.1。
所以如果查看到电脑OpenGL版本过低,特别是只有1.1,那么更新显卡驱动就好了。
怎么查看OpenGL版本呢?我用的是Everest软件,给一个我的百度网盘地址如下:
http://pan.baidu.com/s/1qW7EPrA
软件截图如下:
遇到什么函数无法解析的情况,意思就是“我不知道这个函数时怎么实现的”,也即没有加载函数的库文件,请检查下库目录有没有设置正确&&附加依赖项里面包含了相应的库文件。
下面是具体配置glew库。(参见 http://blog.csdn.net/gogdizzy/article/details/16808019 ,感谢原作者)
#ifdef GLEW_STATIC
# define GLEWAPI extern
#else
# ifdef GLEW_BUILD
# define GLEWAPI extern __declspec(dllexport)
# else
# define GLEWAPI extern __declspec(dllimport)
# endif
#endif
下面上一份完整的demo代码,注意看一下上面注意的要点:
#define GLEW_STATIC
// 链接静态库,必需先定义GLEW_STATIC
#include
#include
#include
#pragma comment( lib, "glew32d.lib" )
void init() {
glClearColor( 1.0, 1.0, 1.0, 0.0 );
glMatrixMode( GL_PROJECTION );
gluOrtho2D( 0.0, 200.0, 0.0, 150.0 );
}
void drawLine() {
glClear( GL_COLOR_BUFFER_BIT );
glEnable( GL_LINE_STIPPLE );
GLushort patn = 0xFAFA;
glLineStipple( 3, patn );
glColor3f( 1.0, 0.0, 0.0 );
glBegin( GL_LINE_LOOP );
glVertex2i( 10, 10 );
glVertex2f( 100.0, 75.3 );
glColor3f( 0.0, 1.0, 0.0 );
glVertex2i( 70, 80 );
glEnd();
glFlush();
}
int main( int argc, char** argv ) {
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB );
glutInitWindowPosition( 200, 200 );
glutInitWindowSize( 400, 300 );
glutCreateWindow( "第一个demo" );
GLenum err = glewInit(); // 前面运行了glut*的一系列函数,已经获得了opengl的context,所以这里不会出错,读者可以试试在main的开始就调用这句会怎样
if( err != GLEW_OK ) {
fprintf( stderr, "%s\n", glewGetErrorString( err ) );
return -1;
}
init();
glutDisplayFunc( drawLine );
glutMainLoop();
return 0;
}