:: PlayerAdvance.org ::  

Pr嶰嶮ent   :: PlayerAdvance.org :: > :: Forums H嶵erg廥 :: > 無ibrary

無ibrary Official 無ibrary forum (English / Fran蓷is)

Publicit

R廧onse
 
Outils de la discussion Modes d'affichage
Vieux 28/06/2008, 19h59   #1
sdevilcry
Membre
 
Date d'inscription: 02/05/2008
Messages: 22
Par d嶨aut Idee pour alleger la vram

Salut tout le monde, voila avec mon groupe de projet on a toujours de gros probleme avec la vram ... bref je vais vous expliquer pourquoi.

Au d嶵ut, on charger en ram des images de 16xx*12xx (me souviens plus exactement combien) et on cr嶪r une map avec 蓷, on arriver a afficher la map mais des qu'on voulais afficher un sprite en plus, bah c'彋ait fini..

J'ai donc eu l'id嶪 de r嶮uire la map et le sprite, on est donc passer a une image de 512 * 512 et d'un sprite de 16*16 au lieu de 32*32. Comme tout est en puissance de 2 蓷 all銶e le total

Ce qui bloque :

J'ai cr嶪r une image qui me prendra tout l'嶰ran tu haut afin de m'en servir en tant qu'inventaire, le probl鋗e, si je blite en m瘱e temps l'image dans l'ecran du bas l'image de 512 * 512, l'une des deux ne s'affichera pas ...

L'idee :

C'est de charger en ram l'image de 512*512, et de creer une image simple de 256*191 en vram, avec laquelle je vais faire une copie en memoire d'un pointeur sur l'autre, donc utiliser un memcpy

Le soucis est qu'on a du mal a comprendre comment brunni a stocker l'image en ram et comment on pourrai r嶰up廨er les donner n嶰essaire que l'on veut copier sur notre pointeur temporaire afin d'afficher une partie d'image d廥irer

exemple :
Citation:

var->toscale = ulLoadImageFilePNG("map.png", 0, UL_IN_RAM, UL_PF_PAL8);
var->bg = ulCreateImage(256, 191, UL_IN_VRAM, UL_PF_PAL8, 8);
memcpy(var->bg, var->toscale, 256*191);
var->inv.bg = ulLoadImageFilePNG("inventaire.png", 0, UL_IN_VRAM, UL_PF_PAL8);
Mais ceci ne marche pas :'(

J'esp鋨e que j'ai 彋 compr嶭ensible

merci de votre soutiens
sdevilcry est d嶰onnect   R廧onse avec citation

Publicit

Vieux 28/06/2008, 21h59   #2
Brunni
Super Mod廨ateur
 
Date d'inscription: 10/11/2005
Localisation: Un pays avec beaucoup de banques
Messages: 3 226
Par d嶨aut

Si ton image fait 512x512, alors en m幦oire c'est un tableau de 512 lignes de 512 pixels, les lignes 彋ant la suite les unes des autres.
Forc幦ent si copies 256 * 191 avec memcpy tu copies 48896 octets, c'est dire que comme chaque pixel fait 1 octet (8 bits) 48896 pixels. Comme chaque ligne fait 512 pixels tu copies en fait 95.5 lignes de l'image source vers l'image destination. Probl鋗e: l'image de destination n'a pas la m瘱e largeur, donc imaginons que l'image source fait en fait 8 pixels et l'image de destination 4, en copiant l'image suivante:
0 1 2 3 4 5 6 7
8 9 a b c d e f
Tu auras sur l'image destination:
0 1 2 3
4 5 6 7
8 9 a b
c d e f
Ce qui n'est certainement pas ce que tu veux. Tu dois plut矌 copier l'image ligne par ligne, en prenant soin de sauter les 256 pixels droite de chaque ligne qui ne te servent rien.
Brunni est d嶰onnect   R廧onse avec citation
Vieux 29/06/2008, 14h17   #3
sdevilcry
Membre
 
Date d'inscription: 02/05/2008
Messages: 22
Par d嶨aut

Merci brunni j'avais pas penser a ca

On s'y remet demain

merci encore !
sdevilcry est d嶰onnect   R廧onse avec citation
Vieux 29/06/2008, 18h11   #4
sdevilcry
Membre
 
Date d'inscription: 02/05/2008
Messages: 22
Par d嶨aut

hum en faite 蓷 marche pas du tout..

j'ai voulu essayer quelque chose :

Citation:
var->toscale = ulLoadImageFilePNG("map.png", 0, UL_IN_RAM, UL_PF_PAL8);
var->bg = ulCreateImage(1, 1, UL_IN_VRAM, UL_PF_PAL8, 8);
ensuite je fait

Citation:
var->bg[0] = var->toscale[0];
il m'affiche sur l'嶰ran du bas toute la map, alors qu'il devrait m'afficher qu'un pixel nan ?

Maintenant si je fait :

Citation:
var->bg[0] = var->toscale[1];
Ca plante, je comprend vraiment pas pourquoi..

Mon image est toujours en 512*512 en 8 bits format png.

J'ai essayer de voir dans ton drawing.c comment tu allouer la m幦oire et je vois que tu fais comme ca :

