gbadev.org forum archive

This is a read-only mirror of the content originally found on forum.gbadev.org (now offline), salvaged from Wayback machine copies. A new forum can be found here.

DS development > help with DISPLAY_LIST and GL_QUAD

#129278 - Chikungun - Mon May 21, 2007 12:58 pm

Hi everyone,

Can someone help me with a problem I have with my display list please?
I'm drawing a cube perfectly using GL_TRIANGLE
But when I move to GL_QUAD, it doesn't draw what I want.
the fact is I tried to juggle with GL_NOP but still it doesn't work.
Actually what I'll need is an example of a displaylist using something else than GL_TRIANGLE. If you browse the examples included in devkitpro there is nothing, and if you google FIFO_COMMAND_PACK and GL_QUAD there are 0 answers.
Anyone have a valid example please?
Thanks in advance

#131114 - Jhiant - Mon Jun 11, 2007 9:09 am

Quad order can sometimes be a little tricky. Look at the DirectX documentation for the peculiarities of Quad Lists in DirectX and try converting that. Most likely what you've got going on is backward facing or degenerate quads that are rendering, but just not showing up.
_________________
Occam's Razor: All things being equal, the simplest solution tends to be the best one.

#131116 - Chikungun - Mon Jun 11, 2007 9:36 am

Hi Jhiant, thanks for your reply, actually I did manage to do it but was too busy to post, now is the time to do so. Here is the display list for a cube using quads and it works (I had trouble with counting the offset, and with FIFO_NOP s) Actually beware of the positions of the vertices because I do update them in my game-loop so it may not be the right initialization (too lazy to bother as I update it before the first frame, sorry) but the important is the displaylist in itself, so I'll post it anyway:

