Display list proper form November 30, 2010 07:04AM | Registered: 14 years ago Posts: 118 |
void Player::buildDisplayList(){ static const u32 TEMP_SIZE = 16384; if(displayList) free(displayList); displayList = NULL; u8* tmpDisplayList = (u8*)(memalign(32, TEMP_SIZE)); if(!tmpDisplayList){ // PANIC! exit(1); } DCInvalidateRange((void*)tmpDisplayList, TEMP_SIZE); memset(tmpDisplayList, 0, TEMP_SIZE); GX_BeginDispList(tmpDisplayList, TEMP_SIZE); GX_ClearVtxDesc(); GX_SetVtxDesc(GX_VA_POS, GX_DIRECT); GX_SetVtxDesc(GX_VA_CLR0, GX_DIRECT); // Color info u8 r = 0x00; u8 g = 0x00; u8 b = 0xFF; GX_Begin(GX_QUADS, GX_VTXFMT_CLR, 24); // Right now we're just rendering a box. GX_Position3f32(-1.0f,1.0f,1.0f); GX_Color4u8(r, g, b, 0xff); GX_Position3f32(1.0f,1.0f,1.0f); GX_Color4u8(r, g, b, 0xff); GX_Position3f32(1.0f,1.0f,-1.0f); GX_Color4u8(r, g, b, 0xff); GX_Position3f32(-1.0f,1.0f,-1.0f); GX_Color4u8(r, g, b, 0xff); // ... GX_End(); // Copy the temporary DL into our permanent display list actualDLsize = (GX_EndDispList()+31)&~31; displayList = (u8*)(memalign(32, actualDLsize)); DCInvalidateRange((void*)displayList, actualDLsize); memcpy(displayList, tmpDisplayList, actualDLsize); DCFlushRange((void*)displayList, actualDLsize); // Delete the temporary display list if(tmpDisplayList) free(tmpDisplayList); tmpDisplayList = NULL; }
void RenderEverything(){ Mtx mv, rot; guMtxIdentity(mv); guMtxTransApply(mv, mv, player->pos.x, player->pos.y, player->pos.z); guMtxIdentity(rot); guMtxRotDeg(rot, 'x', player->az); guMtxRotDeg(rot, 'y', player->ay); guMtxRotDeg(rot, 'z', player->az); guMtxConcat(mv, rot, mv); GX_LoadPosMtxImm(mv, GX_PNMTX0); GX_CallDispList(player->displayList, player->actualDLsize); }
Re: Display list proper form November 30, 2010 07:50PM | Registered: 14 years ago Posts: 686 |
Re: Display list proper form November 30, 2010 08:07PM | Registered: 14 years ago Posts: 118 |
#define GX_VTXFMT_CLR GX_VTXFMT1 // In the initialization code: GX_SetVtxAttrFmt(GX_VTXFMT_CLR, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); GX_SetVtxAttrFmt(GX_VTXFMT_CLR, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);
Re: Display list proper form November 30, 2010 11:00PM | Registered: 15 years ago Posts: 276 |
Re: Display list proper form November 30, 2010 11:13PM | Registered: 14 years ago Posts: 118 |
Re: Display list proper form November 30, 2010 11:52PM | Registered: 15 years ago Posts: 276 |
Re: Display list proper form December 01, 2010 06:15AM | Moderator Registered: 15 years ago Posts: 703 |
Quote
ekeeke
Another possibility is that Display List functions are simply not correctly implemented in libogc, I remember this has already been discussed before but I don't know the general position on that subject.
Re: Display list proper form December 01, 2010 12:10PM | Registered: 14 years ago Posts: 686 |
Re: Display list proper form December 01, 2010 06:36PM | Registered: 14 years ago Posts: 118 |
Re: Display list proper form December 02, 2010 09:12AM | Registered: 15 years ago Posts: 62 |
Re: Display list proper form December 02, 2010 08:20PM | Registered: 14 years ago Posts: 118 |
Re: Display list proper form December 05, 2010 02:28AM | Registered: 14 years ago Posts: 686 |
Re: Display list proper form December 05, 2010 03:19AM | Registered: 14 years ago Posts: 118 |
Re: Display list proper form December 06, 2010 01:05AM | Registered: 15 years ago Posts: 62 |
Re: Display list proper form December 23, 2010 02:10AM | Registered: 14 years ago Posts: 118 |
void Model::buildDisplayList(){ if(displayList) free(displayList); displayList = NULL; u8* tmpDisplayList = (u8*)(memalign(32, TEMP_DISPLIST_SIZE)); if(!tmpDisplayList) exit(1); // PANIC! DCInvalidateRange((void*)tmpDisplayList, TEMP_DISPLIST_SIZE); GX_BeginDispList(tmpDisplayList, TEMP_DISPLIST_SIZE); ///////////////////////////////////////////////////////////// ////// Temporary model information: ///////////////////////////////////////////////////////////// static const u8 r = 0x00; static const u8 g = 0x00; static const u8 b = 0xff; GX_SetTevOp(GX_TEVSTAGE0, GX_DECAL); GX_SetTevOrder(GX_TEVSTAGE0, GX_TEXCOORDNULL, GX_TEXMAP_NULL, GX_COLOR0A0); // GX_ClearVtxDesc(); GX_SetVtxDesc(GX_VA_POS, GX_DIRECT); GX_SetVtxDesc(GX_VA_CLR0, GX_DIRECT); GX_Begin(GX_QUADS, GX_VTXFMT_CLR, 24); GX_Position3f32(-1.0f,1.0f,1.0f); GX_Color4u8(r, g, b, 0xff); GX_Position3f32(1.0f,1.0f,1.0f); GX_Color4u8(r, g, b, 0xff); GX_Position3f32(1.0f,1.0f,-1.0f); GX_Color4u8(r, g, b, 0xff); GX_Position3f32(-1.0f,1.0f,-1.0f); GX_Color4u8(r, g, b, 0xff); GX_Position3f32(-1.0f,-1.0f,1.0f); GX_Color4u8(r, g, b, 0xff); GX_Position3f32(1.0f,-1.0f,1.0f); GX_Color4u8(r, g, b, 0xff); GX_Position3f32(1.0f,-1.0f,-1.0f); GX_Color4u8(r, g, b, 0xff); GX_Position3f32(-1.0f,-1.0f,-1.0f); GX_Color4u8(r, g, b, 0xff); GX_Position3f32(-1.0f,1.0f,1.0f); GX_Color4u8(r, g, b, 0xff); GX_Position3f32(1.0f,1.0f,1.0f); GX_Color4u8(r, g, b, 0xff); GX_Position3f32(1.0f,-1.0f,1.0f); GX_Color4u8(r, g, b, 0xff); GX_Position3f32(-1.0f,-1.0f,1.0f); GX_Color4u8(r, g, b, 0xff); GX_Position3f32(-1.0f,1.0f,-1.0f); GX_Color4u8(r, g, b, 0xff); GX_Position3f32(-1.0f,-1.0f,-1.0f); GX_Color4u8(r, g, b, 0xff); GX_Position3f32(1.0f,-1.0f,-1.0f); GX_Color4u8(r, g, b, 0xff); GX_Position3f32(1.0f,1.0f,-1.0f); GX_Color4u8(r, g, b, 0xff); GX_Position3f32(-1.0f,1.0f,1.0f); GX_Color4u8(r, g, b, 0xff); GX_Position3f32(-1.0f,1.0f,-1.0f); GX_Color4u8(r, g, b, 0xff); GX_Position3f32(-1.0f,-1.0f,-1.0f); GX_Color4u8(r, g, b, 0xff); GX_Position3f32(-1.0f,-1.0f,1.0f); GX_Color4u8(r, g, b, 0xff); GX_Position3f32(1.0f,1.0f,1.0f); GX_Color4u8(r, g, b, 0xff); GX_Position3f32(1.0f,1.0f,-1.0f); GX_Color4u8(r, g, b, 0xff); GX_Position3f32(1.0f,-1.0f,-1.0f); GX_Color4u8(r, g, b, 0xff); GX_Position3f32(1.0f,-1.0f,1.0f); GX_Color4u8(r, g, b, 0xff); GX_End(); ///////////////////////////////////////////////////////////// /////////// end temporary model info ///////////////////////////////////////////////////////////// /* Actual model loading goes here */ // Copy the temporary DL into our permanent display list actualDLsize = GX_EndDispList(); displayList = (u8*)(memalign(32, actualDLsize)); DCInvalidateRange((void*)displayList, actualDLsize); memcpy(displayList, tmpDisplayList, actualDLsize); DCFlushRange((void*)displayList, actualDLsize); // Clean up if(tmpDisplayList) free(tmpDisplayList); tmpDisplayList = NULL; }