Citation:
if (location == UL_IN_RAM) {
int size = (ul_pixelSizes[format] * img->sysSizeX * img->sysSizeY) >> 3;
img->texture = malloc(size);
Ce n'est pas dans img->texture qu'il faudrait que je tape ?

Autre question (j'essay de vraiment comprendre comment sont stocker les donner en ram et vram de la ds)

size = (ul_pixelSizes[format] * img->sysSizeX * img->sysSizeY) >> 3;

Pourquoi r嶮uire la taille de (2^3) ?

car au final ca donnerai size = (8 * size_x * size_y) / 2^3; nan ?

Edit : j'ai compris pourquoi ca segfaulter quand je faisait : var->toscale[1], vu que UL_IMAGE est une struct il n'y a qu'une adresse en memoire de cettre structure, du coup c'est pas vraiment la bonne valeur a taper (Case memoire interdite, aurevoir)

Redit :
Citation:
car au final ca donnerai size = (8 * size_x * size_y) / 2^3; nan ?
Je pense que du divise par 8, car 8 bits >: 1 octet nan ?

J'ai commencer a avoir un leger rendu au niveau de la copi en etudiant la lib png, masi c e4st pas encore ca, j;ai du oublier un detail, :s

voici le bout de code :
Citation:
/* fill the bg in good position */
void scale_image(t_quest *var)
{
int x;
int y;
u8 *p_src = (u8*)var->toscale->texture;
u8 *p_dest = (u8*)var->bg->texture;

for (y = 0; y < 191; ++y)
{
for (x = 0; x < 256; ++x)
{
p_dest[x] = p_src[x];
//((char *)var->bg->texture)[((y * x) + x)] = *p_dest;
//var->bg[x * y] = tmp[pos];
}
p_dest += ((var->toscale->sysSizeX * 8) >> 3);
p_src += ((var->bg->sysSizeX * 8) >> 3);
}
}
apercu en image :



Nouvel edit :
Erreur de ma part, j'ai inverser les pointeur a ce niveau la :
p_dest += ((var->toscale->sysSizeX * 8) >> 3); deviens += ((var->bg->sysSizeX * 8) >> 3);
p_src += ((var->bg->sysSizeX * 8) >> 3); deviens += ((var->toscale->sysSizeX * 8) >> 3

nouvel apercu :

Derni鋨e modification par sdevilcry ; 30/06/2008 15h59.
sdevilcry est d嶰onnect   R廧onse avec citation
Vieux 30/06/2008, 16h05   #5
sdevilcry
Membre
 
Date d'inscription: 02/05/2008
Messages: 22
Par d嶨aut

juste un petit up pour qu'on voit que le post a 彋 mis a jour

Un ami a refait ma boucle de cette facon :
Citation:
for (y = 0; y < 191; ++y)
{
memcpy(var->bg->texture + y * 256, var->toscale->texture + y * 512, 256);
}
meme resultat, je pense que ca doit venir de la palette maintenant :s

Derni鋨e modification par sdevilcry ; 30/06/2008 16h28.
sdevilcry est d嶰onnect   R廧onse avec citation
Vieux 30/06/2008, 16h46   #6
Noda
Membre confirm
 
Date d'inscription: 10/11/2005
Localisation: montr嶧l jusqu'au 4 mai, apr鋊 retour en france ^^
Messages: 570
Par d嶨aut

Juste pour signaler, la uLib a un bug dans la gestion des palettes: supprimer une palette de la m幦oire moisit g幯廨alement les palettes charg嶪s avant et/ou apr鋊 celle supprim嶪. J'ai d嶴 fait remonter le bug Brunni.
__________________
http://nodadev.wordpress.com
Noda est d嶰onnect   R廧onse avec citation
Vieux 30/06/2008, 16h49   #7
thoduv
Membre confirm
 
Date d'inscription: 10/11/2005
Localisation: ...
Messages: 1 464
Par d嶨aut

Citation:
Envoy par Noda Voir le message
Juste pour signaler, la uLib a un bug dans la gestion des palettes: supprimer une palette de la m幦oire moisit g幯廨alement les palettes charg嶪s avant et/ou apr鋊 celle supprim嶪. J'ai d嶴 fait remonter le bug Brunni.
Aaaaaaaaaaaah c'est 蓷aaaaaaaaaaaaaaa !
Bon savoir !
__________________
"S'il n'y a pas de solutions c'est qu'il n'y a pas de probl鋗e ..."
< mon devblog > ... < Lapinou Jumps ! - un jeu de plate-forme "vertical" avec un mignon petit lapin. >
thoduv est d嶰onnect   R廧onse avec citation
R廧onse

Liens sociaux

Publicit



Utilisateurs regardant la discussion actuelle : 1 (0 membre(s) et 1 invit(s))
 
Outils de la discussion
Modes d'affichage

R銶les de messages
Vous ne pouvez pas cr嶪r de nouvelles discussions
Vous ne pouvez pas envoyer des r廧onses
Vous ne pouvez pas envoyer des pi鋃es jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activ嶪s : oui
Les smileys sont activ廥 : oui
La balise [IMG] est activ嶪 : oui
Le code HTML peut 皻re employ : non
Navigation rapide

Discussions similaires
Discussion Auteur Forum R廧onses Dernier message
[Divers] PMP (Portable Game & Media Player) : La nouvelle console cheap! vgiant Articles 46 07/01/2010 13h46
NDS Cr嶪r un skin pour la Supercard GuZnaK Articles et Tutos 34 08/12/2007 22h24
NDS [TUTO] Convertir une vid廩 pour Moonshell ! Dakiz le blanc Archives - Divers (NDS) 6 26/07/2007 20h56
Tutorial Gestion de trajectoire de tir ou de bille, les virgules fixes mises en pratique Bobby Sixkilla Tutoriels 5 14/11/2006 04h40


Fuseau horaire GMT +2. Il est actuellement 17h36.


丼it par : vBulletin® version 3.7.2
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Tous droits r廥erv廥.
Version fran蓷ise #16 par l'association vBulletin francophone
Design par Ass-Itch, DJP et Dr.Vince