Add gfxSetDoubleBuffering() for disabling double-buffering
This commit is contained in:
parent
6a195608aa
commit
b5723c9209
@ -22,6 +22,7 @@ void gfxExit();
|
|||||||
//control stuff
|
//control stuff
|
||||||
void gfxSet3D(bool enable);
|
void gfxSet3D(bool enable);
|
||||||
void gfxSetScreenFormat(gfxScreen_t screen, GSP_FramebufferFormats format);
|
void gfxSetScreenFormat(gfxScreen_t screen, GSP_FramebufferFormats format);
|
||||||
|
void gfxSetDoubleBuffering(bool doubleBuffering);
|
||||||
void gfxFlushBuffers();
|
void gfxFlushBuffers();
|
||||||
void gfxSwapBuffers();
|
void gfxSwapBuffers();
|
||||||
void gfxSwapBuffersGpu();
|
void gfxSwapBuffersGpu();
|
||||||
|
@ -12,13 +12,14 @@ u8* gfxTopLeftFramebuffers[2];
|
|||||||
u8* gfxTopRightFramebuffers[2];
|
u8* gfxTopRightFramebuffers[2];
|
||||||
u8* gfxBottomFramebuffers[2];
|
u8* gfxBottomFramebuffers[2];
|
||||||
|
|
||||||
u8 currentBuffer;
|
static u8 currentBuffer;
|
||||||
bool enable3d;
|
static bool enable3d;
|
||||||
|
static int doubleBuf = 1;
|
||||||
|
|
||||||
Handle gspEvent, gspSharedMemHandle;
|
Handle gspEvent, gspSharedMemHandle;
|
||||||
|
|
||||||
GSP_FramebufferFormats topFormat = GSP_BGR8_OES;
|
static GSP_FramebufferFormats topFormat = GSP_BGR8_OES;
|
||||||
GSP_FramebufferFormats botFormat = GSP_BGR8_OES;
|
static GSP_FramebufferFormats botFormat = GSP_BGR8_OES;
|
||||||
|
|
||||||
void gfxSet3D(bool enable)
|
void gfxSet3D(bool enable)
|
||||||
{
|
{
|
||||||
@ -32,6 +33,10 @@ void gfxSetScreenFormat(gfxScreen_t screen, GSP_FramebufferFormats format) {
|
|||||||
botFormat = format;
|
botFormat = format;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void gfxSetDoubleBuffering(bool doubleBuffering) {
|
||||||
|
doubleBuf = doubleBuffering ? 1 : 0; // make sure they're the integer values '1' and '0'
|
||||||
|
}
|
||||||
|
|
||||||
static u32 __get_bytes_per_pixel(GSP_FramebufferFormats format) {
|
static u32 __get_bytes_per_pixel(GSP_FramebufferFormats format) {
|
||||||
switch(format) {
|
switch(format) {
|
||||||
case GSP_RGBA8_OES:
|
case GSP_RGBA8_OES:
|
||||||
@ -76,7 +81,7 @@ void gfxWriteFramebufferInfo(gfxScreen_t screen)
|
|||||||
u8* framebufferInfoHeader=gfxSharedMemory+0x200+gfxThreadID*0x80;
|
u8* framebufferInfoHeader=gfxSharedMemory+0x200+gfxThreadID*0x80;
|
||||||
if(screen==GFX_BOTTOM)framebufferInfoHeader+=0x40;
|
if(screen==GFX_BOTTOM)framebufferInfoHeader+=0x40;
|
||||||
GSP_FramebufferInfo* framebufferInfo=(GSP_FramebufferInfo*)&framebufferInfoHeader[0x4];
|
GSP_FramebufferInfo* framebufferInfo=(GSP_FramebufferInfo*)&framebufferInfoHeader[0x4];
|
||||||
framebufferInfoHeader[0x0]^=1;
|
framebufferInfoHeader[0x0]^=doubleBuf;
|
||||||
framebufferInfo[framebufferInfoHeader[0x0]]=(screen==GFX_TOP)?(topFramebufferInfo):(bottomFramebufferInfo);
|
framebufferInfo[framebufferInfoHeader[0x0]]=(screen==GFX_TOP)?(topFramebufferInfo):(bottomFramebufferInfo);
|
||||||
framebufferInfoHeader[0x1]=1;
|
framebufferInfoHeader[0x1]=1;
|
||||||
}
|
}
|
||||||
@ -131,7 +136,7 @@ void gfxExit()
|
|||||||
// Exit event handler
|
// Exit event handler
|
||||||
gspExitEventHandler();
|
gspExitEventHandler();
|
||||||
|
|
||||||
// Free framebuffers (let's pretend linearFree is actually implemented...)
|
// Free framebuffers
|
||||||
linearFree(gfxTopRightFramebuffers[1]);
|
linearFree(gfxTopRightFramebuffers[1]);
|
||||||
linearFree(gfxTopRightFramebuffers[0]);
|
linearFree(gfxTopRightFramebuffers[0]);
|
||||||
linearFree(gfxBottomFramebuffers[1]);
|
linearFree(gfxBottomFramebuffers[1]);
|
||||||
@ -159,10 +164,10 @@ u8* gfxGetFramebuffer(gfxScreen_t screen, gfx3dSide_t side, u16* width, u16* hei
|
|||||||
if(screen==GFX_TOP)
|
if(screen==GFX_TOP)
|
||||||
{
|
{
|
||||||
if(height)*height=400;
|
if(height)*height=400;
|
||||||
return (side==GFX_LEFT || !enable3d)?(gfxTopLeftFramebuffers[currentBuffer^1]):(gfxTopRightFramebuffers[currentBuffer^1]);
|
return (side==GFX_LEFT || !enable3d)?(gfxTopLeftFramebuffers[currentBuffer^doubleBuf]):(gfxTopRightFramebuffers[currentBuffer^doubleBuf]);
|
||||||
}else{
|
}else{
|
||||||
if(height)*height=320;
|
if(height)*height=320;
|
||||||
return gfxBottomFramebuffers[currentBuffer^1];
|
return gfxBottomFramebuffers[currentBuffer^doubleBuf];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -175,7 +180,7 @@ void gfxFlushBuffers()
|
|||||||
|
|
||||||
void gfxSwapBuffers()
|
void gfxSwapBuffers()
|
||||||
{
|
{
|
||||||
currentBuffer^=1;
|
currentBuffer^=doubleBuf;
|
||||||
gfxSetFramebufferInfo(GFX_TOP, currentBuffer);
|
gfxSetFramebufferInfo(GFX_TOP, currentBuffer);
|
||||||
gfxSetFramebufferInfo(GFX_BOTTOM, currentBuffer);
|
gfxSetFramebufferInfo(GFX_BOTTOM, currentBuffer);
|
||||||
GSPGPU_SetBufferSwap(NULL, GFX_TOP, &topFramebufferInfo);
|
GSPGPU_SetBufferSwap(NULL, GFX_TOP, &topFramebufferInfo);
|
||||||
@ -184,7 +189,7 @@ void gfxSwapBuffers()
|
|||||||
|
|
||||||
void gfxSwapBuffersGpu()
|
void gfxSwapBuffersGpu()
|
||||||
{
|
{
|
||||||
currentBuffer^=1;
|
currentBuffer^=doubleBuf;
|
||||||
gfxSetFramebufferInfo(GFX_TOP, currentBuffer);
|
gfxSetFramebufferInfo(GFX_TOP, currentBuffer);
|
||||||
gfxSetFramebufferInfo(GFX_BOTTOM, currentBuffer);
|
gfxSetFramebufferInfo(GFX_BOTTOM, currentBuffer);
|
||||||
gfxWriteFramebufferInfo(GFX_TOP);
|
gfxWriteFramebufferInfo(GFX_TOP);
|
||||||
|
Loading…
Reference in New Issue
Block a user