cubemap_info * create_cubemap (u32 size, u32 fmt, u32 spsize, u32 spfmt) { cubemap_info *cubemap = malloc (sizeof (cubemap_info)); int i; for (i = 0; i < 6; i++) { cubemap->texels[i] = memalign (32, GX_GetTexBufferSize (size, size, fmt, GX_FALSE, 0)); GX_InitTexObj (&cubemap->tex[i], cubemap->texels[i], size, size, fmt, GX_CLAMP, GX_CLAMP, GX_FALSE); cubemap->face_shader[i] = create_shader (&cubemap_shader_setup, (void *) &faceno[i]); shader_append_texmap (cubemap->face_shader[i], &cubemap->tex[i], faceno[i]); shader_append_texcoordgen (cubemap->face_shader[i], GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY); } cubemap->size = size; cubemap->fmt = fmt; cubemap->sphtexels = memalign (32, GX_GetTexBufferSize (spsize, spsize, spfmt, GX_FALSE, 0)); GX_InitTexObj (&cubemap->spheretex, cubemap->sphtexels, spsize, spsize, spfmt, GX_CLAMP, GX_CLAMP, GX_FALSE); cubemap->sphsize = spsize; cubemap->sphfmt = spfmt; return cubemap; }
static void greets_init_effect (void *params, backbuffer_info *bbuf) { greets_data *gdata = (greets_data *) params; gdata->world = create_world (0); world_set_perspective (gdata->world, 60.0, 1.33f, 10.0f, 300.0f); world_set_pos_lookat_up (gdata->world, (guVector) { 0, 0, 50 }, (guVector) { 0, 0, 0 }, (guVector) { 0, 1, 0 }); TPL_OpenTPLFromMemory (&fontTPL, (void *) font_tpl, font_tpl_size); TPL_GetTexture (&fontTPL, font, &gdata->fontobj); GX_InitTexObjFilterMode (&gdata->fontobj, GX_LINEAR, GX_LINEAR); GX_InitTexObjWrapMode (&gdata->fontobj, GX_REPEAT, GX_REPEAT); gdata->tileidx = memalign (32, GX_GetTexBufferSize (TILES_W, TILES_H, TILES_FMT, GX_FALSE, 0)); GX_InitTexObj (&gdata->tileidxobj, gdata->tileidx, TILES_W, TILES_H, TILES_FMT, GX_REPEAT, GX_REPEAT, GX_FALSE); GX_InitTexObjFilterMode (&gdata->tileidxobj, GX_NEAR, GX_NEAR); gdata->tile_shader = create_shader (&init_tile_shader, NULL); shader_append_texmap (gdata->tile_shader, &gdata->fontobj, GX_TEXMAP0); shader_append_texmap (gdata->tile_shader, &gdata->tileidxobj, GX_TEXMAP1); shader_append_texcoordgen (gdata->tile_shader, GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY); memset (gdata->tileidx, 0, GX_GetTexBufferSize (TILES_W, TILES_H, TILES_FMT, GX_FALSE, 0)); init_ascii_to_char (); /*for (i = 0; i < 4; i++) put_text (gdata->tileidx, i, i, (unsigned char *) "OOOOOOOOOOOOOO");*/ object_loc_initialise (&gdata->greets_loc, GX_PNMTX0); }
static void put_text (void *tileidx, int row, int startcol, unsigned char *text, unsigned int textlen, int offset, int len) { unsigned char *c = tileidx; int i; for (i = 0; i < len; i++) { int offset2 = offset + i * 4; int idx = tex_index (startcol + i, row, TILES_W, 8); c[idx] = (offset2 >= 0 && offset2 < textlen) ? ascii_to_char[text[offset2]] : 0; } DCFlushRange (c, GX_GetTexBufferSize (TILES_W, TILES_H, TILES_FMT, GX_FALSE, 0)); }
//Public functions void ROOT::enableShadows(LIGHT * l, SDW_PARAMS shadow) { this->shadowCaster = l; s = shadow; this->stencilBuffer = memalign(32, GX_GetTexBufferSize(256, 256, GX_TF_I8, GX_FALSE,0)); }
static void ghost_init_effect (void *params, backbuffer_info *bbuf) { glass_data *gdata = (glass_data *) params; guPerspective (perspmat, 60, 1.33f, 10.0f, 500.0f); scene_update_camera (&scene); object_loc_initialise (&gdata->obj_loc, GX_PNMTX0); object_set_tex_norm_matrix (&gdata->obj_loc, GX_TEXMTX0); TPL_OpenTPLFromMemory (&mighty_zebuTPL, (void *) mighty_zebu_tpl, mighty_zebu_tpl_size); /*TPL_OpenTPLFromMemory (&spiderwebTPL, (void *) spiderweb_tpl, spiderweb_tpl_size);*/ gdata->grabbed_texture = memalign (32, GX_GetTexBufferSize (RTT_WIDTH, RTT_HEIGHT, USEFMT, GX_FALSE, 0)); /* Set up refraction shader. */ gdata->refraction_shader = create_shader (&refraction_setup, NULL); shader_append_texmap (gdata->refraction_shader, get_utility_texture (UTIL_TEX_REFRACT), GX_TEXMAP2); shader_append_texcoordgen (gdata->refraction_shader, GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_NRM, GX_TEXMTX0); /* Set up refraction post-pass shader. */ TPL_GetTexture (&mighty_zebuTPL, mighty_zebu, &gdata->mighty_zebu_tex_obj); GX_InitTexObjWrapMode (&gdata->mighty_zebu_tex_obj, GX_CLAMP, GX_CLAMP); GX_InitTexObjFilterMode (&gdata->mighty_zebu_tex_obj, GX_LINEAR, GX_LINEAR); gdata->plain_texture_shader = create_shader (&plain_texture_setup, NULL); shader_append_texmap (gdata->plain_texture_shader, &gdata->mighty_zebu_tex_obj, GX_TEXMAP0); shader_append_texcoordgen (gdata->plain_texture_shader, GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY); GX_InitTexObj (&gdata->grabbed_tex_obj, gdata->grabbed_texture, RTT_WIDTH, RTT_HEIGHT, USEFMT, GX_CLAMP, GX_CLAMP, GX_FALSE); gdata->refraction_postpass_shader = create_shader (&refraction_postpass_setup, NULL); shader_append_texmap (gdata->refraction_postpass_shader, &gdata->grabbed_tex_obj, GX_TEXMAP0); shader_append_texmap (gdata->refraction_postpass_shader, &gdata->mighty_zebu_tex_obj, GX_TEXMAP1); shader_append_texcoordgen (gdata->refraction_postpass_shader, GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY); shader_append_texcoordgen (gdata->refraction_postpass_shader, GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX1, GX_IDENTITY); /* Set up glass post-pass shader. */ gdata->glass_postpass_shader = create_shader (&glass_postpass, NULL); shader_append_texmap (gdata->glass_postpass_shader, get_utility_texture (UTIL_TEX_DARKENING), GX_TEXMAP3); shader_append_texcoordgen (gdata->glass_postpass_shader, GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_NRM, GX_TEXMTX0); }