AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 [Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ?

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
D-z
Utilisateur confirmé: Rang *****
avatar

Messages : 1609
Localisation : Montpellier

MessageSujet: [Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ?   Jeu 29 Jan 2015 - 1:06

Ça fait cinq heures que je me tape la tête sur les murs pour expédier une bitmap à OpenGL. Le but est de bitmasker les infos d'une tile (id, luminosité) sur un std::uint8_t, tout bourrer dans une texture de la taille de la map, et refaire du bitmasking dans le fragment shader pour extraire le tout.

Ça ressemble à ça :

Code:
std::vector<TileData> bitmap(borderWidth() * borderHeight());

 std::generate(bitmap.begin(), bitmap.end(), [this, i = std::uint8_t(0)]() mutable {
 return 255 * (i = !i);
 });

 gl::Texture bitmapTex;
 
 bitmapTex.bind();
 TRY_GL(glTexStorage2D(GL_TEXTURE_2D, 1, GL_R8UI, borderWidth(), borderHeight()));
 TRY_GL(glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, borderWidth(), borderHeight(), GL_RED_INTEGER, GL_UNSIGNED_INT, bitmap.data()));
 bitmapTex.unbind();

gl::Texture est un bête wrapper qui fait ça dans son constructeur :

Code:
TRY_GL(glGenTextures(1, &_id));
 TRY_GL(glBindTexture(GL_TEXTURE_2D, _id));
 TRY_GL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST));
 TRY_GL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST));
 TRY_GL(glBindTexture(GL_TEXTURE_2D, 0));

J'ai déjà donné une bonne poignée d'heures à leurs fonctions d'alignement débiles, et ajouté ça au prototype (qui du coup marche nickel) :

Code:
TRY_GL(glPixelStorei(GL_PACK_ALIGNMENT, 1));
 TRY_GL(glPixelStorei(GL_UNPACK_ALIGNMENT, 1));
 TRY_GL(glEnableClientState(GL_VERTEX_ARRAY));

Et quand je transplante ça dans mon vrai projet, presto ! Bouillie de pixels qui s'en*hum*, joyeux largage de garbage dans ma VRAM (à un moment j'ai même localisé un truc qui semblait être la position de ma souris sur deux entiers 32bits). Ça clignote, ça segfaulte même de temps en temps (mais j'ai pas réussi à l'attraper au débugueur), mais ça me donne aucune info.

Au secours.

_________________
 
Home is not a place, it's a feeling.


Dernière édition par D-z le Jeu 29 Jan 2015 - 14:47, édité 1 fois
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8926
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: [Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ?   Jeu 29 Jan 2015 - 9:10

Bon j'ai jamais trop poussé la créations de textures donc ce que je dis est a prendre avec des pincettes, mais je suis pas sur que ce soit une bonne idée de faire un glTexSubImage2D sans avoir fait de glTexImage2D.
De souvenir cette fonction ne sert pas allouer la mémoire, mais plutôt a envoyer des pixels sur une 'texture' déjà crée.

Du coup tu devrais faire:

bitmapTex.bind();
TRY_GL(glTexImage2D(GL_TEXTURE_2D, 0, 1, borderWidth(), borderHeight(), 0, GL_RED, GL_UNSIGNED_INT, bitmap.data()));
bitmapTex.unbind();

_________________
                 
Revenir en haut Aller en bas
D-z
Utilisateur confirmé: Rang *****
avatar

Messages : 1609
Localisation : Montpellier

MessageSujet: Re: [Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ?   Jeu 29 Jan 2015 - 11:42

Le glTexStorage2D vient de cette doc, c'est censé faire la même chose qu'un glTexImage2D sans data. D'ailleurs j'avais un glTexImage2D avant et ça fait la même chose :/

_________________
 
Home is not a place, it's a feeling.
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8926
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: [Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ?   Jeu 29 Jan 2015 - 12:33

Ok, connaissais pas, bizarre dans tous les cas.


Déjà, est ce que ça fonctionne ce code de base (texture vide)?
Code:
int wid = 64, hei = 64;
unsigned int texid;
glGenTextures(1, &texid);
glBindTexture(GL_TEXTURE_2D, texid);
glTexImage2D(GL_TEXTURE_2D, 0, 4, wid, hei, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glBindTexture(GL_TEXTURE_2D, 0);

Puis ensuite:
Code:
int wid = 64, hei = 64;
std::vector<int> data(wid*hei);
for(int i=0; i<wid; ++i)
for(int j=0; j<hei; ++j)
  data[i+j*wid] = i*j;
unsigned int texid;
glGenTextures(1, &texid);
glBindTexture(GL_TEXTURE_2D, texid);
glTexImage2D(GL_TEXTURE_2D, 0, 4, wid, hei, 0, GL_RGBA, GL_UNSIGNED_BYTE, &data[0]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glBindTexture(GL_TEXTURE_2D, 0);

_________________
                 
Revenir en haut Aller en bas
D-z
Utilisateur confirmé: Rang *****
avatar

Messages : 1609
Localisation : Montpellier

MessageSujet: Re: [Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ?   Jeu 29 Jan 2015 - 14:47

J'ai fini par craquer et appliquer la technique du bulldozer : hg revert et recommencer la transplantation de zéro. Et ce coup-ci ça marche. Nous ne saurons malheureusement jamais ce qui a causé ce bug, mais je peux continuer mon projet qui est bien à la bourre. Amen !

_________________
 
Home is not a place, it's a feeling.
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8926
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: [Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ?   Jeu 29 Jan 2015 - 15:35

Ahah dommage, mais oui tout refaire ça marche bien dans pas mal de cas Razz

_________________
                 
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: [Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ?   

Revenir en haut Aller en bas
 
[Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ?
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» colle sous une moquette
» Queue De Lotte Au Saumon Fume
» Le Piano qui Fume
» QUICHE AU SAUMON FUME (Cosette12)
» recette a base de fromage fume (type ramzes)

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Programmation-
Sauter vers: