IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[Erreur Opengl] erreur link Shader vide


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Mars 2015
    Messages
    58
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 58
    Par d�faut [Erreur Opengl] erreur link Shader vide
    Bonjour,

    Je suis actuellement entrain de faire mon moteur 3D suite au tuto "moteur 3D c++" et je suis entrain de faire un loader de Model 3D en utilisant tous les type de textures.

    J'ai un probl�me suite au chargement de shader qui m'emp�che d'avancer dans mon loader pour les textures de normal.

    J'ai r�ussie � compiler le shader sans probl�me aucune erreur est retourner mais des que j'essaye de lier un program cr�er (glLinkProgram) une erreur arrive mais le probl�me c'est qu'aucune infos n'est renvoyer.

    J'ai bo regarder sur internet je n'arrive pas � trouver le moyen de trouver cette erreur.

    voici les infos de ma carte graphique (je pr�cise que j'essaye d'utiliser opengl 3) :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    char* Vendor    = (char*)glGetString(GL_VENDOR);   // "NVIDIA Corporation"
    char* Renderer_ = (char*)glGetString(GL_RENDERER); // "GeForce 9300M GS/PCIe/SSE2"
    char* version   = (char*)glGetString(GL_VERSION);  // 3.0.0
    voici la fonction pour lier le program :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
         bool C_GLSLProgram::link(){
    		if (isLinked()) return true;
    		if (m_handle <= 0)
    			//return false;
     
    		glLinkProgram(m_handle);
     
    		if (CheckedErrorGLSLProgram(m_handle, GL_LINK_STATUS, "Link Status")){
    			deleteAllShader();
    			throw GLSLException("CheckedErrorGLSLProgram", "link");
    			return false;
    		}
    		else {
    			m_params.clear();
    			m_linked = true;
    		}
    		return false;
    	}
    voici le code pour m'afficher l'erreur :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
                                // rentre dans le if donc le program à bien été créer 
                                if (glIsProgram(p_progHandle)){				
    					GLint programState = 0;
     
    					CheckedGLCall(glGetProgramiv(p_progHandle, GL_LINK_STATUS, &programState));
    					if (programState != GL_TRUE){
    						int length = 0;
    						std::string logString;
     
    						CheckedGLCall(glGetProgramiv(p_progHandle, GL_INFO_LOG_LENGTH, &length));
     
    						if (length > 0) {
    							char * c_log = new char[length];
    							int written = 0;
    							CheckedGLCall(glGetProgramInfoLog(p_progHandle, length, &written, c_log));
    							logString = c_log;
    							delete[] c_log;
    						}
    						std::ostringstream outLog;
    						outLog	<< "Program Shader OpenGL Error in '" << File
    								<< "' at line: '" << Line
    								<< "\n\n"
    								<< "Error description : " << p_message << "\n : Error n°(" << programState << ")"
    								<< logString;
    						C_ILogger::setLogger(new C_LoggerMsgBox);
    						C_ILogger::Log() << outLog.str();
     
    						return true;
    					}
    				}
    				else{
    					std::ostringstream outLog;
    					outLog << "Program Shader OpenGL Error in '" << File
    						<< "' at line: '" << Line
    						<< "\n\n"
    						<< "Error description : \n" << p_message << "\n"
    						<< p_progHandle << " Program has not been compiled.";
    					C_ILogger::setLogger(new C_LoggerMsgBox);
    					C_ILogger::Log() << outLog.str();
    				}
    voici le Shader utiliser pour tester:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #version 130
     
    in vec3 aVertex;
     
    void main()
    {
        gl_Position = vec4(aVertex, 0.1);
    }
    Est-ce que quelqu'un aurais une id�e pour m�orienter vers mes recherches pour afficher le probl�me? je vous remercie d'avance

  2. #2
    Expert confirm�

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : Software Developer
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par d�faut
    Salut!

    Tu es en OpenGL 3, donc tu devrais fournir un fragment shader.

    Quelle est l'erreur que tu as? plantage? link du shader �chou� avec une erreur textuelle? Code d'erreur OpenGL?
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert � rien, mais qu'il est joli (des fois) : ProceduralGenerator (G�n�ration proc�durale d'images, et post-processing).

  3. #3
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Mars 2015
    Messages
    58
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 58
    Par d�faut
    Salut,

    D�soler encor d'avoir besoin de ton aide

    Tu es en OpenGL 3, donc tu devrais fournir un fragment shader.
    j'ai pas utiliser de Fragment Shader je pensais qu'il n'�tait pas obligatoire (peut �tre l'habitude de openGL 2) j'ai d�ja utiliser sur plusieur projet que le Vertex Shader.

    donc je doit obligatoirement utiliser un fragment Shader?

    Quelle est l'erreur que tu as? plantage? link du shader �chou� avec une erreur textuelle? Code d'erreur OpenGL?
    justement j'ai rien � part un plantage complet si j'enl�ve l�exception que j'ai mi. Il m'indique que j'ai une erreur au niveau de glLinkProgram(idProgram) mais ne m'envoie rien comme infos lorsque j'utilise glGetProgramInfoLog

    voici l'ordre d'�x�cution :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    // création du shader
    GLuint shaderHandle = glCreateShader(GetTypeShaderRenderer(p_type));
     
    // envoie du contenue du shader
    const char* c_code = shaderString.c_str();
    CheckedGLCall(glShaderSource(shaderHandle, 1, &c_code, NULL));
     
    // Compile le shader
    CheckedGLCall(glCompileShader(shaderHandle));
     
    // regarde si il y a une erreur
    if (CheckedErrorGLSLShader(shaderHandle, "shader compliation failed\n")){
    	deleteAllShader();
    	throw GLSLException("glCompileShader", "compileShader");
    }
    else {
    	// créer un program  
    	createHandle();
     
    	// attache le shader au program
    	CheckedGLCall(glAttachShader(m_handle, shaderHandle));
     
    	glLinkProgram(m_handle);
     
    	if (CheckedErrorGLSLProgram(m_handle, GL_LINK_STATUS, "Link Status")){
    		deleteAllShader(); // delete le program et les shader attachés
    		throw GLSLException("CheckedErrorGLSLProgram", "link");
    		return false;
    	}
    }
    CheckedGLCall est un macro que j'ai utiliser pour checker les erreur opengl (il lance la fonction et regarde si il y a une erreur openGL) :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    #define CheckedGLCall(x) { x; C_OGLException::PrintOpenGLError(#x, __FILE__, __LINE__); }
     
    static void PrintOpenGLError(const char* const Function, const char* const File, unsigned int const Line){
        GLenum Error = glGetError();
        if (Error != GL_NO_ERROR){
            std::string ErrorGLStr = C_OGLException::GetOpenGLError();
    	 if (!ErrorGLStr.empty()){						  
    	      C_ILogger::setLogger(new C_LoggerMsgBox);
    	      C_ILogger::Log() << "OpenGL Error in '" << File
    	                             << "' at line: '" << Line
    			             << "' calling function:" << Function
    				     << "Error description : \n" << ErrorGLStr;
    	}
         }
    }
    la ou sa plante c'est ici :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
            glLinkProgram(m_handle);
     
    	if (CheckedErrorGLSLProgram(m_handle, GL_LINK_STATUS, "Link Status")){
    		deleteAllShader(); // delete le program et les shader attachés
    		throw GLSLException("CheckedErrorGLSLProgram", "link");
    		return false;
    	}
    CheckedErrorGLSLProgram correspond � une autre macro :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    #define CheckedErrorGLSLProgram(x, e, m) \
    	(C_OGLShaderException::PrintProgramShaderError(x, e, __FILE__, __LINE__, m))
     
    // correspond à 
    static bool PrintProgramShaderError(GLuint p_progHandle, GLenum p_name, const char* const File, unsigned int const Line, const std::string& p_message = ""){
    				if (glIsProgram(p_progHandle)){				
    					GLint programState = 0;
     
    					CheckedGLCall(glGetProgramiv(p_progHandle, GL_LINK_STATUS, &programState));
    					if (programState != GL_TRUE){
    						int length = 0;
    						std::string logString;
     
    						CheckedGLCall(glGetProgramiv(p_progHandle, GL_INFO_LOG_LENGTH, &length));
     
    						if (length > 0) {
    							char * c_log = new char[length];
    							int written = 0;
    							CheckedGLCall(glGetProgramInfoLog(p_progHandle, length, &written, c_log));
    							logString = c_log;  // <- ici le log retourne rien
    							delete[] c_log;
    						}
    						std::ostringstream outLog;
    						outLog	<< "Program Shader OpenGL Error in '" << File
    								<< "' at line: '" << Line
    								<< "\n\n"
    								<< "Error description : " << p_message << "\n : Error n°(" << programState << ")"
    								<< logString;
    						C_ILogger::setLogger(new C_LoggerMsgBox);
    						C_ILogger::Log() << outLog.str();
     
    						return true;
    					}
    				}
    				else{
    					std::ostringstream outLog;
    					outLog << "Program Shader OpenGL Error in '" << File
    						<< "' at line: '" << Line
    						<< "\n\n"
    						<< "Error description : \n" << p_message << "\n"
    						<< p_progHandle << " Program has not been compiled.";
    					C_ILogger::setLogger(new C_LoggerMsgBox);
    					C_ILogger::Log() << outLog.str();
    				}
     
    				return false;
    			}
    le probl�me c'est que m�me en testant les erreur openGL et de Shader ainsi que Program Cela me retourne rien. Le shader compile bien, est bien attacher au program mais une fois que je veux faire un link la probl�me mais l'infos est vide

  4. #4
    Expert confirm�

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : Software Developer
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    						outLog	<< "Program Shader OpenGL Error in '" << File
    								<< "' at line: '" << Line
    								<< "\n\n"
    								<< "Error description : " << p_message << "\n : Error n°(" << programState << ")"
    								<< logString;
    Tu as cet affichage l�?
    Et tu es pass� avec un debugger, pour voir ce que vaut length?
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert � rien, mais qu'il est joli (des fois) : ProceduralGenerator (G�n�ration proc�durale d'images, et post-processing).

  5. #5
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Mars 2015
    Messages
    58
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 58
    Par d�faut
    Tu as cet affichage l�?
    en effet j'ai mon messageBox qui s'affiche :


    Et tu es pass� avec un debugger, pour voir ce que vaut length?
    En effet j'ai parcourue le code au moin 100 fois ligne par ligne
    length = 1

    C'est sa qui me parait bizarre car si je provoque une erreur dans le Shader et que j'utilise la m�me fonction de v�rife cela marche en me retournant bien l'infos de l'erreur.
    voici la fonction qui v�rifie l'erreur au niveau de la compilation du Shader:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
                         static bool PrintShaderError(GLuint p_handle, const char* const File, unsigned int const Line, const std::string& p_message = ""){
    					int result;
    					glGetShaderiv(p_handle, GL_COMPILE_STATUS, &result);
    					if (GL_FALSE == result) {
    						int length = 0;
    						std::string logString;
    						glGetShaderiv(p_handle, GL_INFO_LOG_LENGTH, &length);
    						if (length > 0) {
    							char * c_log = new char[length];
    							int written = 0;
    							glGetShaderInfoLog(p_handle, length, &written, c_log);
    							logString = c_log;
    							delete[] c_log;
    						}
    						std::ostringstream outLog;
    						outLog << "Shader OpenGL Error in '" << File
    								<< "' at line: '" << Line
    								<< "\n\n"
    								<< "Error description : " << p_message << "\n"
    								<< logString;
    						C_ILogger::setLogger(new C_LoggerMsgBox);
    						C_ILogger::Log() << outLog.str();
    						return true;
    					}
    					else{
    						return false;
    					}
    			}
    Le num�ro dans le message d'erreur correspond au retour de glGetProgramiv au cas ou j'aurais une erreur avec d'autre v�rif mais GL_LINK_STATUS retourne qu'un bool�an.
    J'ai regarder sur internet pour voir si c'�tait ma version de Shader qui pouvais poser probl�me ou non donc j'ai essayer plusieur version mais sans r�sultat.

    La seul chose que j'ai pas essayer c'est d'ajouter un FragmentShader car je sais que openGL 3 nous force � d�finir nous m�me pas mal de chose donc peut �tre que c'est sa mais je sais pas du tous.

  6. #6
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Mars 2015
    Messages
    58
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 58
    Par d�faut
    Ba je viens d'essayer en rajoutant un Fragment Shader mais malheureusement pareil m�me r�sultat

    voici le Fragment Shader :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #version 130
     
    // Sortie
    out vec3 Color;
     
    void main(){	
    	Color = vec3(1, 1, 1);
    }
    et le code qui compile les deux Shader :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
                    C_File shaderFile(p_fileName);
     
    		if (!shaderFile.exists()){
    			string message = string("Shader: ") + p_fileName + " not found.";
    			//throw GLSLProgramException(message);
    		}
     
    		ifstream inFile(p_fileName, ios::in);
    		if (!inFile) {
    			string message = string("Unable to open: ") + p_fileName;
    			//throw GLSLProgramException(message);
    		}
    		C_File shaderFile(p_fileName);
    		// Get file contents
    		string shaderString;
    		//Get shader source 
    		shaderString.assign((istreambuf_iterator< char >(inFile)), istreambuf_iterator< char >());
    		inFile.close();
     
    		GLuint shaderHandle = glCreateShader(GetTypeShaderRenderer(p_type));
     
    		const char* c_code = shaderString.c_str();
    		CheckedGLCall(glShaderSource(shaderHandle, 1, &c_code, NULL));
    		// Compile the shader
    		CheckedGLCall(glCompileShader(shaderHandle));
    		// Check for errors
    		if (CheckedErrorGLSLShader(shaderHandle, "shader compliation failed\n")){
    			deleteAllShader();
    			throw GLSLException("glCompileShader", "compileShader");
    		}
    		else {			
    			///////////////////////
    			// Ajout en dur pour test
    			//////////////////////
    			C_File shaderFileFrag("testShader.frag");
    			// Get file contents
    			string shaderString;
    			//Get shader source 
    			shaderString.assign((istreambuf_iterator< char >(inFile)), istreambuf_iterator< char >());
    			inFile.close();
     
    			GLuint shaderFragmentHandle = glCreateShader(GetTypeShaderRenderer(TShaderType::SHADER_FRAGMENT));
     
    			const char* c_codeFrag = shaderString.c_str();
    			CheckedGLCall(glShaderSource(shaderFragmentHandle, 1, &c_codeFrag, NULL));
    			// Compile the shader
    			CheckedGLCall(glCompileShader(shaderFragmentHandle));
    			// Check for errors
    			if (CheckedErrorGLSLShader(shaderFragmentHandle, "shader Framgment compliation failed\n")){
    				deleteAllShader();
    				throw GLSLException("glCompileShader", "compileShader");
    			}
     
     
     
     
     
    			createHandle();
    			// Compile succeeded, attach shader
    			CheckedGLCall(glAttachShader(m_handle, shaderHandle));
    			CheckedGLCall(glAttachShader(m_handle, shaderFragmentHandle));
    			link();
    		}
    aucune erreur dans la compilation et l'attach des deux Shader

    La je sais plus ou regarder honnetement je comprend pas.

    Est-ce possible qu'il plante au link car je n'est pas fait un BindAttribute avant de cr�er les Shader?

  7. #7
    Invit�
    Invit�(e)
    Par d�faut
    Salut
    OpenGL a beaucoup chang� avec la version 3 donc tu devrais peut-�tre tester sur des petits programmes avant de te lancer dans un moteur (cf, par exemple, http://www.opengl-tutorial.org).

    Dans tes shaders, la ligne #version 130 me semble bizarre pour faire de l'OpenGL 3. Tu devrais essayer les shaders suivants.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    #version 330 core
    // vertex shader
    layout(location = 0) in vec3 vertexPosition_modelspace;
    void main() {
        gl_Position = vec4(vertexPosition_modelspace, 1.0);
    }
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    #version 330 core
    // fragment shader
    layout(location = 0) out vec3 color;
    void main() {
        color = vec3(1,0,0);
    }

  8. #8
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Mars 2015
    Messages
    58
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 58
    Par d�faut
    Salut

    Merci pour ton aide.

    Alors j'ai essayer ton vertex Shader et Fragment Shader sans succ�s toujour pareil

    J'ai donc suivie ton conseil et le faire sur un autre petit projet et en effet j'en avais d�ja un (un examen de cour) j'ai donc essayer sur ce projet mais pareil sans succ�s

    Se code la marche sur le petit projet :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    #version 120
     
    uniform bool key_R = false;
    uniform bool key_G = false;
    uniform bool key_B = false;
     
    uniform bool key_SPACE = false;
     
    vec4 reverseColor(in vec4 p_color){
    	/* Inverse la couleur rouge */
     
    	p_color.r = 1 - p_color.r;	
     
    	p_color.g = 1 - p_color.g;
     
     
    	p_color.b = 1 - p_color.b;
     
     
     
     
    	return vec4(p_color);
    }
     
    vec4 disabledColor(vec4 p_color){
    	return vec4(p_color.rgb, 0.0f);
    }
     
     
    void main()
    {
     
    	bool _disabledColor = false;
    	vec4 color = gl_Color;
     
    	/* check la couleur rouge */
    	if(color.r > 0 && key_R ){
        		color.r = 0;
        	}
    	/* check la couleur verte */
    	if(color.g > 0 && key_G ){
        		color.g = 0;
        	}
    	/* check la couleur bleu */
    	if(color.b > 0 && key_B ){
        		color.b = 0;
        	}
     
    	/* inverse les couleurs si space */
    	if(key_SPACE){
        		color = reverseColor(color);
        	}
     
     
    	gl_FragColor = color;
     
     
    }
    il link bien sans probl�me mais des que j'essaye de faire avec les shaders que tu ma conseiller cela reviens au m�me il compile bien mais des que je fait link cela provoque une erreur et l'infos de l'erreur est vide.
    Je n'arrive pas a comprendre pourquoi j'ai pas l'infos de l'erreur.

    Sa me permettrait au moin de voir le probl�me la je sais pas d'ou il viens.

  9. #9
    Invit�
    Invit�(e)
    Par d�faut
    Ce n'est peut-�tre qu'une impression, mais on dirait que tu essaies de rassembler des morceaux de code sans les comprendre, en esp�rant que �� fasse ce que tu veux. OpenGL, est suffisamment complexe pour que cette m�thode ait tr�s peu de chance de fonctionner. � mon avis, tu devrais repartir de z�ro depuis un code minimal pour bien comprendre les bases d'OpenGL 3 puis ajouter progressivement la gestion d'erreur, lecture de shader depuis un fichier, chargement de textures/objets, etc...

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    // g++ `pkg-config --cflags --libs glew glfw3` demo_ogl3.cpp 
     
    #include <GL/glew.h>
    #include <GLFW/glfw3.h>
     
    const char * vsCode = "#version 330 core\n"\
                           "layout(location = 0) in vec3 vertexPos;\n"\
                           "void main() { gl_Position = vec4(vertexPos, 1.0); }\n";
     
    const char * fsCode = "#version 330 core\n"\
                           "layout(location = 0) out vec3 color;\n"\
                           "void main() { color = vec3(1,0,0); }\n";
     
    GLuint LoadShaders() {
        GLuint vertexShaderID = glCreateShader(GL_VERTEX_SHADER);
        GLuint fragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);
     
        glShaderSource(vertexShaderID, 1, &vsCode, NULL);
        glCompileShader(vertexShaderID);
     
        glShaderSource(fragmentShaderID, 1, &fsCode , NULL);
        glCompileShader(fragmentShaderID);
     
        GLuint ProgramID = glCreateProgram();
        glAttachShader(ProgramID, vertexShaderID);
        glAttachShader(ProgramID, fragmentShaderID);
        glLinkProgram(ProgramID);
     
        glDeleteShader(vertexShaderID);
        glDeleteShader(fragmentShaderID);
        return ProgramID;
    }
     
    int main() {
        glfwInit();
        GLFWwindow* window = glfwCreateWindow(800, 600, "demo", nullptr, nullptr);
        glfwMakeContextCurrent(window);
        glewInit();
     
        glClearColor(0.0f, 0.0f, 0.4f, 0.0f);
     
        GLuint vertexArrayID;
        glGenVertexArrays(1, &vertexArrayID);
        glBindVertexArray(vertexArrayID);
     
        GLuint programID = LoadShaders();
     
        const GLfloat vbData[] = 
        { -1.0f, -1.0f, 0.0f,   1.0f, -1.0f, 0.0f,   0.0f, 1.0f, 0.0f, };
        GLuint vertexBuffer;
        glGenBuffers(1, &vertexBuffer);
        glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
        glBufferData(GL_ARRAY_BUFFER, sizeof(vbData), vbData, GL_STATIC_DRAW);
     
        do {
            glClear( GL_COLOR_BUFFER_BIT );
            glUseProgram(programID);
     
            glEnableVertexAttribArray(0);
            glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
            glVertexAttribPointer( 0, 3, GL_FLOAT, GL_FALSE, 0, 0);
            glDrawArrays(GL_TRIANGLES, 0, 3); 
            glDisableVertexAttribArray(0);
     
            glfwSwapBuffers(window);
            glfwPollEvents();
     
        } while ( glfwGetKey(window, GLFW_KEY_ESCAPE) != GLFW_PRESS 
                or glfwWindowShouldClose(window) == 0 );
     
        glDeleteBuffers(1, &vertexBuffer);
        glDeleteVertexArrays(1, &vertexArrayID);
        glDeleteProgram(programID);
        glfwTerminate();
        return 0;
    }

  10. #10
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Mars 2015
    Messages
    58
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 58
    Par d�faut
    Salut,

    Ce n'est peut-�tre qu'une impression, mais on dirait que tu essaies de rassembler des morceaux de code sans les comprendre, en esp�rant que �� fasse ce que tu veux.
    En faite je comprend et je sais utiliser les Shader avec OpenGL 2 et comme tu la signaler openGL 3 est vraiment diff�rents comme j'ai pu le voir avec "Utilisation des VBO avec OpenGL 3.x". Mon probl�me ne se situe pas sur la non compr�hension des fonctions et de l'utilisation mais d'une erreur qui est pr�sente mais m'indique en rien le probl�me.

    Quand j'utilise mon petit projet fait en class de cour avec le shader cela ne fonctionnais pas non plus alors que le Shader que j'ai mi sur le post d'avant fonctionnais correctement.
    J'ai donc suivie ton conseil et repartie de z�ro avec un fichier et cela fonctionne parfaitement

    J'ai donc d�couper le code qui marchais pas petit � petit pour trouver d'ou provient le probl�me car c'est exactement le m�me code sauf qu'il est encapsuler dans une classe.

    J'ai enfin r�ussie � trouver mon probl�me et il viens d'une MACRO :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
                          //////////////////////////////
                          // MACRO 
                          #define CheckedErrorGLSLProgram(x, e, m) \
    	                    (C_OGLShaderException::PrintProgramShaderError(x, e, __FILE__, __LINE__, m))
     
                          static bool PrintProgramShaderError(GLuint p_progHandle, GLenum p_name, const char* const File, unsigned int const Line, const std::string& p_message = ""){
    				if (glIsProgram(p_progHandle)){				
    					GLint programState = 0;
     
                                             //////////////////////////////////
                                             // p_progHandle = 1
                                             // p_name         = GL_LINK_STATUS
    					CheckedGLCall(glGetProgramiv(p_progHandle, p_name, &programState));
    					if (programState != GL_TRUE){
    						int length = 0;
    						std::string logString;
     
    						CheckedGLCall(glGetProgramiv(p_progHandle, GL_INFO_LOG_LENGTH, &length));
     
    						if (length > 0) {
    							char * c_log = new char[length];
    							int written = 0;
    							CheckedGLCall(glGetProgramInfoLog(p_progHandle, length, &written, c_log));
    							logString = c_log;
    							delete[] c_log;
    						}
    						std::ostringstream outLog;
    						outLog	<< "Program Shader OpenGL Error in '" << File
    								<< "' at line: '" << Line
    								<< "\n\n"
    								<< "Error description : " << p_message << "\n : Error number(" << programState << ")"
    								<< logString;
    						C_ILogger::setLogger(new C_LoggerMsgBox);
    						C_ILogger::Log() << outLog.str();
     
    						return true;
    					}
    				}
    				else{
    					std::ostringstream outLog;
    					outLog << "Program Shader OpenGL Error in '" << File
    						<< "' at line: '" << Line
    						<< "\n\n"
    						<< "Error description : \n" << p_message << "\n"
    						<< p_progHandle << " Program has not been compiled.";
    					C_ILogger::setLogger(new C_LoggerMsgBox);
    					C_ILogger::Log() << outLog.str();
    				}
     
    				return false;
    			}
    quand je link le Program directement sans passer par la MACRO cela fonctionne des que je l'utilise cela ne fonctionne pas et me renvoie aucun message d'erreur INFOS_LOG = "".
    Se que je trouve bizarre c'est que je rentre dans la MACRO et les valeur sont exactement les m�me que si je ne l'utilisait pas. Je rentre bien dedans le code s'ex�cute mais pourquoi cela ne fonctionne pas aucune id�e alors que c'est exactement le m�me code ex�cuter.

    Je vais faire sans pour le moment je mis remettrais un peu plus tard mais c'est �trange comme m�me.

    Je te remercie de ton aide j'ai enfin trouver l'erreur en recommen�ant tous depuis le d�but

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [gsoap] erreur par rapport au noeud vide
    Par grelon dans le forum Biblioth�ques
    R�ponses: 1
    Dernier message: 24/04/2007, 17h07
  2. [VBA][03] Erreur dans une fonction qui vide des tables
    Par NiKoTiNe dans le forum VBA Access
    R�ponses: 3
    Dernier message: 20/04/2007, 14h13
  3. message d'erreur quand un champs est vide
    Par VIRGINIE87 dans le forum Langage SQL
    R�ponses: 1
    Dernier message: 22/02/2007, 12h13
  4. Erreur Opengl
    Par harris_macken dans le forum MATLAB
    R�ponses: 1
    Dernier message: 30/11/2006, 09h28
  5. erreurs opengl avec devcpp
    Par Vermin dans le forum OpenGL
    R�ponses: 2
    Dernier message: 13/04/2004, 14h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo