La console texte

OSLib inclut sa propre console de texte, indépendante de celle de Sony. Cependant, elle est à première vue complètement identique, la seule différence est qu'elle tient compte du double buffering, ce qui signifie que si vous dessinez du texte, vous ne verrez pas les modifications avant d'avoir retourné les buffers, ce qui est fait avec un appel de oslSyncFrame ou oslSwapBuffers. En mode simple buffer, rien ne change et les modifications sont directement visibles sur l'écran. C'est donc ce mode que vous devriez choisir si vous réalisez un jeu en mode console. Toutefois, si vous utilisez le double buffering, voici un exemple:

oslInitGfx(OSL_PF_8888, 1);
oslPrintf("Hello world!");
oslSwapBuffers();
oslWaitKey();
oslPrintf("Second test");
oslSwapBuffers();
oslWaitKey();
oslQuit();

Un autre moyen pour dessiner sur l'écran est de redéfinir le drawbuffer sur l'écran en cours d'affichage (buffer secondaire).

oslInitGfx(OSL_PF_8888, 1);
oslSetDrawBuffer(OSL_SECONDARY_BUFFER);
oslPrintf("Hello world!");
oslWaitKey();
oslPrintf("Second test");
oslWaitKey();
oslQuit();

Les fonctions disponibles sont les suivantes:

oslPrintf(format...);			//Printf
oslCls();					//Efface l'écran
oslMoveTo(x,y)				//Déplace le curseur
oslPrintf_xy(x,y, format...)		//Printf à un endroit spécifique

Il y a également la fonction suivante pour afficher le résultat du benchmark (à ne pas trop se fier tout de même à cause des considérations faites dans le chapitre sur le cache CPU):

void oslSysBenchmarkDisplay();

Il y a également des fonctions permettant d'afficher des boîtes de message pour l'utilisateur. Le look ressemble à celui de Windows 98 et cela fonctionne également en mode double buffer.

void oslDebug(format...);

Affiche un message de débogage avec la ligne et le nom du fichier source dans le titre de la fenêtre.

void oslWarning(format...);

Affiche un message d'avertissement à l'utilisateur.

void oslFatalError(format...);

Affiche un message d'erreur fatale à l'utilisateur et quitte immédiatement l'application.

void oslAssert(condition);

Vérifie que la condition passée en paramètre est vraie. Dans le cas inverse, elle avertit l'utilisateur. Voici un exemple:

image = oslLoadImageFile("test.png", OSL_IN_RAM, OSL_PF_8888);
oslAssert(image);

On s'assure dès lors que image n'est pas NULL (qu'elle a bien été chargée) et on ne continue l'exécution du programme que si c'est le cas.

oslSetTextColor(OSL_COLOR color);

Règle la couleur du texte. Si le mode alpha courant est OSL_FX_RGBA, les couleurs peuvent être définies en RGBA, c'est-à-dire que les 8 derniers bits définissent la transparence. Par exemple, vous pouvez définir un texte rouge à moitié transparent ainsi:

oslSetTextColor(RGBA(255,0,0,128));

oslSetBkColor(OSL_COLOR color);

Définit la couleur d'arrière-plan du texte. Vous pouvez le rendre transparent ainsi:

oslSetBkColor(RGBA(0,0,0,0));

unsigned int oslMessageBox(const char *text, const char *title, unsigned int flags);

Affiche un message dont vous spécifiez le texte, le titre et les flags supplémentaires (boutons), et retourne la valeur du choix de l'utilisateur. Pour définir les boutons, il y a la fonction oslMake3Buttons.

oslMake3Buttons(b1,a1,b2,a2,b3,a3);

Crée la valeur flags de la fonction oslMessageBox pour les boutons spécifiés. Exemple:

oslMessageBox("Test", "Titre", oslMake3Buttons(OSL_KEY_CROSS,OSL_MB_OK,OSL_KEY_TRIANGLE,OSL_MB_QUIT,0,0));

Cela affichera un message où le premier bouton aura la texte Ok, associé au bouton croix, et l'autre le texte Quit, associé au bouton triangle. Les valeurs possibles sont les suivantes: OSL_MB_OK, OSL_MB_CANCEL, OSL_MB_YES, OSL_MB_NO, OSL_MB_QUIT, et les touches: OSL_KEY_SELECT, OSL_KEY_START, OSL_KEY_UP, OSL_KEY_RIGHT, OSL_KEY_DOWN, OSL_KEY_LEFT, OSL_KEY_L, OSL_KEY_R, OSL_KEY_TRIANGLE, OSL_KEY_CIRCLE, OSL_KEY_CROSS, OSL_KEY_SQUARE, OSL_KEY_HOME, OSL_KEY_HOLD, OSL_KEY_NOTE. La valeur OSL_MB_QUIT est spéciale, puisque si l'utilisateur la choisit, le jeu est quitté immédiatement. Pour toutes les autres, le choix de l'utilisateur est retourné et le jeu continue.

Enfin, vu que la console supporte le double buffering, vous pouvez l'utiliser dans n'importe quel jeu graphique, de préférence avec oslPrintf_xy comme ça vous êtes sûr de l'endroit où vous dessinez le texte. Voici un exemple:

	int x = 0;
	oslInit(0);
	oslInitGfx(OSL_PF_8888, 1);
	oslInitConsole();
	
	//Boucle principale
	while (!osl_quit)
	{
		oslStartDrawing();
		oslClearScreen(0);
		oslPrintf_xy(0, 0, "x = %i", x);
		oslEndDrawing();
		oslSyncFrame();
		x++;
	}
	oslQuit();