Aqui está a lista (ainda não finalizada) de funções incluídas na OSL
void oslInit(int useOwnCallbacks);
Inicializa a biblioteca. Esta função deve ser chamada no começo de cada programa. Se for passado TRUE como parâmetro para useOwnCallbacks, você pode controlar os callbacks (chamadas) padrões. (update_thread, Exit Callback e Power Callback, devem ser chamados, que devem chamar a osl_powerCallback se esta não for nula(NULL!))
void oslQuit();
Fecha o aplicativo, voltando para o XMB
void oslInitGfx(int pixelFormat, int bDoubleBuffer);
Inicializa a parte gráfica.Você deve especificar o pixelFormat, qual é o tamanho de pixel que você quer desenhar na tela ou se você deseja utilizar double buffering
void oslShowNeoflashLogo();
Mostra o logo da competição Neoflash. Deve ser chamada após iniciar a biblioteca e a parte gráfica, passe a definição que você quiser (mas de preferência o double buffering).
void oslStartDrawing();
Você precisa chamar esta função antes de desenhar qualquer coisa. O número de operações que a GPU pode fazer é limitado, sendo assim a reinicialização permite desenhar outra vez do começo.
void oslSyncDrawing();
Espera até que todas as operações de desenho estejam terminadas.Esta operação pode ser muito lenta, pois a GPU trabalha paralelamente com nosso programa. Esta função aguarda a GPU terminar tudo, antes de continuar.É útil se você quiser mostrar uma imagem que será modificada mais tarde. (a GPU não desenha imediatamente quando você solicita, e sim quando há um tempo, passando novamente pelo while a mesma será desenhada na tela)
void oslEndDrawing();
Finaliza a função de desenho.Certifique-se de ter deletados todas as imagens alocadas, para sincronizar a tela e os double buffering.
void oslWaitVSync();
Aguarda o VSync (60 Hz).
void oslSwapBuffers();
Em double buffering, troca o visivel e desenha o que está em buffer.
void oslEndGfx();
Finaliza a parte gráfica da biblioteca. Então você pode reiniciá-lo com outros parâmetros.
void oslFlushDataCache();
Nivela o data cache. Não use.
int oslSyncFrame();
Sincroniza a tela. é utilizada quando se é preciso redesenhar todos os desenhos na tela. Esta função fará a troca de buffers e aguardará o VSync
int oslSyncFrameEx();
Indica os parâmetros suplementares para a sincronização.
Frameskip: 0: sem frameskip (normal) 1: normal frameskip >1: depende do vsync, salta 1 frame de X Max frameskip: >=1: Máximo frameskip autorizado VSync: 0: sem VSync 1: VSync habilitado +4: se você adicionar 4, fixa o minimo de frameskip (ex. com 2,o jogo roda a 60 fps, mas em 30 imagens por segundo) +0: senão, com frameskip > 1, sincroniza o framerate, ex. 2 -> 30 fps Exemplos: //30 fps (sem frameskip) oslSyncFrameEx(2,0,0); //30 fps, jogo 60, o máximo de frameskip é 2, que significa não mais que 1 frameskip oslSyncFrameEx(2,2,4); //sincroniza a 60 fps oslSyncFrameEx(0,0,0);
void void oslSetTransparentColor(OSL_COLOR color);
Define a cor transparente. Se um pixel da imagem que você quer desenhar for desta cor, ele não será desenhado. Util para qualquer coisa (textos, rectangulos, etc.),isto porque o mesmo não é desenhado. Durante o carregamento da imagem, os pixels que tiverem esta cor, terão seu canal alpha como 0, indicando que são transparentes. Você só pode ativar a cor transparente no carregamento da imagem, e desativá-lo quando terminar.
void oslDisableTransparentColor();
Desativa a cor transparente (todos os pixels serão desenhados, exceto aqueles cujo o alfa é nulo(0)).
float oslSin(int angle, int dist);
Computa o seno do Ângulo especificado, multiplicando-o pelo raio.
float oslCos(int angle, int dist);
O mesmo para o cosseno
int oslGetNextPower2(int val);
Retorna o power de 2 para o número passado.
OSL_IMAGE *oslCreateImage(int larg, int haut, short location, short pixelFormat);
Cria uma nova imagem com os parâmetros fornecidos. Em location pode ser OSL_IN_RAM (na RAM, 20MB, lentos) ou OSL_IN_VRAM (em VRAM, em 2MB, rápidos). O VRAM é muito limitado, sendo assim use-o somente para as imagens frequentemente usadas.
void oslDeleteImage(OSL_IMAGE *img);
Deleta a imagem especificada. Como não há nenhum gerenciador, é necessário apagar conforme o empilhamento na memoria.Exemplo: imagem1 carregada, imagem2 carrega, só posso apagar a imagem1, após apagar a imagem2
OSL_IMAGE *oslLoadImageFile(char *filename, int location, int pixelFormat);
Carrega um arquivo de imagem(Até o presente momento, apenas o formato PNG é suportado). Você pode escolher onde colocar e também o pixelformat.
OSL_IMAGE *oslCreateImageTile(OSL_IMAGE *img, int offsetX0, int offsetY0, int offsetX1, int offsetY1);
Cria uma imagem com referência em uma parte de outra.Você precisa indicar a área de offsetX0,offsetY0 e offsetX1,offsetY1 na imagem.Os índices da imagem não são copiados, somente referênciados, sendo assim você precisa executar o oslDeleteImage de qualquer forma antes de deletar a imagem
OSL_IMAGE *oslCreateImageTileSize(OSL_IMAGE *img, int offsetX0, int offsetY0, int width, int height);
O mesmo, exceto que você precisa apenas especificar as posições esquerda acima, largura e altura da área.
void oslCopyImage(OSL_IMAGE *imgDst, OSL_IMAGE *imgSrc);
Copia uma imagem para outra. Ambas precisam ter o mesmo formato.
void oslSwizzleImage(OSL_IMAGE *imgDst, OSL_IMAGE *imgSrc);
Cria uma cópia otimizada da imgSrc para imgDst.imgSrc deve ser diferente da imgDst, a versão otimizada é mais rápida para a GPU, porém você não pode modificá-la.
void oslClearImage(OSL_IMAGE *img, int color);
Apaga a cor especificada da imagem que a utiliza. Nota: Se a imagem estiver na RAM, a operação será feita pelo CPU, é mais lento e o cálculo de cor não é o mesmo da GPU. Além disso no modo de 4 ou 8 bits, a cor especifica o indice da paleta a ser indexado no buffer, e não a cor real a ser procurada na paleta
void oslUncacheImage(OSL_IMAGE *img);
Sincroniza a imagem especificada no cache da CPU. Você precisa chamar esta função antes de indicar uma imagem que teve seu dados modificados.
OSL_IMAGE *oslCreateImageCopy(OSL_IMAGE *src, int newLocation);
Cria uma cópia da imagem especificada.
OSL_IMAGE *oslCreateSwizzledImage(OSL_IMAGE *src, int newLocation);
O mesmo, porém a cópia é otimizada
OSL_PALETTE *oslCreatePalette(int size, short pixelFormat);
Cria uma nova paleta com o size(tamanho) de cores do tipo do pixelFormat.
OSL_PALETTE *oslLoadPalette(void *data, int size, short pixelFormat);
Cria uma nova paleta de um array definido em seu codigo.
void oslDrawImage(OSL_IMAGE *img);
Desenha a imagem especificada, usando os parâmetros contidos na mesma.
void oslDrawImageSimple(OSL_IMAGE *img);
Desenha a imagem especificada. É uma versão mais rápida, porém não suporta rotação.
void oslDrawLine(int x0, int y0, int x1, int y1, OSL_COLOR color);
Desenha uma linha com a cor especifica dos pontos(x0,y0) e (x1,y1).
void oslDrawRect(int x0, int y0, int x1, int y1, OSL_COLOR color);
Desenha um frame (retangulo vazio)
void oslDrawFillRect(int x0, int y0, int x1, int y1, OSL_COLOR color);
Desenha um retangulo preenchido
void oslDrawGradientRect(int x0, int y0, int x1, int y1, OSL_COLOR c1, OSL_COLOR c2, OSL_COLOR c3, OSL_COLOR c4);
Desenha um gradiente de 4 pontos (c1: esquerda acima, c2: direita acima, c3: esquerda abaixo, c4: direita abaixo).
OSL_MAP *oslCreateMap(OSL_IMAGE *img, void *map_data, int tileX, int tileY, int mapSizeX, int mapSizeY, int map_format);
Cria um novo mapa. map_format deve ser OSL_MF_U16 (cada elemento do mapa é um unsigned short). img é o tileset(a largura tem que ser maior que 2), tileX e tileY é o tamanho de cada tile, mapSizeX e mapSizeY é o tamanho total do mapa.
void oslDrawMap(OSL_MAP *m);
Desenha o mapa especificado
void oslDrawMapSimple(OSL_MAP *m);
Versão rápida, tileX, tileY e o tileset devem ter os tamanhos maiores que 2.
void oslClearScreen(int backColor);
Limpa a tela com a cor especificada.
void oslSetScreenClipping(int x0, int y0, int x1, int y1);
Ajusta a região da tela a ser desenhada. O que estiver fora deste retângulo não será desenhado. Útil para janelas.
void oslSetDrawBuffer(OSL_IMAGE *img);
Define a imagem atual em buffer, passe OSL_DEFAULT_BUFFER para reiniciar a tela default, ou OSL_SECONDARY_BUFFER para desenhar o que estiver em double buffering.
void oslSetAlpha(int effect, int coeff);
Define os parâmetros do alfa (transparência). O tipo do alfa pode ser um dos seguintes:
OSL_FX_NONE: sem efeito
Formula: dst = src (O alpha é copiado para o destino, não computado)
OSL_FX_FLAT: Identico ao OSL_FX_NONE, exceto que o alpha e nulo (null), o pixel não será desenhado
Formula: dst = (src & 0xff000000) ? src : dst;
OSL_FX_RGBA: Examina o canal alpha da paleta durante a computaçao.Use-a caso utilize transparência
por exemplo um retangulo com alpha: oslDrawFillRect(0,0,100,100,RGBA(0,0,255,128)); Para o canal alpha 0 (zero) significa
transparente e 255 opaco. Estes valores podem ser utilizados também para cada pixel de uma imagem,
ou cada cor de uma paleta, permitindo renderizar mais facilmente suas imagens transparentes. É o modo DEFAULT.
Formula: dst = src * asrc + dst * (1 - asrc)
OSL_FX_ALPHA: Alpha blend (transparencia normal). O coeficiente é multiplicado pela cor da fonteque define se o plano
é mais ou menos transparente
Formula: dst = src * coeff + dst * (1 - coeff)
OSL_FX_ADD: Adiciona a fonte e destino, Útil para "ghosts". Você pode especificar o coeficiente, que é multiplicado
pelo valor da fonte. Se você quiser uma adição simples, passa o coeficiente 0xff.
Formula: dst = src * coeff + dst
OSL_FX_SUB: Extrai o imagem fonte e destino. Útil para "máscaras".
Formula: dst = src * coeff - dst
OSL_FX_COLOR: Adiciona outros efeitos, de forma que você possa definir a transparência para cada componente de RGBA
Por exemplo se você quiser matizar uma imagem vermelha utilize:
oslSetAlpha(OSL_FX_ALPHA|OSL_FX_COLOR, RGBA(0xff,0,0,0xff));
void oslSystemMessage(const char *message);
Mostra a mensagem de sistema da Sony. É estranha e também não trabalha bem.
unsigned int oslMessageBox(const char *text, const char *title, unsigned int flags);
Mostra uma caixa de diálogo pequena. Click Aqui para mais informações.
int oslBenchmarkTestEx(int startend, int slot);
Faz uma operação de marca de nível. Para valores de startend , por favor veja Aqui.
OSL_CONTROLLER *oslReadKeys();
Lê o estado atual do joypad e o armazena nas osl_keys (variaveis globais), e retorna também um ponteiro com estes dados.
int oslWaitKey();
Aguarda até que um botão seja pressionado, para assim retomar ao codigo.
int oslKbhit();
Retorna o ultimo botão pressionado, se este código não for nulo (NULL), você pode chamar a função oslWaitKey para iniciá-lo (nenhum dos botões pressionados serão armazenados até que você chame a oslWaitKey).
void oslFlushKey();
Esvazia o buffer dos botões pressionados. De modo que as seguintes sejam armazenadas.
int oslInitAudio();
Inicializa a parte de audio da biblioteca. Essa função é necessária para quando você quiser carregar ou tocar um som.
void oslDeinitAudio();
Finaliza parte de audio da biblioteca. Após chamar esta função não é possivel, tocar som algum. Chame-a para terminar os recursos de audio e certificar-se de que todo o som está parado.
void oslPlaySound(OSL_SOUND *s, int voice);
Toca o som em um canal especificado, podendo este ser de 0 a 7, se o som for jogado no mesmo canal o mesmo substitui o anterior
int oslGetSoundChannel(OSL_SOUND *s);
Retorna qual canal o audio está sendo tocado. O resultado -1 é retornado caso o mesmo não esteja sendo tocado.
void oslStopSound(OSL_SOUND *s);
Para o som que está sendo tocado. Para começar novamente, chame a função oslPlaySound, o som será tocado desde o início.
void oslPauseSound(OSL_SOUND *s, int pause);
Pausa o som atual. Se o status do som for 1, o som está pausado, se for 0 o som está tocando, se for -1 o som está invertido (play/pause)
void oslAudioVSync();
Chame a em seu laço (while) principal, caso você chame vários sons. Por quê? Quando você coloca o PSP em Standy-by o kernel fecha todos os arquivos abertos. Então, obviamente o sistema audio deixa de funcionar. Mas OSLib controla isto, porém é necessário reabrir os arquivos para continuar, e não é possível logo quando o PSP inicia porque o MS não está inicializado ainda. Esta Função irá verificar se o MS está pronto, irá reabir o arquivo e continuará de onde parou. Se você não chamar esta função, todo o som carregado atualmente estará parado quando o PSP inciar. Entretanto será carregado automaticamente (porém desde o início) quando for chamado a função oslPlaySound. O mesmo para os sons que foram abertos mas não estão sendo tocados.
OSL_SOUND *oslLoadSoundFile(const char *filename, int stream);
Carrega um arquivo wav ou bgm.É necessário identificar nome do arquivo e seu caminho no Memory Stick. Se você estiver tocando um som, este não será carregado em memória, assim poupando o sobrecarregamento da memória. Porque o PSP atem apenas 20 MB, imagine carregar vários sons com tamanho de 1 MB cada, a memória estaria cheia, (A memória é compartilhada para imagens, seu código, musica, etc). Entretando, tocar afeta a performance, especialmente se a taxa de amostragem for elevada. Para um melhor desempenho é recomendado utilizar arquivo Wav para efeitos, e bgm para músicas de fundo.
int oslDeleteSound();
Delete um som.
void oslSetSoundLoop(OSL_SOUND *s, int loop);
Seta se o som deve ser tocado em loop (seguidamente) após seu término.