在编写openGL函数时,由于不熟悉或者理解不深刻,导致很多莫名其妙的问题。
比如,当你经过千辛万苦,终于d编译成功以后,excute it!却发现会出现cannot read 内存什么什么的。很明显,指针越界了。
我们不甘心,但我们不能放弃。单步调试!
结果 发现利用openGL函数来获取某些函数或者字符串时出现了空指针的情形!
比如 glTexImage3D = (PFNGLTEXIMAGE3DPROC) ::wglGetProcAddress("glTexImage3D")时; 跟踪发现 glTexImage3D=Null;
比如 char* str1 = 0; str1 = (char*)glGetString(GL_VERSION); 时,跟踪发现 str1=Null;
哈哈,问题找到了 ,这样的话,访问glTexImage3D或者str1,那就肯定越界了哈。
但是原因是是什么?明明编译没错,明明能够往下正常执行,但就是没有正确结果输出?
在网上找了半天:在 http://tech.groups.yahoo.com/group/opengl-gamedev-l/message/10613里找到答案!
一句话:在你调用这些gl函数之前,你需要初始化渲染的上下文(rendering context)!!!
那么所以,当你在非MFC情况下(比如控制台程序时),先调用glutInit与glutCreateWindow进行初始化,然后调用相关gl函数,就可以返回正确的值了。
在MFC情况下,先调用wglMakeCurrent()进行初始化后,再调用就可以返回正确的值了。
OK!问题解决!