:: PlayerAdvance.org ::  

Précédent   :: PlayerAdvance.org :: > :: Forums Hébergés :: > OldSchool Library > Aide au développement

Aide au développement Aide sur l'utilisation d'OSLib

Publicité

Réponse
 
Outils de la discussion Modes d'affichage
Vieux 23/12/2006, 20h00   #1
Casa150
Membre
 
Date d'inscription: 16/09/2006
Localisation: Les Lilas
Messages: 8
Par défaut oslLoadPalette

Salut.

J'ai un probleme avec la fonction oslLoadPalette !!

Quand je l'utilise aucune image apparait à l'écran.
J'explique mon but : je veux pouvoir charger une image puis selectionner une palette (ici c'est changer la couleur de la tenue de vegeta).


En gros je sais pas utiliser cette fonction. Aidez moi pleaseee...

Voila mon code :
Code:
#include <oslib/oslib.h>

PSP_MODULE_INFO("Palette",0,1,1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);

OSL_IMAGE *loadSprite(char *filename, short pixelFormat, short emplacement);

unsigned long palette[16] = {
	RGB(18, 22, 122), RGB(12, 35, 171), RGB(173, 123, 4), RGB(154, 132, 106),
	RGB(20, 53, 196), RGB(39, 83, 215), RGB(83, 131, 239), RGB(201, 201, 201),
	RGB(222, 181, 8), RGB(222, 156, 82), RGB(231, 173, 115), RGB(255, 0, 255),
	RGB(255, 218, 98), RGB(245, 215, 150), RGB(239, 239, 239), RGB(255, 255, 255)
};

int main(int argc, char* argv[]) {
	oslInit(0);
	oslInitGfx(OSL_PF_8888, 1);
	oslInitConsole();
	oslInitAudio();
	
	
	OSL_IMAGE *img = loadSprite( "vegeta.png", OSL_PF_8BIT, OSL_IN_VRAM);
	if ( !img)
		oslFatalError("vegeta.png incorrect !!");
	
	img->palette = oslLoadPalette( (unsigned long *)palette, 16, OSL_PF_8888);
	
	img->x = 100;
	img->y = 100;
	
	int i;
	OSL_CONTROLLER *pad;
	
	while ( !osl_quit ) {
		oslStartDrawing();
		oslClearScreen(RGB(250,250,250));
		
		oslDrawImage( img);
		
		pad = oslReadKeys();
		if(pad->pressed.cross) { // pour voir si il y a un changement a l'ecran
			for( i = 0; i < 16; i++) {
				palette[i] += 5;
			}
			oslPrintf_xy(0,0,"++");
			img->palette = oslLoadPalette( (unsigned long *)palette, 16, OSL_PF_5650);
		}
		
		oslEndDrawing();
		oslSyncFrame();
		oslAudioVSync();
	} //fin while
	
	oslDeleteImage(img);
	
	oslEndGfx();
	oslQuit();
	return 0;
}

OSL_IMAGE *loadSprite(char *filename, short pixelFormat, short emplacement) {
	OSL_IMAGE *temp, *img = NULL;
	//Load & swizzle for best speed
	
	temp = oslLoadImageFile(filename, OSL_IN_RAM, pixelFormat);
	if (temp) {
		img = oslCreateSwizzledImage(temp, emplacement);
		oslDeleteImage(temp);
	}

	return temp;
}
Casa150 est déconnecté   Réponse avec citation

Publicité

Vieux 23/12/2006, 22h19   #2
Brunni
Super Modérateur
 
Date d'inscription: 10/11/2005
Localisation: Un pays avec beaucoup de banques
Messages: 3 226
Par défaut

Hmm c'est une mauvaise idée. La palette doit être chargée / créée en même temps que l'image et jamais pendant l'exécution. En fait j'ai très mal joué sur ce point y'a même pas d'oslDeletePalette
En fait oslLoadPalette (et oslCreatePalette) alloue de la mémoire, donc il ne faut le faire qu'une seule fois par image sinon tu auras des pertes de mémoire. La mémoire sera automatiquement libérée avec oslDeleteImage. Donc le fonctionnement normal c'est:
1) tu charges une image
2) si tu as besoin d'une palette, tu en crées ou charges une.
3) tu peux par contre modifier la palette plus tard au besoin (en accédant à image->palette->data) mais surtout pas en créer une nouvelle. Ca implique donc que la taille de ta palette est fixe (en général 16 ou 256) mais ne pose en général pas d'autre problème.

Cela dit, ça ne fonctionne pas dans ton cas simplement parce qu'oslib ne supporte pas le chargement d'une image avec palette! Donc oslLoadImage avec OSL_PF_8BIT est impossible (l'image résultante est ok mais vide, d'où le fait que rien ne se passe). Mais comme je viens de le faire pour DS (création et chargement automatique d'une palette en mode 2BIT/4BIT/8BIT si le PNG en contient une*) je vais l'adapter, je comprends que ça soit quand même utile sur PSP
En fait normalement on utilise du 5551 ou 4444 (ou 8888 si tu as la place) pour les images, c'est beaucoup plus simple. Par contre l'avantage du mode paletté c'est justement les effets de rotation de couleur et autres
* Il n'y aura donc rien à faire de ton côté, alors au pire tu peux utiliser 5551 pour le moment, en prenant soin d'avoir des PNG palettés, et ensuite il suffira de remplacer OSL_PF_5551 par OSL_PF_8BIT
Brunni est déconnecté   Réponse avec citation
Réponse

Liens sociaux

Publicité



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

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 14h58.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Tous droits réservés.
Version française #16 par l'association vBulletin francophone
Design par Ass-Itch, DJP et Dr.Vince