You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
2.9 KiB
128 lines
2.9 KiB
#include <pspkernel.h>
|
|
#include <pspgu.h>
|
|
|
|
PSP_MODULE_INFO("gutest", 0, 1, 0);
|
|
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_VFPU | THREAD_ATTR_USER);
|
|
|
|
#define BUFFER_WIDTH 512
|
|
#define BUFFER_HEIGHT 272
|
|
#define SCREEN_WIDTH 480
|
|
#define SCREEN_HEIGHT BUFFER_HEIGHT
|
|
|
|
char list[0x20000] __attribute__((aligned(64)));
|
|
|
|
void initGu(){
|
|
sceGuInit();
|
|
|
|
//Set up buffers
|
|
sceGuStart(GU_DIRECT, list);
|
|
sceGuDrawBuffer(GU_PSM_8888,(void*)0,BUFFER_WIDTH);
|
|
sceGuDispBuffer(SCREEN_WIDTH,SCREEN_HEIGHT,(void*)0x88000,BUFFER_WIDTH);
|
|
sceGuDepthBuffer((void*)0x110000,BUFFER_WIDTH);
|
|
|
|
//Set up viewport
|
|
sceGuOffset(2048 - (SCREEN_WIDTH / 2), 2048 - (SCREEN_HEIGHT / 2));
|
|
sceGuViewport(2048, 2048, SCREEN_WIDTH, SCREEN_HEIGHT);
|
|
sceGuEnable(GU_SCISSOR_TEST);
|
|
sceGuScissor(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
|
|
|
|
//Set some stuff
|
|
sceGuDepthRange(65535, 0); //Use the full buffer for depth testing - buffer is reversed order
|
|
|
|
sceGuDepthFunc(GU_GEQUAL); //Depth buffer is reversed, so GEQUAL instead of LEQUAL
|
|
sceGuEnable(GU_DEPTH_TEST); //Enable depth testing
|
|
|
|
sceGuFinish();
|
|
sceGuDisplay(GU_TRUE);
|
|
}
|
|
|
|
void endGu(){
|
|
sceGuDisplay(GU_FALSE);
|
|
sceGuTerm();
|
|
}
|
|
|
|
void startFrame(){
|
|
sceGuStart(GU_DIRECT, list);
|
|
sceGuClearColor(0xFFFFFFFF); // White background
|
|
sceGuClear(GU_COLOR_BUFFER_BIT);
|
|
}
|
|
|
|
void endFrame(){
|
|
sceGuFinish();
|
|
sceGuSync(0, 0);
|
|
sceDisplayWaitVblankStart();
|
|
sceGuSwapBuffers();
|
|
}
|
|
|
|
typedef struct {
|
|
unsigned short u, v;
|
|
short x, y, z;
|
|
} Vertex;
|
|
|
|
void drawTri(Vertex* verts, int vertCt, uint32_t color) {
|
|
|
|
sceGuColor(color); // colors are ABGR
|
|
sceGuDrawArray(GU_TRIANGLE_STRIP, GU_TEXTURE_16BIT | GU_VERTEX_16BIT | GU_TRANSFORM_2D, vertCt, 0, verts);
|
|
}
|
|
|
|
|
|
int main() {
|
|
initGu();
|
|
int running = 1;
|
|
while(running){
|
|
startFrame();
|
|
|
|
Vertex* oneVerts = (struct Vertex*)sceGuGetMemory(6*sizeof(Vertex));
|
|
oneVerts[0].x = 128;
|
|
oneVerts[0].y = 128;
|
|
|
|
oneVerts[1].x = 112;
|
|
oneVerts[1].y = 128;
|
|
|
|
oneVerts[2].x = 128;
|
|
oneVerts[2].y = 48;
|
|
|
|
oneVerts[3].x = 112;
|
|
oneVerts[3].y = 64;
|
|
|
|
oneVerts[4].x = 112;
|
|
oneVerts[4].y = 48;
|
|
|
|
oneVerts[5].x = 96;
|
|
oneVerts[5].y = 64;
|
|
|
|
uint32_t colorone = 0xFFFF00BB;
|
|
|
|
drawTri(oneVerts, 6, colorone);
|
|
|
|
Vertex* twoVerts = (struct Vertex*)sceGuGetMemory(7*sizeof(Vertex));
|
|
twoVerts[0].x = 160;
|
|
twoVerts[0].y = 128;
|
|
|
|
twoVerts[1].x = 144;
|
|
twoVerts[1].y = 128;
|
|
|
|
twoVerts[2].x = 192;
|
|
twoVerts[2].y = 48;
|
|
|
|
twoVerts[3].x = 176;
|
|
twoVerts[3].y = 64;
|
|
|
|
twoVerts[4].x = 176;
|
|
twoVerts[4].y = 48;
|
|
|
|
twoVerts[5].x = 160;
|
|
twoVerts[5].y = 64;
|
|
|
|
twoVerts[6].x = 160;
|
|
twoVerts[6].y = 48;
|
|
|
|
uint32_t colortwo = 0xFF00EEEE;
|
|
drawTri(twoVerts, 7, colortwo);
|
|
|
|
endFrame();
|
|
}
|
|
|
|
return 0;
|
|
}
|