找不到glActiveTexture ARB

Mak*_*shi 2 c++ opengl

大家好,我在这里有一个很大的错误,似乎c ++没有找到glActiveTextureARB(GL_TEXTURE0_ARB); 即时通讯使用代码块,我有glext.h所以每当我右键单击glActiveTextureARB并找到声明它实际上找到它...我有一个64位系统,我已经尝试将glext.h放在GL文件夹中,也在我的项目和即时通讯中得到同样的错误任何想法将有助于tyvm

继承了我的代码,万一你需要它..它是在西班牙语顺便说一句,但它并不重要因为错误我认为它不在代码中

#include "objetos.h"
#include "glext.h"
#include <cassert>

Objetos::Objetos()
{
    m_OBJS = NULL;
}

Objetos::Objetos(OBJETO d,int txt)
{
    m_OBJS = NULL;
    box = 0;
    triangle = 0;
    circle = 0;
    CTargaImage image;

    image.Load("TGAs/caja1.tga");
    glGenTextures(1, &m_texturaCaja[0]);
    glBindTexture(GL_TEXTURE_2D, m_texturaCaja[0]);
    gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB,
                   image.GetWidth(), image.GetHeight(),
                   GL_RGB, GL_UNSIGNED_BYTE, image.GetImage());

    image.Release();


    image.Load("TGAs/caja2.tga");
    glGenTextures(1, &m_texturaCaja[1]);
    glBindTexture(GL_TEXTURE_2D, m_texturaCaja[1]);
    gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB,
                   image.GetWidth(), image.GetHeight(),
                   GL_RGB, GL_UNSIGNED_BYTE, image.GetImage());

    image.Release();

switch(d)
    {
        case TRIANGULO:
        //borrarlo antes de dibujarlo siempre;
        glActiveTextureARB(GL_TEXTURE0_ARB);
        glBindTexture(GL_TEXTURE_2D, m_texturaTriangulo[txt]);
        glEnable(GL_TEXTURE_2D);
        glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
        glTexEnvf (GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_REPLACE);
        m_OBJS = glmReadOBJ("materiales/triangulo.obj");
        m_Posicion.x = 0.0f;
        glDisable(GL_TEXTURE_2D);
        break;

        case CIRCULO:
        glActiveTextureARB(GL_TEXTURE1_ARB);
        glBindTexture(GL_TEXTURE_2D, m_texturaEsfera[2]);
        glEnable(GL_TEXTURE_2D);
        glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
        glTexEnvf (GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_REPLACE);
        m_OBJS = glmReadOBJ("materiales/circulo.obj");
        m_Posicion.x = -0.43f;
        glDisable(GL_TEXTURE_2D);
        break;

        case CAJA:
        glActiveTextureARB(GL_TEXTURE2_ARB);
        glBindTexture(GL_TEXTURE_2D, m_texturaCaja[1]);
        glEnable(GL_TEXTURE_2D);
        glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
        glTexEnvf (GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_REPLACE);
        m_OBJS = glmReadOBJ("materiales/caja.obj");
        m_Posicion.x = 0.43f;
        glDisable(GL_TEXTURE_2D);
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

dat*_*olf 7

glActiveTextureARB是一个扩展功能.因此,在Windows平台下,仅包含glext.h以使其可用是不够的.您还必须定义一个函数指针并加载它

PFNGLGETACTIVETEXTUREARB __myglextActiveTextureARB;
#define glActiveTextureARB __myglextActiveTextureARB

void initGLextensions() {
    __myglextActiveTextureARB = (PFNGLGETACTIVETEXTUREARB) wglGetProcAddress("glActiveTextureARB);
}
Run Code Online (Sandbox Code Playgroud)

那个宏的杂耍是保持库名称空间干净的必要条件.

因为从头开始进行所有这些扩展加载会非常繁琐,所以有扩展包装库,如GLEW(http://glew.sourceforge.net)或GLEE(http://www.opengl.org/sdk/libs/GLee/)将整个过程简化为包括标题而不是标准的OpenGL包含,将其添加到链接库列表中,并glewInit()为GLEW和GLEE执行后跟GLeeInit()上下文创建并完成.