Thanks for the response! Yea, I noticed that libdraw only supports FIELD mode. But I think what I want is non-interlaced mode. I guess I'm not 100% clear on the difference.
Non-interlaced mode vs. interlaced FRAME mode?
Non-interlaced mode ignores the FIELD/FRAME flag because it isn't interlaced. I was under the impression that FRAME mode still expected a 60Hz swap rate. Unless I switch the actual MODE in libdraw to be non-interlaced, then it won't create two buffers for me, which is what I need to run at <60Hz.
Anyway, I knew I posted too early. I got it working last night finally. This is the entry I used:
Code: Select all
{ 640, 224, 0x02, 0, 143360, GS_SET_DISPLAY(632, 30, 3, 0, 2559, 223) }
What I don't understand is the 5th parameter to GS_SET_DISPLAY(). It is supposed to be the width - 1, but then why is it width*2 -1 for NTSC and PAL? I thought it had something to do with them being interlaced, so I switched it to width-1 like the other modes.
I also found a bug in draw.c that was annoying me. When I would initialize the GS it would flash horribly between the current contents of VRAM. The code currently looks like this:
Code: Select all
// Wait and clear both buffers.
draw_swap(); draw_clear(0.00f, 0.00f, 0.00f);
draw_swap(); draw_clear(0.00f, 0.00f, 0.00f);
// Initialize the packet.
if (packet_allocate(&draw_packet, 1024) < 0) { return -1; }
But it should be:
Code: Select all
// Initialize the packet.
if (packet_allocate(&draw_packet, 1024) < 0) { return -1; }
// Wait and clear both buffers.
draw_swap(); draw_clear(0.00f, 0.00f, 0.00f);
draw_swap(); draw_clear(0.00f, 0.00f, 0.00f);
Because draw_clear() uses the draw_packet.
I guess I should look at gsKit. Is it a better choice than gsLib?