u32 cubebase[] =
{
/*0*/ 108,
// face 1/6
// ... quad
/* 1*/ FIFO_COMMAND_PACK(FIFO_BEGIN, FIFO_NORMAL, FIFO_VERTEX16, FIFO_NORMAL),
/* 2*/ GL_QUAD,
/* 3*/ NORMAL_PACK( 0, 0, floattov10(-1.0)),
/* 4*/ VERTEX_PACK(inttov16(-1),inttov16(-1)),
/* 5*/ VERTEX_PACK(0,0),
/* 6*/ NORMAL_PACK( 0, 0, floattov10(-1.0)),
/* 7*/ FIFO_COMMAND_PACK(FIFO_VERTEX16, FIFO_NORMAL, FIFO_VERTEX16, FIFO_NORMAL),
/* 8*/ VERTEX_PACK(inttov16(1),inttov16(-1)),
/* 9*/ VERTEX_PACK(0,0),
/*10*/ NORMAL_PACK( 0, 0, floattov10(-1.0)),
/*11*/ VERTEX_PACK(inttov16(-1),inttov16(1)),
/*12*/ VERTEX_PACK(0,0),
/*13*/ NORMAL_PACK( 0, 0, floattov10(-1.0)),
/*14*/ FIFO_COMMAND_PACK(FIFO_VERTEX16, FIFO_NOP, FIFO_NOP, FIFO_END),
/*15*/ VERTEX_PACK(inttov16(-1),inttov16(1)),
/*16*/ VERTEX_PACK(0,0),
/*17*/ 0,
/*18*/ 0,

// face 2/6
// ... quad
/*19*/ FIFO_COMMAND_PACK(FIFO_BEGIN, FIFO_NORMAL, FIFO_VERTEX16, FIFO_NORMAL),
/*20*/ GL_QUAD,
/*21*/ NORMAL_PACK( 0, 0, floattov10(1.0) -1),
/*22*/ VERTEX_PACK(inttov16(-1),inttov16(-1)),
/*23*/ VERTEX_PACK(0,0),
/*24*/ NORMAL_PACK( 0, 0, floattov10(1.0) -1),

/*25*/ FIFO_COMMAND_PACK(FIFO_VERTEX16, FIFO_NORMAL, FIFO_VERTEX16, FIFO_NORMAL),
/*26*/ VERTEX_PACK(inttov16(1),inttov16(-1)),
/*27*/ VERTEX_PACK(0,0),
/*28*/ NORMAL_PACK( 0, 0, floattov10(1.0) -1),
/*29*/ VERTEX_PACK(inttov16(-1),inttov16(1)),
/*30*/ VERTEX_PACK(0,0),
/*31*/ NORMAL_PACK( 0, 0, floattov10(1.0) -1),

/*32*/ FIFO_COMMAND_PACK(FIFO_VERTEX16, FIFO_NOP, FIFO_NOP, FIFO_END),
/*33*/ VERTEX_PACK(inttov16(-1),inttov16(1)),
/*34*/ VERTEX_PACK(0,0),
/*35*/ 0,
/*36*/ 0,

// face 3/6
// ... quad
/*37*/ FIFO_COMMAND_PACK(FIFO_BEGIN, FIFO_NORMAL, FIFO_VERTEX16, FIFO_NORMAL),
/*38*/ GL_QUAD,
/*39*/ NORMAL_PACK( 0, floattov10(1.0) -1, 0),
/*40*/ VERTEX_PACK(inttov16(-1),inttov16(-1)),
/*41*/ VERTEX_PACK(0,0),
/*42*/ NORMAL_PACK( 0, floattov10(1.0) -1, 0),

/*43*/ FIFO_COMMAND_PACK(FIFO_VERTEX16, FIFO_NORMAL, FIFO_VERTEX16, FIFO_NORMAL),
/*44*/ VERTEX_PACK(inttov16(1),inttov16(-1)),
/*45*/ VERTEX_PACK(0,0),
/*46*/ NORMAL_PACK( 0, floattov10(1.0) -1, 0),
/*47*/ VERTEX_PACK(inttov16(-1),inttov16(1)),
/*48*/ VERTEX_PACK(0,0),
/*49*/ NORMAL_PACK( 0, floattov10(1.0) -1, 0),

/*50*/ FIFO_COMMAND_PACK(FIFO_VERTEX16, FIFO_NOP, FIFO_NOP, FIFO_END),
/*51*/ VERTEX_PACK(inttov16(-1),inttov16(1)),
/*52*/ VERTEX_PACK(0,0),
/*53*/ 0,
/*54*/ 0,

// face 4/6
// ... quad
/*55*/ FIFO_COMMAND_PACK(FIFO_BEGIN, FIFO_NORMAL, FIFO_VERTEX16, FIFO_NORMAL),
/*56*/ GL_QUAD,
/*57*/ NORMAL_PACK( 0, floattov10(-1.0), 0),
/*58*/ VERTEX_PACK(inttov16(-1),inttov16(-1)),
/*59*/ VERTEX_PACK(0,0),
/*60*/ NORMAL_PACK( 0, floattov10(-1.0), 0),

/*61*/ FIFO_COMMAND_PACK(FIFO_VERTEX16, FIFO_NORMAL, FIFO_VERTEX16, FIFO_NORMAL),
/*62*/ VERTEX_PACK(inttov16(1),inttov16(-1)),
/*63*/ VERTEX_PACK(0,0),
/*64*/ NORMAL_PACK( 0, floattov10(-1.0), 0),
/*65*/ VERTEX_PACK(inttov16(-1),inttov16(1)),
/*66*/ VERTEX_PACK(0,0),
/*67*/ NORMAL_PACK( 0, floattov10(-1.0), 0),

/*68*/ FIFO_COMMAND_PACK(FIFO_VERTEX16, FIFO_NOP, FIFO_NOP, FIFO_END),
/*69*/ VERTEX_PACK(inttov16(-1),inttov16(1)),
/*70*/ VERTEX_PACK(0,0),
/*71*/ 0,
/*72*/ 0,

// face 5/6
// ... quad
/*73*/ FIFO_COMMAND_PACK(FIFO_BEGIN, FIFO_NORMAL, FIFO_VERTEX16, FIFO_NORMAL),
/*74*/ GL_QUAD,
/*75*/ NORMAL_PACK(floattov10(1.0) -1, 0, 0),
/*76*/ VERTEX_PACK(inttov16(-1),inttov16(-1)),
/*77*/ VERTEX_PACK(0,0),
/*78*/ NORMAL_PACK(floattov10(1.0) -1, 0, 0),

/*79*/ FIFO_COMMAND_PACK(FIFO_VERTEX16, FIFO_NORMAL, FIFO_VERTEX16, FIFO_NORMAL),
/*80*/ VERTEX_PACK(inttov16(1),inttov16(-1)),
/*81*/ VERTEX_PACK(0,0),
/*82*/ NORMAL_PACK(floattov10(1.0) -1, 0, 0),
/*83*/ VERTEX_PACK(inttov16(-1),inttov16(1)),
/*84*/ VERTEX_PACK(0,0),
/*85*/ NORMAL_PACK(floattov10(1.0) -1, 0, 0),

/*86*/ FIFO_COMMAND_PACK(FIFO_VERTEX16, FIFO_NOP, FIFO_NOP, FIFO_END),
/*87*/ VERTEX_PACK(inttov16(-1),inttov16(1)),
/*88*/ VERTEX_PACK(0,0),
/*89*/ 0,
/*90*/ 0,

// face 6/6
// ... quad
/*91*/ FIFO_COMMAND_PACK(FIFO_BEGIN, FIFO_NORMAL, FIFO_VERTEX16, FIFO_NORMAL),
/*92*/ GL_QUAD,
/*93*/ NORMAL_PACK(floattov10(-1.0), 0, 0),
/*94*/ VERTEX_PACK(inttov16(-1),inttov16(-1)),
/*95*/ VERTEX_PACK(0,0),
/*96*/ NORMAL_PACK(floattov10(-1.0), 0, 0),

/*97*/ FIFO_COMMAND_PACK(FIFO_VERTEX16, FIFO_NORMAL, FIFO_VERTEX16, FIFO_NORMAL),
/*98*/ VERTEX_PACK(inttov16(1),inttov16(-1)),
/*99*/ VERTEX_PACK(0,0),
/*100*/ NORMAL_PACK(floattov10(-1.0), 0, 0),
/*101*/ VERTEX_PACK(inttov16(-1),inttov16(1)),
/*102*/ VERTEX_PACK(0,0),
/*103*/ NORMAL_PACK(floattov10(-1.0), 0, 0),

/*104*/ FIFO_COMMAND_PACK(FIFO_VERTEX16, FIFO_NOP, FIFO_NOP, FIFO_END),
/*105*/ VERTEX_PACK(inttov16(-1),inttov16(1)),
/*106*/ VERTEX_PACK(0,0),
/*107*/ 0,
/*108*/ 0,

};