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

OpenGL Discussion :

Calcul simple entre deux matrices via la GPU


Sujet :

OpenGL

  1. #21
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 26
    Points : 6
    Points
    6
    Par défaut
    Ok, Je n'ai pas tout saisi je te l'accorde sinon je ne serais pas venu sur ce Forum. A vrai dire, c'était pour avoir les bases car je suis sur un gros projet, qui de base fonctionne sous Unix mais pas sous Windows. ET depuis que je suis sur la partie OpenGl ça compile mais les traitements ne voulant pas faire, j'ai creusé et je sais que c'est à l'exécution d'OpenGl que les problèmes apparaissent.

    Il me semble qu'on a besoin d'un Fbo pour pouvoir réaliser des opérations de traitements d'image via notre Gpu et pouvoir y stocker nos résultats. Et perso, j'en ai besoin pour l'utilisation de mes algorithmes de traitements d'image.

    J'ai une simple question, parce que bon interpréter mes erreurs et y donner un sens est une chose LittleWhite, j'ai filé le code de mes fonctions et j'ai posé une simple question, pourquoi ai je une erreur dans ma fonction de création du Fbo juste après l'appel de la fonction glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo). A ce stade je suis au début de la création de mon Fbo me générant une erreur telle que GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT?

  2. #22
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    L'erreur explique pourquoi vous avez une telle erreur.
    Vous faites le glCheckFramebufferStatus() juste après le bind, alors que le FBO n'est pas du tout configuré. OpenGL vous l'indique.

    Il me semble qu'on a besoin d'un Fbo pour pouvoir réaliser des opérations de traitements d'image via notre Gpu et pouvoir y stocker nos résultats. Et perso, j'en ai besoin pour l'utilisation de mes algorithmes de traitements d'image.
    Lorsque l'on utilise OpenGL, quelques fois, mais pas nécessairement en Cuda/OpenCL.

    J'ai montré un tutoriel qui explique pas à pas la liste des choses à faire pour les FBO. Il y a un diagramme, il y a un code d'exemple. Faites déjà un truc qui marche et après, vous supprimerez les trucs, comme les render target en trop ou autre. Mais partez au moins d'une base stable.

    Et je pense que vous faites une confusion de l'endroit où vienne les erreurs, du coup, j'ai du mal à suivre, mais on se débrouille.
    Vous pourriez aussi utiliser gDEBugger pour déboguer le code OpenGL.

    Note : montrez moi votre code (la partie complète sur les FBO) et on verra bien.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #23
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 26
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Je vais créer un projet et suivre le tutorial, cependant comme je l'ai indiqué je ne souhaite pas utiliser autre chose qu'opengl pour la création de contexte ou autre. Je vais donc travailler uniquement qu'en glsl.

    Voici la partie du code sur le fbo :

    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
    GLuint glsl_fbo_create(t_u_int32 width, t_u_int32 height, bool bDepth) {
     
    	GLuint fbo;
    	GLenum status;
     
    		GLenum err = glewInit();
     
    	if(GLEW_OK != err){
    	  std::stringstream emsg;
    	  emsg << "Failed to inisialize GLEW - Reason = " << glewGetErrorString(err);
    	  throw std::runtime_error(emsg.str());
    	}
    	// Nous voulons au minimum la version 2 (shader et FBO en extension)
    	if (!GLEW_VERSION_2_0)
    	{
    		fprintf(stderr, "OpenGL 2 is not supported\n");
    	}
     
    	glGenFramebuffersEXT(1, &fbo);
    	GLH_CHECKERROR();
    	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
    	status = glCheckFramebufferStatus(GL_FRAMEBUFFER_EXT);
    	GLH_CHECKERROR();
     
     
    	bDepth = true;
     
    	if (bDepth) {
    		GLuint depth_rb;
    		// Create a render buffer for the depth
    		glGenRenderbuffersEXT(1, &depth_rb);
    		glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depth_rb);
    		glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, width, height);
    		GLH_CHECKERROR();
    		// Attach depth buffer to FBO
    		glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, depth_rb);
    		GLH_CHECKERROR();
    		glEnable(GL_DEPTH_TEST);
    		glDepthFunc(GL_LEQUAL);
    		status = glCheckFramebufferStatus(GL_FRAMEBUFFER_EXT);
    	}
    	else {
    		glDisable(GL_DEPTH_TEST);
    	}
     
    	glViewport(0, 0, width, height);
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity();
    	glMatrixMode(GL_MODELVIEW);
    	glLoadIdentity();
    	glDisable(GL_BLEND);
    	glEnable(GL_TEXTURE_2D);
    	glHint(GL_GENERATE_MIPMAP_HINT, GL_NICEST);
    	GLH_CHECKERROR();
    	status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
    	return fbo;
    }
    Merci encore pour ton aide LittleWhite !!!!!

  4. #24
    Expert éminent sénior

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

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 379
    Points
    11 379
    Billets dans le blog
    11
    Par défaut
    Bonjour !

    Comme le dit LittleWhite depuis un moment, dans ton code d'initialisation du FBO, tu n'attaches pas à ton FBO de texture pour la partie couleur.
    A la sortie de ta fonction d'initialisation, ton FBO est incomplet et donc inutilisable.
    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. #25
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 26
    Points : 6
    Points
    6
    Par défaut
    Ok, donc par déduction pour rendre mon fbo fonctionnel celui ci doit impérativement être attaché à une texture?

    Voici une autre fonction que j'ai écrite en y intégrant la texture mais rien y fait :

    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
     
    GLuint glsl_fbo_create(t_texture *tex, t_u_int32 width, t_u_int32 height, bool bDepth) {
     
     
    	int WindowSizeWidth = (int) width;
    	int WindowSizeHeight = (int) height;
    	GLuint fbo;
    	GLenum status;
    // On utilise GLEW pour avoir acces aux fonctions 
    	GLenum err = glewInit();
    	if (GLEW_OK != err)
    	{
    		fprintf(stderr, "Error: %s\n", glewGetErrorString(err));
            return 0;
    	}
     
    	// Nous voulons au minimum la version 2 (shader et FBO en extension)
    	if (!GLEW_VERSION_2_0)
    	{
    		fprintf(stderr, "OpenGL 2 is not supported\n");
    	}
     
    	glGenFramebuffersEXT(1, &fbo);
    	GLH_CHECKERROR();
     
     
    	if (bDepth) {
    		GLuint depth_rb;
    		// Create a render buffer for the depth
    		glGenRenderbuffersEXT(1, &depth_rb);
    		glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depth_rb);
    		glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, width, height);
    		GLH_CHECKERROR();
    		glBindRenderbuffer(GL_RENDERBUFFER,0);
    		GLH_CHECKERROR();
    		// Attach depth buffer to FBO
    		// Attachement des donnees au FBO
    		glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
    		GLH_CHECKERROR();
    		glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, tex->target, tex->handle,0);		
    		GLH_CHECKERROR();// Attach depth buffer to FBO
    		glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, depth_rb);
    		GLH_CHECKERROR();
    		status = glCheckFramebufferStatus(GL_FRAMEBUFFER_EXT);
    		GLH_CHECKERROR();
    		glEnable(GL_DEPTH_TEST);
    		glDepthFunc(GL_LEQUAL);
    	}
    	else {
    		glDisable(GL_DEPTH_TEST);
    	}
     
    	glViewport(0, 0, width, height);
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity();
    	glMatrixMode(GL_MODELVIEW);
    	glLoadIdentity();
    	glDisable(GL_BLEND);
    	glEnable(GL_TEXTURE_2D);
    	glHint(GL_GENERATE_MIPMAP_HINT, GL_NICEST);
    	GLH_CHECKERROR();
    	status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
    	return fbo;
    }
    Je tiens quand même à souligner que l'attache à la texture n'est pas une obligation car j'ai vu pas mal de code de création de fbo qui ne se contentait que d'une attache au render.

  6. #26
    Expert éminent sénior

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

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 379
    Points
    11 379
    Billets dans le blog
    11
    Par défaut
    Bien sur, l'attache à une texture est optionnelle.
    En fait, il doit y avoir quelque chose attaché à la composante couleur.
    Ce quelque chose peut être :
    - Un render buffer si tu ne souhaites pas faire de traitement sur cette composante
    - Une texture si tu veux récupérer le résultat et y effectuer un traitement (ce qui est ton cas, si je ne me trompe pas...)
    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).

  7. #27
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 26
    Points : 6
    Points
    6
    Par défaut
    Oui oui effectivement, c'est mon cas!!!!

    N'est il donc pas possible de créer indépendamment une texture et un fbo et ensuite les lier?

    En l'occurrence créer le fbo comme je le fais en le liant au render puis l'attacher à ma texture créée?

    J'ai du mal avec l'erreur liée à mon fbo car dans le code que j'ai fourni je n'ai pas l'impression d'avoir zappé une étape, si ce n'est l'attache à la texture qui dans la fonction une est remplacée par l'attache au render. Mon fbo devrait donc néanmoins être valide à sa création non?

  8. #28
    Expert éminent sénior

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

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 379
    Points
    11 379
    Billets dans le blog
    11
    Par défaut
    Le principal est qu'au moment de l'utilisation de ton FBO, il soit complet.
    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).

  9. #29
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 26
    Points : 6
    Points
    6
    Par défaut
    La question est là, pourquoi ne l'est il pas?

    Je ne vois pas ce qui cloche mais bon je recommence en partant du tutorial de LittleWhite, je verrais bien ^^

  10. #30
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 26
    Points : 6
    Points
    6
    Par défaut
    Salut LittleWhite,

    Je suis parti sur la base de ton exemple Fbo mais sans l'utilisation de la SDL pour la création du contexte mais plutôt l'utilisation de Glut

    Cependant, je suis un peu bloqué car j'essaye de faire la multiplication de deux images dont je stocke initialement en théorie les valeurs de pixels et l'intensité des pixels dans des vertex et fragment shaders. Mais je ne vois pas comment procéder.

    Maintenant que mon Fbo est valide, je veux y stocker le résultat de mon calcul, il s'agit bien sur là d'une multiplication de matrices.

  11. #31
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    La méthode vraiment basique pour ce faire est d'afficher un rectangle recouvrant l'écran (l'écran doit être de la taille de vos images dans ce cas), afin de forcer le pixel shader à s'executer sur chacun des pixels des images. Les sources de vos données seront deux textures. De plus, il faudra enlever tout filtrage des texture.
    Sinon, il faudrait utiliser CUDA ou les compute shader (OpenGL 4), c'est plus approprié.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. Optimisation d'un calcul simple entre deux dates
    Par grafik.muzik dans le forum Requêtes
    Réponses: 4
    Dernier message: 07/05/2009, 01h11
  2. calcul délais entre deux dates avec plages horaires
    Par leila eco dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 03/01/2007, 16h51
  3. [Requete] Calcul Somme entre deux temps pour chaque jour
    Par nico33307 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 21/03/2006, 00h58
  4. [Reseau] Connection entre deux XP via LAN
    Par scifire dans le forum Windows XP
    Réponses: 1
    Dernier message: 11/02/2006, 00h39
  5. Interpolation entre deux matrices
    Par supergrey dans le forum DirectX
    Réponses: 2
    Dernier message: 31/12/2004, 12h53

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