2011-06-04 3 views
1

salut tout le monde a eu une erreur ici il semble que C++ ne trouve pas glActiveTextureARB (GL_TEXTURE0_ARB); Im utilisant codeblocks et j'ai glext.h ainsi chaque fois que je fais un clic droit glActiveTextureARB et trouver la déclaration, il trouve en fait ... j'ai eu un système 64bits et j'ai essayé de mettre glext.h dans le dossier GL et aussi dans mon projet et im obtenir la même erreur des idées contribueraient tyvmglActiveTexture ARB n'a pas été trouvé

Heres mon code dans le cas où le besoin d'u .. il est en espagnol BTW mais il n'a pas d'importance cuz l'erreur je pense que ce ne est pas dans le code

#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; 
    } 
} 
+0

Afficher ce message d'erreur complet. –

+0

\ Objetos.cpp || Dans le constructeur 'Objetos :: Objetos (OBJETO, int)': | \ Objetos.cpp | 111 | erreur: 'glActiveTextureARB' n'a pas été déclaré dans cette portée || === Construction terminée: 1 erreur, 3 avertissements === | – Makenshi

Répondre

6

glActiveTextureARB est une fonction d'extension. En tant que tel sous la plate-forme Windows, il ne suffit pas d'inclure glext.h pour le rendre utilisable. Vous devez également définir un pointeur de fonction et le charger avec

PFNGLGETACTIVETEXTUREARB __myglextActiveTextureARB; 
#define glActiveTextureARB __myglextActiveTextureARB 

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

Cette macro jonglerie est neccesary de garder l'espace de noms de bibliothèque propre.

Comme il serait si pénible faire tout ce chargement d'extension à partir de zéro il y a des bibliothèques wrapper d'extension comme GLEW (http://glew.sourceforge.net) ou GLEE (http://www.opengl.org/sdk/libs/GLee/) en réduisant le processus en incluant leurs têtes au lieu de l'OpenGL standard comprend, en ajoutant à la liste des bibliothèques liées et faire un glewInit() pour GLEW et pour GLEE éventuellement un GLeeInit() après la création du contexte et être fait avec.

+0

wow vous êtes un sauveur de vie mec tyvm – Makenshi

Questions connexes