glActiveTexture ARB не был найден - PullRequest
2 голосов
/ 05 июня 2011

Привет всем, у меня возникла большая ошибка, похоже, что c ++ не находит glActiveTextureARB (GL_TEXTURE0_ARB);Я использую codeblocks, и у меня есть 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 Ответ

7 голосов
/ 05 июня 2011

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, добавление его в список связанных библиотек ивыполнение glewInit() для GLEW и для GLEE (необязательно) GLeeInit() после создания контекста и будет выполнено с помощью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...