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
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)
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.