AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
Le deal à ne pas rater :
TCL C74 Series 55C743 – TV 55” 4K QLED 144 Hz Google TV (Via ODR ...
499 €
Voir le deal

 

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

Aller en bas 
2 participants
AuteurMessage
D-z
Utilisateur confirmé: Rang *****
D-z


Messages : 1611
Localisation : Montpellier

[Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ? Empty
MessageSujet: [Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ?   [Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ? EmptyJeu 29 Jan 2015 - 2: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 - 15:47, édité 1 fois
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


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

[Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ? Empty
MessageSujet: Re: [Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ?   [Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ? EmptyJeu 29 Jan 2015 - 10: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();

_________________
[Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ? Runningpotato1[Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ? TvF6GED [Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ? MdetltS
Revenir en haut Aller en bas
D-z
Utilisateur confirmé: Rang *****
D-z


Messages : 1611
Localisation : Montpellier

[Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ? Empty
MessageSujet: Re: [Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ?   [Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ? EmptyJeu 29 Jan 2015 - 12: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
onilink_


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

[Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ? Empty
MessageSujet: Re: [Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ?   [Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ? EmptyJeu 29 Jan 2015 - 13: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);

_________________
[Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ? Runningpotato1[Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ? TvF6GED [Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ? MdetltS
Revenir en haut Aller en bas
D-z
Utilisateur confirmé: Rang *****
D-z


Messages : 1611
Localisation : Montpellier

[Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ? Empty
MessageSujet: Re: [Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ?   [Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ? EmptyJeu 29 Jan 2015 - 15: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
onilink_


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

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

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

_________________
[Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ? Runningpotato1[Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ? TvF6GED [Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ? MdetltS
Revenir en haut Aller en bas
Contenu sponsorisé





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

Revenir en haut Aller en bas
 
[Nuked] Doctissimo : Mon OpenGL fume de la moquette, que faire ?
Revenir en haut 
Page 1 sur 1

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