void sceGuStart(int cid, void* list) { GuContext* context = &gu_contexts[cid]; unsigned int* local_list = (unsigned int*)(((unsigned int)list) | 0x40000000); // setup display list context->list.start = local_list; context->list.current = local_list; context->list.parent_context = gu_curr_context; gu_list = &context->list; // store current context gu_curr_context = cid; if (!cid) { ge_list_executed[0] = sceGeListEnQueue(local_list,local_list,gu_settings.ge_callback_id,0); gu_settings.signal_offset = 0; } if (!gu_init) { static int dither_matrix[16] = { -4, 0,-3, 1, 2,-2, 3,-1, -3, 1,-4, 0, 3,-1, 2,-2 }; sceGuSetDither((ScePspIMatrix4*)dither_matrix); sceGuPatchDivide(16,16); sceGuColorMaterial(GU_AMBIENT|GU_DIFFUSE|GU_SPECULAR); sceGuSpecular(1.0f); sceGuTexScale(1.0f,1.0f); gu_init = 1; } if (!gu_curr_context) { if (gu_draw_buffer.frame_width) { sendCommandi(156, ((unsigned int)gu_draw_buffer.frame_buffer) & 0xffffff); sendCommandi(157, ((((unsigned int)gu_draw_buffer.frame_buffer) & 0xff000000) >> 8) | gu_draw_buffer.frame_width); } }
void Red3dSetupLight(ScePspFVector3 pos, u32 dif, u32 spec) { sceGuEnable(GU_LIGHTING); sceGuEnable(GU_LIGHT0); sceGuEnable(GU_LIGHT1); sceGuEnable(GU_LIGHT2); sceGuEnable(GU_LIGHT3); int lightnumber = 0; sceGuLight(lightnumber,GU_POINTLIGHT,GU_DIFFUSE_AND_SPECULAR,&pos); sceGuLightColor(lightnumber,GU_DIFFUSE,dif); sceGuLightColor(lightnumber,GU_SPECULAR,spec); sceGuLightAtt(lightnumber,0.0f,1.0f,0.0f); sceGuSpecular(12.0f); sceGuAmbient(0x00222222); }
int main(int argc, char* argv[]) { setupCallbacks(); // setup GU void* fbp0 = getStaticVramBuffer(BUF_WIDTH,SCR_HEIGHT,GU_PSM_8888); void* fbp1 = getStaticVramBuffer(BUF_WIDTH,SCR_HEIGHT,GU_PSM_8888); void* zbp = getStaticVramBuffer(BUF_WIDTH,SCR_HEIGHT,GU_PSM_4444); sceGuInit(); sceGuStart(GU_DIRECT,list); sceGuDrawBuffer(GU_PSM_8888,fbp0,BUF_WIDTH); sceGuDispBuffer(SCR_WIDTH,SCR_HEIGHT,fbp1,BUF_WIDTH); sceGuDepthBuffer(zbp,BUF_WIDTH); sceGuOffset(2048 - (SCR_WIDTH/2),2048 - (SCR_HEIGHT/2)); sceGuViewport(2048,2048,SCR_WIDTH,SCR_HEIGHT); sceGuDepthRange(0xc350,0x2710); sceGuScissor(0,0,SCR_WIDTH,SCR_HEIGHT); sceGuEnable(GU_SCISSOR_TEST); sceGuDepthFunc(GU_GEQUAL); sceGuEnable(GU_DEPTH_TEST); sceGuFrontFace(GU_CW); sceGuShadeModel(GU_SMOOTH); // sceGuEnable(GU_CULL_FACE); sceGuEnable(GU_CLIP_PLANES); sceGuFinish(); sceGuSync(0,0); sceDisplayWaitVblankStart(); sceGuDisplay(GU_TRUE); setupSH(); indicesSH(); // run sample int val = 0; while(running()) { sceGuStart(GU_DIRECT,list); // clear screen sceGuClearColor(0x000000); sceGuClearDepth(0); sceGuClear(GU_COLOR_BUFFER_BIT|GU_DEPTH_BUFFER_BIT); // light settings sceGuEnable(GU_LIGHTING); sceGuEnable(GU_LIGHT0); sceGuEnable(GU_LIGHT1); sceGuEnable(GU_LIGHT2); sceGuLightMode(1); { unsigned int i; for (i = 0; i < 3; ++i) { sceGuLight(i,GU_DIRECTIONAL,GU_DIFFUSE_AND_SPECULAR,&lsettings[i].position); sceGuLightColor(i,GU_DIFFUSE,lsettings[i].diffuse); sceGuLightColor(i,GU_SPECULAR,lsettings[i].specular); sceGuLightAtt(i,0.0f,1.0f,0.0f); } sceGuSpecular(12.0f); sceGuAmbient(0x000000); } // setup matrices sceGumMatrixMode(GU_PROJECTION); sceGumLoadIdentity(); sceGumPerspective(75.0f,16.0f/9.0f,0.5f,1000.0f); sceGumMatrixMode(GU_VIEW); { ScePspFVector3 pos = { 0, 0, -5.0f }; sceGumLoadIdentity(); sceGumTranslate(&pos); } sceGumMatrixMode(GU_MODEL); sceGumLoadIdentity(); { ScePspFVector3 rot = { val * 0.79f * (GU_PI/180.0f), val * 0.98f * (GU_PI/180.0f), val * 1.32f * (GU_PI/180.0f) }; sceGumRotateXYZ(&rot); } // setup texture sceGuAmbientColor(0xffffffff); // draw renderSH(parametersSH); sceGuFinish(); sceGuSync(0,0); sceDisplayWaitVblankStart(); sceGuSwapBuffers(); val++; if ((val%600) == 0) { unsigned int i; for (i = 0; i < 8; ++i) parametersSH[i] = (int)((rand() / ((float)RAND_MAX)) * 6.0f); } } sceGuTerm(); sceKernelExitGame(); return 0; }