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 draw() { startFrame(); sceGuTexMode(GU_PSM_T8, 0, 0, GU_FALSE); sceGuTexFilter(GU_NEAREST, GU_NEAREST); sceGuTexFunc(GU_TFX_DECAL, GU_TCC_RGB); sceGuClutMode(GU_PSM_8888, 0, 0xFF, 0); sceGuTexImage(0, 2, 2, 16, imageDataPatch); sceGuClutLoad(1, clutRGBY); sceGuPatchPrim(GU_TRIANGLE_STRIP); sceGuPatchDivide(16, 16); sceGuPatchFrontFace(GU_CW); sceGuDisable(GU_TEXTURE_2D); sceGuDrawBezier(GU_COLOR_8888 | GU_VERTEX_16BIT | GU_TRANSFORM_2D, 4, 4, NULL, vertices1_simple); // Let's see how UVs are interpolated. Simple bilinear will fail here. sceGuEnable(GU_TEXTURE_2D); sceGuDrawBezier(GU_TEXTURE_16BIT | GU_VERTEX_16BIT | GU_TRANSFORM_2D, 4, 4, NULL, vertices2_uvs); sceGuDisable(GU_TEXTURE_2D); sceGuDrawBezier(GU_COLOR_8888 | GU_VERTEX_16BIT | GU_TRANSFORM_2D, 4, 4, NULL, vertices3_colors); sceGuDrawBezier(GU_COLOR_8888 | GU_VERTEX_16BIT | GU_TRANSFORM_2D, 4, 4, NULL, vertices4_pos); // Other primitive types. sceGuSendCommandi(55, 1); sceGuPatchDivide(4, 4); sceGuDrawBezier(GU_COLOR_8888 | GU_VERTEX_16BIT | GU_TRANSFORM_2D, 4, 4, NULL, vertices5_lines); sceGuSendCommandi(55, 2); sceGuPatchDivide(4, 4); sceGuDrawBezier(GU_COLOR_8888 | GU_VERTEX_16BIT | GU_TRANSFORM_2D, 4, 4, NULL, vertices6_points); sceGuSendCommandi(55, 3); sceGuPatchDivide(4, 4); sceGuDrawBezier(GU_COLOR_8888 | GU_VERTEX_16BIT | GU_TRANSFORM_2D, 4, 4, NULL, vertices7_prim3); sceGuSendCommandi(55, 4); sceGuPatchDivide(4, 4); sceGuDrawBezier(GU_COLOR_8888 | GU_VERTEX_16BIT | GU_TRANSFORM_2D, 4, 4, NULL, vertices8_prim4); sceGuPatchPrim(GU_TRIANGLE_STRIP); sceGuShadeModel(GU_FLAT); sceGuPatchDivide(1, 1); sceGuDrawBezier(GU_COLOR_8888 | GU_VERTEX_16BIT | GU_TRANSFORM_2D, 4, 4, NULL, vertices9_div1); sceGuPatchDivide(1, 2); sceGuDrawBezier(GU_COLOR_8888 | GU_VERTEX_16BIT | GU_TRANSFORM_2D, 4, 4, NULL, vertices10_div1_2); sceGuPatchDivide(2, 2); sceGuDrawBezier(GU_COLOR_8888 | GU_VERTEX_16BIT | GU_TRANSFORM_2D, 4, 4, NULL, vertices11_div2); sceGuPatchDivide(4, 4); sceGuShadeModel(GU_SMOOTH); sceGuDrawBezier(GU_COLOR_8888 | GU_VERTEX_16BIT | GU_TRANSFORM_2D, 4, 2, NULL, vertices12_4x2); sceGuDrawBezier(GU_COLOR_8888 | GU_VERTEX_16BIT | GU_TRANSFORM_2D, 4, 5, NULL, vertices13_4x5); sceGuDrawBezier(GU_COLOR_8888 | GU_VERTEX_16BIT | GU_TRANSFORM_2D, 4, 8, NULL, vertices14_4x8); sceGuDrawBezier(GU_COLOR_8888 | GU_VERTEX_16BIT | GU_TRANSFORM_2D | GU_INDEX_8BIT, 4, 4, indices15_inds8, vertices15_inds8); sceGuDrawBezier(GU_COLOR_8888 | GU_VERTEX_16BIT | GU_TRANSFORM_2D | GU_INDEX_16BIT, 4, 4, indices16_inds16, vertices16_inds16); sceGuDrawBezier(GU_COLOR_8888 | GU_VERTEX_16BIT | GU_TRANSFORM_2D | GU_INDEX_BITS, 4, 4, indices17_inds32, vertices17_inds32); // Does the vertex pointer increment? sceGuDrawBezier(GU_COLOR_8888 | GU_VERTEX_16BIT | GU_TRANSFORM_2D, 4, 4, NULL, vertices18_19_inc); sceGuDrawBezier(GU_COLOR_8888 | GU_VERTEX_16BIT | GU_TRANSFORM_2D, 4, 4, NULL, NULL); // And indices? sceGuDrawBezier(GU_COLOR_8888 | GU_VERTEX_16BIT | GU_TRANSFORM_2D | GU_INDEX_8BIT, 4, 4, indices20_21_ind_inc, vertices20_21_ind_inc); sceGuDrawBezier(GU_COLOR_8888 | GU_VERTEX_16BIT | GU_TRANSFORM_2D | GU_INDEX_8BIT, 4, 4, NULL, NULL); endFrame(); }