allow independent setting of double buffering
This commit is contained in:
parent
20d4e95dfd
commit
1a575891eb
@ -22,7 +22,7 @@ void gfxExit();
|
||||
//control stuff
|
||||
void gfxSet3D(bool enable);
|
||||
void gfxSetScreenFormat(gfxScreen_t screen, GSP_FramebufferFormats format);
|
||||
void gfxSetDoubleBuffering(bool doubleBuffering);
|
||||
void gfxSetDoubleBuffering(gfxScreen_t screen, bool doubleBuffering);
|
||||
void gfxFlushBuffers();
|
||||
void gfxSwapBuffers();
|
||||
void gfxSwapBuffersGpu();
|
||||
|
@ -12,9 +12,9 @@ u8* gfxTopLeftFramebuffers[2];
|
||||
u8* gfxTopRightFramebuffers[2];
|
||||
u8* gfxBottomFramebuffers[2];
|
||||
|
||||
static u8 currentBuffer;
|
||||
static bool enable3d;
|
||||
static int doubleBuf = 1;
|
||||
static u8 currentBuffer[2];
|
||||
static int doubleBuf[2] = {1,1};
|
||||
|
||||
Handle gspEvent, gspSharedMemHandle;
|
||||
|
||||
@ -33,8 +33,8 @@ void gfxSetScreenFormat(gfxScreen_t screen, GSP_FramebufferFormats format) {
|
||||
botFormat = format;
|
||||
}
|
||||
|
||||
void gfxSetDoubleBuffering(bool doubleBuffering) {
|
||||
doubleBuf = doubleBuffering ? 1 : 0; // make sure they're the integer values '1' and '0'
|
||||
void gfxSetDoubleBuffering( gfxScreen_t screen, bool doubleBuffering) {
|
||||
doubleBuf[screen] = doubleBuffering ? 1 : 0; // make sure they're the integer values '1' and '0'
|
||||
}
|
||||
|
||||
static u32 __get_bytes_per_pixel(GSP_FramebufferFormats format) {
|
||||
@ -81,7 +81,7 @@ void gfxWriteFramebufferInfo(gfxScreen_t screen)
|
||||
u8* framebufferInfoHeader=gfxSharedMemory+0x200+gfxThreadID*0x80;
|
||||
if(screen==GFX_BOTTOM)framebufferInfoHeader+=0x40;
|
||||
GSP_FramebufferInfo* framebufferInfo=(GSP_FramebufferInfo*)&framebufferInfoHeader[0x4];
|
||||
framebufferInfoHeader[0x0]^=doubleBuf;
|
||||
framebufferInfoHeader[0x0]^=doubleBuf[0x0];
|
||||
framebufferInfo[framebufferInfoHeader[0x0]]=(screen==GFX_TOP)?(topFramebufferInfo):(bottomFramebufferInfo);
|
||||
framebufferInfoHeader[0x1]=1;
|
||||
}
|
||||
@ -124,7 +124,8 @@ void gfxInit()
|
||||
//GSP shared mem : 0x2779F000
|
||||
gxCmdBuf=(u32*)(gfxSharedMemory+0x800+gfxThreadID*0x200);
|
||||
|
||||
currentBuffer=0;
|
||||
currentBuffer[0]=0;
|
||||
currentBuffer[1]=0;
|
||||
|
||||
// Initialize event handler and wait for VBlank
|
||||
gspInitEventHandler(gspEvent, (vu8*)gfxSharedMemory, gfxThreadID);
|
||||
@ -164,10 +165,10 @@ u8* gfxGetFramebuffer(gfxScreen_t screen, gfx3dSide_t side, u16* width, u16* hei
|
||||
if(screen==GFX_TOP)
|
||||
{
|
||||
if(height)*height=400;
|
||||
return (side==GFX_LEFT || !enable3d)?(gfxTopLeftFramebuffers[currentBuffer^doubleBuf]):(gfxTopRightFramebuffers[currentBuffer^doubleBuf]);
|
||||
return (side==GFX_LEFT || !enable3d)?(gfxTopLeftFramebuffers[currentBuffer[0]^doubleBuf[0]]):(gfxTopRightFramebuffers[currentBuffer[0]^doubleBuf[0]]);
|
||||
}else{
|
||||
if(height)*height=320;
|
||||
return gfxBottomFramebuffers[currentBuffer^doubleBuf];
|
||||
return gfxBottomFramebuffers[currentBuffer[1]^doubleBuf[1]];
|
||||
}
|
||||
}
|
||||
|
||||
@ -180,18 +181,20 @@ void gfxFlushBuffers()
|
||||
|
||||
void gfxSwapBuffers()
|
||||
{
|
||||
currentBuffer^=doubleBuf;
|
||||
gfxSetFramebufferInfo(GFX_TOP, currentBuffer);
|
||||
gfxSetFramebufferInfo(GFX_BOTTOM, currentBuffer);
|
||||
currentBuffer[0]^=doubleBuf[0];
|
||||
currentBuffer[1]^=doubleBuf[1];
|
||||
gfxSetFramebufferInfo(GFX_TOP, currentBuffer[0]);
|
||||
gfxSetFramebufferInfo(GFX_BOTTOM, currentBuffer[1]);
|
||||
GSPGPU_SetBufferSwap(NULL, GFX_TOP, &topFramebufferInfo);
|
||||
GSPGPU_SetBufferSwap(NULL, GFX_BOTTOM, &bottomFramebufferInfo);
|
||||
}
|
||||
|
||||
void gfxSwapBuffersGpu()
|
||||
{
|
||||
currentBuffer^=doubleBuf;
|
||||
gfxSetFramebufferInfo(GFX_TOP, currentBuffer);
|
||||
gfxSetFramebufferInfo(GFX_BOTTOM, currentBuffer);
|
||||
currentBuffer[0]^=doubleBuf[0];
|
||||
currentBuffer[1]^=doubleBuf[1];
|
||||
gfxSetFramebufferInfo(GFX_TOP, currentBuffer[0]);
|
||||
gfxSetFramebufferInfo(GFX_BOTTOM, currentBuffer[1]);
|
||||
gfxWriteFramebufferInfo(GFX_TOP);
|
||||
gfxWriteFramebufferInfo(GFX_BOTTOM);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user