begin process at 2012 05 29 21:24:46
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Problème de mapping après alloc dynamique [OGL]


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème de mapping après alloc dynamique [OGL]

mardi 21 septembre 2004 à 11:34:54 | Problème de mapping après alloc dynamique [OGL]

gilimcce

Désolé de remettre ce sujet, mais le suicide est proche....

Si quelqu'un y comprend qq chose....
Je suis revenu a quelque chose de basique :

un pointeur simple sur unsigned char pour la variable texture qui contient les pixels de mon image.

Je n'ai pas d'erreur de desallocation, mais la fonction gluBuild2DMipmaps ne mappe pas... pourtant des données lui sont transmises et elles me semblent contigues.

Je vous livre le code. J'espere que qq un aura la synthese qu'il m'a manque.

Merci....

///////////////////// MAIN ////////////////////////

int main(int argc, char **argv)
{
unsigned char *text;
....
....

/* Chargement de la texture */

text=loadJpegImage(chemin, &width, &height);
....
....


gluBuild2DMipmaps(GL_TEXTURE_2D,3,width,height,GL_RGB,GL_UNSIGNED_BYTE,text);
....
....
}

///////////////////// IMAGE ////////////////////////

unsigned char *loadJpegImage(char *fichier, int *Pt_width, int *Pt_height)
{
....
....

unsigned char *ligne;
FILE *file;

int t_width = cinfo.image_width;
int t_height = cinfo.image_height;

Pt_width = &(t_width);
Pt_height = &(t_height);

if (cinfo.jpeg_color_space==JCS_GRAYSCALE)
{
int dim_gris = (t_width * t_height);

unsigned char *image_gris = (unsigned char
*)malloc(dim_gris*sizeof(unsigned char));
if (image_gris == NULL){cout<<endl<<"Erreur d'allocation
image_gris"<<endl;exit(0);}

unsigned char *texture = (unsigned char
*)malloc(dim_gris*3*sizeof(unsigned char));
if (texture == NULL){cout<<endl<<"Erreur d'allocation
texture"<<endl;exit(0);}

#ifdef PERFORM_MEMORY_CHEKS
MEMCHEK_reportLeak();
#endif

jpeg_start_decompress(&cinfo);
ligne=image_gris;

while (cinfo.output_scanline<cinfo.output_height)
{
ligne=image_gris+t_width*cinfo.output_scanline;
jpeg_read_scanlines(&cinfo,&ligne,1);
}

jpeg_finish_decompress(&cinfo);
jpeg_destroy_decompress(&cinfo);

// rearrangement de l'image scannee dans le tableau de texture 3D
// ici nous sommes en niveau de gris, donc on copie le meme octet dans
// chacune des 3 cases RGB

for (i=0;i<t_height;i++)
for (j=0;j<t_width;j++)
{
texture[i*t_width*3+j*3 ] = image_gris[i*t_width+j];
texture[i*t_width*3+j*3+1] = image_gris[i*t_width+j];
texture[i*t_width*3+j*3+2] = image_gris[i*t_width+j];
}

free(image_gris);

return texture;
}
}
mardi 21 septembre 2004 à 11:51:21 | Re : Problème de mapping après alloc dynamique [OGL]

gagah1

Membre Club
Verifie si tu n'as pas oublié glEnable(GL_TEXTURE_2D);
mardi 21 septembre 2004 à 11:56:43 | Re : Problème de mapping après alloc dynamique [OGL]

gilimcce

Tu sais... j'aurais vraiment aimé
mais en fait le problème remonte à loin :

Dans un premier tps, j'enregistrais mon image dans 1 tableau
3D de dimensions finies [720][1440][3]...
mais à terme, les dimensions de mes images peuvent varier (selon la planète que je souhaite modéliser), donc allocation dynamique, et c'est là que rien ne va plus

Après un problème de non contiguité des donnée, j'ai eu un problème de désallocation, puis maintenant... ça. Mon corps reste gris, pas de texture mappée.

Allé allé, d'autres idées ?
mardi 21 septembre 2004 à 12:16:13 | Re : Problème de mapping après alloc dynamique [OGL]

djl

gilimcce > mais tu y arriveras jamais si tu n'a pas les bases du langages, sincerment tu seras beaucoup plus efficace


Pt_width = &(t_width);
Pt_height = &(t_height);

c'a na aucun sens, tu affecte des adresses qui deviendront invalide en sortie de la fonction

mets plutot

*Pt_width = t_width;
*Pt_height =t_height;


le cast du malloc n'est pas necessaire, et compile en mode c

mardi 21 septembre 2004 à 14:49:10 | Re : Problème de mapping après alloc dynamique [OGL]

gilimcce

Bonjour djil,

ne pas aboutir n'est nullement envisageable.
Les bases... c'est pas ma formation, mais je m'efforce
de faire qq chose de clair et efficace. Merci d'y contribuer.

*Pt_width = t_width;
*Pt_height =t_height;

Oui... ça paraît (c'est) plus "sensé".
Dans le corps principal, les valeurs étaient toutefois transmises.

Concernant le cast du malloc :
en fait, j'utilise new... mais pour tester mes allocations (et les problèmes qu'elles posaient en les libérant) j'utilise une routine

#ifdef PERFORM_MEMORY_CHEKS
MEMCHEK_reportLeak();
#endif

qui ne peut travailler que sur malloc.

Mais New ne règle pas ce problème de mappage.

Lors de mes précédents posts, tu m'indiquait que gluBuild2DMipmaps attendait un pointeur sur des données contigues. Je pensais lui fournir dans ce dernier code...

mardi 21 septembre 2004 à 16:51:45 | Re : Problème de mapping après alloc dynamique [OGL]

djl

et c'est bien ce que tu fais, donc si il y a un probleme, ca vient d'ailleur

"Oui... ça paraît (c'est) plus "sensé".
Dans le corps principal, les valeurs étaient toutefois transmises.
"

mouai, alors c'est vraiment bizar vu que tu ne les affecte pas, tu fais seulement une affactation entre 2 pointeurs a porté local
de toute facon fais toujours comme ca

*Pt_width = t_width;
*Pt_height =t_height;

la tu modifi bien les variable (dont les pointeur contienne l'adresse)
pour comprendre l'arithmetque des pointeur suffit de connaitre les operateur unaire * et &, le typage des pointeurs (et void*), le type ptrdiff_t pour stocker une difference entre deux pointeurs et la strategie des decalage d'adresse (indexation tableau, champ de struct...)

par contre tu es sur de ton code jpeg ? je connais pas la libjpeg mais je vois pas comment tu passes les données dans le buffer pointé par ligne ?
mardi 21 septembre 2004 à 18:54:03 | Re : Problème de mapping après alloc dynamique [OGL]

gilimcce

Argh...........

j'étais pourtant sur d'avoir testé les valeurs en sortie.....

mais finalement c'est bien ça.

*Pt_width = t_width;
*Pt_height =t_height;

clap, clap.

concernant le remplissage du buffer pointant sur ligne :
chaque ligne scannée lui est rajouté tant qu'on a pas
atteint le nbre total de lignes...
mais j'imagine que tu avais deviné. Je ppourrais pas te donner
plus de détail.

Mais ça marche, enfin.

vais passer une bonne nuit.

A tout hasard, tu aurais vu mon autre message ds OpenGL
à propos des ombrages automatiques que je souhaitrais modifier ?

On me propose de coder des shader opengl... en assembleur.

Je souhaite utiliser une autre loi de diffusion que celle utilisée (non adaptée aux planètes) mais comment la court-circuiter ?
Merci.
mardi 21 septembre 2004 à 19:08:40 | Re : Problème de mapping après alloc dynamique [OGL]

djl

ben voila


je vais voir de suite ton autre post
mardi 21 septembre 2004 à 20:06:15 | Re : Problème de mapping après alloc dynamique [OGL]

gilimcce

"tu seras beaucoup plus efficace"

...

je sens que ça vient en effet
mardi 21 septembre 2004 à 20:12:14 | Re : Problème de mapping après alloc dynamique [OGL]

djl

sans te mentir, en connaissant la jpeglib, j'aurais fais ce code en 10min, et toi depuis combien de temps tu trainnes ce probleme de tableau :)

tu vois tout de suite la difference !


Cette discussion est classée dans : image, char, width, unsigned, gris


Répondre à ce message

Sujets en rapport avec ce message

Question idiote a propos des tableaux 3D [ par boulfrite ] Salut...J'ai une question un peu idiote : Est-ce que unsigned char image [256][256][3];est la meme chose que<table border= transformer un tableau 2d en image bitmap [ par gyzmo1 ] Bonjour a tous, voilà mon problème, je suis en train de mettre en place une méthode de comparaison de signature manuscrites. Cette méthode s applique Allocation Dynampique trois dimensions [ par gilimcce ] Bonsoir,J'alloue la mémoire d'un tableau contenant les pixels d'une image. Si je déclare classiquement mon tableau ( ex: image[512][1024][3] ) tout s Allocation dynamique 3 dimensions [ par gilimcce ] Bonsoir,J'alloue la mémoire d'un tableau contenant les pixels d'une image. Si je déclare classiquement mon tableau ( ex: image[512][1024][3] ) tout se Affichage image. [ par talaron ] Mon problème est le suivant : J'ai une librairie de traitement d'images en mode console et j'aimerais afficher une image BMP 24bits toute bete.J'ai do OpenGL [ par bouba ] Bonjour, je souhaite dessiner avec OpenGL et afficher le résultat dans une image mais je ne veux pas du tout l'afficher dans une fenêtre, j'ai donc cr Operateur new allocation new [ par yserver ] Bonjour, je cherche un peu d'aide pour cette modeste class.Telle quelle est présenté la elle génère une erreur  lors de l'execution (ligne sig Problème avec "fclose" [ par Polack77 ] Bonjours, cas fais 2 heures que je cherche mon bug et je ne trouve pas! C'est frustrant!J'ai fais pas mal de test et je ne trouve rien.Je met donc mon methode system() [ par sperate ] Bonjour,je code sur visual studio 2005 une simple application en mode console.j'utilise la methode "system()" pour envoyer des commandes simples genre Niveau de gris [ par jujukakou ] bonjour a tous et merci d'avance pour votre aide Je suis à la recherche d'un petit logiciel en C qui puisse convertir une image en niveau de gris il


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,499 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales