Configuração

Neste capítulo, veremos como criar um projeto usando a biblioteca. Entretanto supõe-se que você já esteja familiarizado com o PSPSDK (como compilar um projeto no cygwin) Eu sei que é irritante usá-lo quando já se é acostumado a simplicidade do Windows, mas uma vez trabalhado com ele, tudo será melhor ;-)

Primeiro de tudo, crie um diretório.Onde você irá colocar o conteúdo de seu projeto. Neste diretório, criaremos um makefile (é um arquivo texto que informa ao nosso projeto qual compilador utilizar, quais arquivos, quais bibliotecas, qual arquivo a gerar, etc).

O Makefile é um arquivo nomeado de Makefile (sem extensão). Veja o exemplo abaixo (use-o para começar):

TARGET = test
OBJS = test.o
YOURLIBS=

INCDIR =
CFLAGS = -G4 -Wall -O2
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)

LIBDIR =
LDFLAGS =
STDLIBS= -losl -lpng -lz \
		-lpspsdk -lpspctrl -lpspumd -lpsprtc -lpsppower -lpspgu -lpspaudiolib -lpspaudio -lm
LIBS=$(STDLIBS)$(YOURLIBS)

EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = OSL Sample

PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak

Vamos comentar as linhas que compõe o arquivo.
TARGET = test. é o nome do nosso arquivo
OBJS = test.o Indica qual arquivo será compilado, O arquivo a ser gerado têm a extensão .o (que é o resultado da compilação de arquivos .c ou .cpp), sendo assim coloque test.o e não test.c
YOURLIBS = Define suas bibliotecas a serem adicionadas no projeto PSP_EBOOT_TITLE é o nome que irá aparecer quando selecionar o arquivo no XMB
Para a outras linhas, não é necessário alterá-las, exceto quando você queira utilizar uma outra biblioteca (neste caso consulte a documentação da mesma).

Se você quiser adicionar a OSLib a um projeto existente, apenas adicione -losl em sua lista de bibliotecas, entretando certifique-se que de todas as bibliotecas necessárias a OSLib estejam incluídas, e colocadas na seguinte ordem (senão você terá mensagens de erro durante a compilação) :

-losl -lpng -lz -lpspsdk -lpspctrl -lpspumd -lpsprtc -lpsppower -lpspgu -lpspaudiolib -lpspaudio -lm

Para compilar o projeto, dentro do cygwin, acesse o diretório do projeto e digite "make". Para informações adicionais, veja a documentação oficial de makefiles

Pronto para começar?

Agora que a biblioteca está incluída corretamente a seu projeto, você pode usá-la sem nenhum problema. Vamos ver início da estrutura de um projeto criado com o OSLib.

#include <oslib/oslib.h>

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

int main(int argc, char* argv[])
{
	//Initialize the different parts of the library
	oslInit(0);
	oslInitGfx(OSL_PF_8888, 1);
	oslInitConsole();
	
	//Main loop
	while (!osl_quit)
	{
		//Display code
		oslStartDrawing();
		//Red screen
		oslClearScreen(RGB(255,0,0));
		//End of display code
		oslEndDrawing();
		//Synchronization
		oslSyncFrame();
	}

	//Game terminated (HOME -> quit)
	oslEndGfx();
	oslQuit();
	return 0;
}

Se quiser experimentar, você pode modificar as linhas PSP_MODULE_INFO e PSP_MAIN_THREAD_ATTR, mas os atributos THREAD_ATTR_USER e THREAD_ATTR_VFPU devem ser sempre estes. Se você for um novato, não mude-a, saiba apenas que é requerido pelo PSPSDK (não pela OSLib).
Note também que com a OSLib, você não precisa utilizar as chamadas callback, contando que seja passado o valor 0 na função oslInit. Se você quiser utilizar suas chamadas callback mude o parametro para 1 (caso você não saiba o que é isso, mantenha 0)

Uso Geral

Primeiro de tudo, é necessário inicializar a biblioteca. As partes da biblioteca (como som e gráficos) têm inicializações separadas, para evitar que recursos que não serão utilizados sejam inicializados.
. Mas para inicializar estas partes, é necessário inicializar a biblioteca principal. Sendo esta a função oslInit onde é passado o valor 0 por default

void oslInit(int useOwnCallbacks);

Então,é possível iniciar a parte gráfica, especificando o formato de pixel que você quer utilizar, podendo até utilizar o dobro de buffer.Veremos isto mais para a frente em pixelFormats, neste momento utilizaremos OSL_PF_8888 para 32-bit screen (16'777'216 colors) ou OSL_PF_5650 para 16-bit screen (65'536 colors) como argumento para o pixelFormat.

void oslInitGfx(int pixelFormat, int bDoubleBuffer);

Graças ao double buffer você poderá ter duas telas, uma em que você pode extrair e outra que é mostrada na tela. Você extrai uma da tela quando a outra é mostrada. Assim você tem a tela completamente extraída,não aparecendo assim os blinkings, Se você apagar redesenhar novamente na tela (muito usual em jogos). O buffer swapping é uma chamada para a função oslSwapBuffers, ou simplesmente oslSyncFrame. Pois o oslSyncFrame também está esperando o VSynce os frameskip.

Aviso: A chamada ao oslInitGfx restaura o sistema gráfico, e todas as imagens em VRAM também serão restauradasao mesmo tempo!

Agora você precisa iniciar o console (a fonte standard da Sony é carregada neste momento). Use simplesmente esta chamada:

void oslInitConsole();

Finalmente, inciamos o sistema de audio:

void oslInitAudio();

Mas veremos sobre audio mais a frente.

Para começar a desenhar,você precisa chamar a função oslStartDrawing(),e oslEndDrawing() quando você terminar, como no exemplo acima. Se você tentar desenhar sem chamar a oslStartDrawing,não irá funcionar. Siga as próximas páginas do guia e vamos indo.