找不到glActiveTexture ARB

时间:2011-06-04 23:36:37

标签: 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;
    }
}

1 个答案:

答案 0 :(得分:6)

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

加载它
PFNGLGETACTIVETEXTUREARB __myglextActiveTextureARB;
#define glActiveTextureARB __myglextActiveTextureARB

void initGLextensions() {
    __myglextActiveTextureARB = (PFNGLGETACTIVETEXTUREARB) wglGetProcAddress("glActiveTextureARB);
}

要保持库名称空间的清洁,需要进行宏杂耍。

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