MFC下使用glewInit时需要先将Render Context创建好, 否则glewInit将返回GLEW_ERROR_NO_GL_VERSION
下面是我转的,供你参考:
把CEGUI配置好,运行osgcegui的例子,会发现下面这句话是过不去的:)
new CEGUI::System( new CEGUI::OpenGLRenderer(0) );
调试一下:(用的GEGUI版本为0.6.2)
1 OpenGLRenderer构造失败了。
2 继续找一找构造失败的原因,构造函数调用的最后一个函数initialiseGLExtensions(初始化OpenGL的Extensions),抛出了异常。
3 异常的原因,glewInit返回值不对。
4 跟着glewinit看一看,发现glGetString(GL_VERSION)没有得到正确的version,因此返回了GLEW_ERROR_NO_GL_VERSION。
原因很清楚了,CEGUI初始化的时候需要调用glGetString(GL_VERSION),如果没有一个有效的rendering context,glGetString返回的结果是不确定的。因此在构造CEGUI::OpenGLRenderer之前需要确定一个当前有效的rc。
在osg中按如下写法就可以了:
osgViewer::Viewer viewer;
viewer.setThreadingModel(osgViewer::ViewerBase::SingleThreaded);
viewer.realize();
viewer.getCamera()->getGraphicsContext()->makeCurrent();
第二句话设置线程模式为单线程,如果不设单线程,似乎只能去渲染线程初始化cegui了吧。第四句话里面会调用wglMakeCurrent,设定一个有效的rc。如果这里没有写,osg需要到draw的时候才会MakeCurrent:)
MFC下使用glewInit时需要先将Render Context创建好, 否则glewInit将返回GLEW_ERROR_NO_GL_VERSION