|
Display list proper form November 30, 2010 07:04AM | Registered: 16 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: 16 years ago Posts: 686 |
|
Re: Display list proper form November 30, 2010 08:07PM | Registered: 16 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: 17 years ago Posts: 276 |
|
Re: Display list proper form November 30, 2010 11:13PM | Registered: 16 years ago Posts: 118 |
|
Re: Display list proper form November 30, 2010 11:52PM | Registered: 17 years ago Posts: 276 |
|
Re: Display list proper form December 01, 2010 06:15AM | Moderator Registered: 17 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: 16 years ago Posts: 686 |
|
Re: Display list proper form December 01, 2010 06:36PM | Registered: 16 years ago Posts: 118 |
|
Re: Display list proper form December 02, 2010 09:12AM | Registered: 17 years ago Posts: 62 |
|
Re: Display list proper form December 02, 2010 08:20PM | Registered: 16 years ago Posts: 118 |
|
Re: Display list proper form December 05, 2010 02:28AM | Registered: 16 years ago Posts: 686 |
|
Re: Display list proper form December 05, 2010 03:19AM | Registered: 16 years ago Posts: 118 |
|
Re: Display list proper form December 06, 2010 01:05AM | Registered: 17 years ago Posts: 62 |
|
Re: Display list proper form December 23, 2010 02:10AM | Registered: 16 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;
}