2010-04-18 5 views
2

J'utilise ce code pour vérifier si mon shader glsl a bien été compilé.Vérification OpenGL/GLSL si le shader est bien compilé sur les cartes Intel

glGetObjectParameterivARB(obj, GL_OBJECT_INFO_LOG_LENGTH_ARB, &infologLength); 

    if (infologLength > 1) 
    { 
     int charsWritten = 0; 
     char * const infoLog = new char[infologLength]; 
     glGetInfoLogARB(obj, infologLength, &charsWritten, infoLog); 
     tError(infoLog, false); 
     delete infoLog; 
    } 
} 

la longueur de la chaîne retournée est vide sur nvidia et les cartes ATI, mais sur les cartes intel celui-ci renvoie la chaîne « aucune erreur. »

maintenant quelle est la meilleure façon de savoir, s'il n'y a vraiment pas d'erreurs? devrais-je vérifier pour cette chaîne? ou existe-t-il une convention que devrait renvoyer cette fonction glGetInfoLogARB?

+1

glGetInfoLogARB doit être utilisé uniquement à des fins de débogage, donc non, il n'y a pas de standard. – yuriks

Répondre

8

Essayez

bool CompileSuccessful(int obj) { 
    int status; 
    glGetShaderiv(obj, GL_COMPILE_STATUS, &status); 
    return status == GL_TRUE; 
} 

pour vérifier si un shader a été compilé avec succès et

bool LinkSuccessful(int obj) { 
    int status; 
    glGetProgramiv(obj, GL_LINK_STATUS, &status); 
    return status == GL_TRUE; 
} 

pour vérifier si tout le programme était lié avec succès.

+0

merci mais il semble que ça ne marche pas sur ma carte Intel. la valeur de status n'est pas modifiée du tout. – clamp

+0

Est-ce que votre carte Intel supporte les extensions nécessaires pour utiliser les shaders? – Danvil

+0

oui ils le font. il est supposé supporter OpenGL 2.0 – clamp

Questions connexes