2017-09-06 9 views
1

J'ai une certaine application OpenGL que j'ai compilée dans le passé mais que je ne peux pas maintenant dans la même machine. Le problème semble être dans le fragment shader ne pas compiler correctement.Erreur GLSL version incorrecte 450

J'utilise:

  • Glew 2.1.0
  • glfw 3.2.1

également tout contexte nécessaire est créé au début du programme. Voici comment ma fonction de création de programme ressemble:

std::string vSource, fSource; 
try 
{ 
    vSource = getSource(vertexShader, "vert"); 
    fSource = getSource(fragmentShader, "frag"); 
} 
catch (std::runtime_error& e) 
{ 
    std::cout << e.what() << std::endl; 
} 

GLuint vsID, fsID; 
try 
{ 
    vsID = compileShader(vSource.c_str(), GL_VERTEX_SHADER); //Source char* was checked and looking good 
    fsID = compileShader(fSource.c_str(), GL_FRAGMENT_SHADER); 
} 
catch (std::runtime_error& e) 
{ 
    std::cout << e.what() << std::endl; //incorrect glsl version 450 thrown here 
} 
GLuint programID; 
try 
{ 
    programID = createProgram(vsID, fsID); //Debugging fails here 
} 
catch (std::runtime_error& e) 
{ 
    std::cout << e.what() << std::endl; 
} 

glDeleteShader(vsID); 
glDeleteShader(fsID); 

return programID; 

Mon principal:

/* ---------------------------- */ 
/* OPENGL CONTEXT SET WITH GLEW */ 
/* ---------------------------- */ 
static bool contextFlag = initializer::createContext(vmath::uvec2(1280, 720), "mWs", window); 
std::thread* checkerThread = new std::thread(initializer::checkContext, contextFlag); 

/* --------------------------------- */ 
/* STATIC STATE SINGLETON DEFINITION */ 
/* --------------------------------- */ 
Playing Playing::playingState; //Failing comes from here which tries to create a program 



/* ---- */ 
/* MAIN */ 
/* ---- */ 
int main(int argc, char** argv) 
{ 
    checkerThread->join(); 
    delete checkerThread; 

    Application* app = new Application(); 
    ... 
    return 0; 
} 

Voici la recherche d'un exemple du fichier fragmentShader:

#version 450 core 

out vec4 fColor; 

void main() 
{ 
    fColor = vec4(0.5, 0.4, 0.8, 1.0); 
} 

Et ce que je prendre comme erreurs:

[Engine] Glew initialized! Using version: 2.1.0 
[CheckerThread] Glew state flagged as correct! Proceeding to mainthread! 

Error compiling shader: ERROR: 0:1: '' : incorrect GLSL version: 450 
ERROR: 0:7: 'fColor' : undeclared identifier 
ERROR: 0:7: 'assign' : cannot convert from 'const 4-component vector of float' to 'float' 

Mes caractéristiques sont les suivantes:

  • Intel HD 4000
  • Nvidia GeForce 840M

je dire que je compilé dans ce même shader machine avant. Je ne peux plus le faire après un format de disque. Cependant, chaque pilote est mis à jour.

+0

Etes-vous sûr que vos pilotes graphiques sont à jour? Tous les deux supportent la version 450 de GLSL. – Asesh

+1

Je n'ai pas pu trouver d'informations pour la carte Intel, mais celle de Nvidia devrait certainement supporter GLSL 450. Avez-vous essayé d'exécuter votre programme avec votre carte Nvidia? (Habituellement, Windows utilise par défaut le Intel, donc vérifiez que) – Banex

+0

@Asesh Hier quand ce problème a commencé à m'agacer, j'ai vérifié tous les pilotes. Je les ai même fait rouler et j'ai utilisé le panneau de nvidia pour installer les derniers – Primemaster

Répondre

1

Comme indiqué dans les commentaires le problème semblait être avec une option défectueuse de l'exécution de l'IDE avec graphics card sélectionné. Comme Windows par défaut la carte Intel HD 4000 intégrée, la commutation de la carte NVIDIA à la carte préférée par défaut par le système d'exploitation a résolu le problème.