使用多重纹理调用 glActiveTexture方法总是报错Unhandled exception at 0x00000000 in 3dsRender.exe: 0xC0000005: Access violation.

解决方案 »

  1.   

    你的问题是这样的,如果你使用glext.h头文件的话,你要先验证GL_ARB_multitexture扩展是否支持
    可以调用glGetString(GL_EXTENSIONS),获取扩展字符串,再判断GL_ARB_multitexture在不在里面,如果在:PFNGLACTIVETEXTUREARBPROC glActiveTextureARB=(PFNGLACTIVETEXTUREARBPROC)wglGetProcAddress("glActiveTextureARB");
    if(glActiveTextureARB==NULL)
    {
    //...出错处理
    }
    在以后的程序中调用glActiveTextureARB()就不会出错了。
    你也可以判断你的显卡所支持的OpenGL版本const GLUbyte *version=glGetString(GL_VERSION);
    //如果你检测到的版本号不小于1.3.0,则可以写以下程序
    PFNGLACTIVETEXTUREPROC glActiveTexture=(PFNGLACTIVETEXTUREPROC)wglGetProcAddress("glActiveTexture");
    if(glActiveTexture==NULL)
    {
    //出错处理
    }
    //在后续程序中就直接调用
    glActiveTexture(texture);如果你使用glew库,则要先调用glewInit(),glActiveTexture函数指针就为空。。
    如果你使用了glut库,也可以调用glutGetProcAddress("glActiveTexture");获取函数指针方法多种多样,由你选择
    LZ记住了