The frameskip now also makes the 3D soft rasterizer skip frames. But it causes a problem that appears in iDeaS: 3D and 2D aren't synchronized when using frameskip. Feel free to revert it if that problem is annoying for you.
This commit is contained in:
parent
b8a2915c26
commit
748127d658
|
@ -1680,7 +1680,7 @@ u32 NDS_exec(s32 nb)
|
|||
}
|
||||
else if(nds.VCount==215)
|
||||
{
|
||||
gfx3d_VBlankEndSignal();
|
||||
gfx3d_VBlankEndSignal(skipThisFrame);
|
||||
}
|
||||
else if(nds.VCount==263)
|
||||
{
|
||||
|
|
|
@ -687,7 +687,7 @@ static void Control()
|
|||
}
|
||||
}
|
||||
|
||||
static void OGLRender()
|
||||
static void OGLRender(bool skipdraw)
|
||||
{
|
||||
if(!BEGINGL()) return;
|
||||
|
||||
|
|
|
@ -1374,12 +1374,12 @@ void gfx3d_VBlankSignal()
|
|||
drawPending = TRUE;
|
||||
}
|
||||
|
||||
void gfx3d_VBlankEndSignal()
|
||||
void gfx3d_VBlankEndSignal(bool skipdraw)
|
||||
{
|
||||
if(!drawPending) return;
|
||||
|
||||
drawPending = FALSE;
|
||||
gpu3D->NDS_3D_Render();
|
||||
gpu3D->NDS_3D_Render(skipdraw);
|
||||
}
|
||||
|
||||
#ifdef USE_GEOMETRY_FIFO_EMULATION
|
||||
|
|
|
@ -237,7 +237,7 @@ unsigned int gfx3d_glGetPosRes(unsigned int index);
|
|||
unsigned short gfx3d_glGetVecRes(unsigned int index);
|
||||
void gfx3d_glFlush(unsigned long v);
|
||||
void gfx3d_VBlankSignal();
|
||||
void gfx3d_VBlankEndSignal();
|
||||
void gfx3d_VBlankEndSignal(bool skipdraw);
|
||||
void gfx3d_Control(unsigned long v);
|
||||
u32 gfx3d_GetGXstatus();
|
||||
void gfx3d_sendCommandToFIFO(u32 val);
|
||||
|
|
|
@ -1145,8 +1145,11 @@ static void clipPoly(POLY* poly)
|
|||
|
||||
}
|
||||
|
||||
static void SoftRastRender()
|
||||
static void SoftRastRender(bool skipdraw)
|
||||
{
|
||||
if(skipdraw)
|
||||
return;
|
||||
|
||||
Fragment clearFragment;
|
||||
clearFragment.color.components.r = gfx3d.clearColor&0x1F;
|
||||
clearFragment.color.components.g = (gfx3d.clearColor>>5)&0x1F;
|
||||
|
|
|
@ -26,13 +26,14 @@ static void NDS_nullFunc1 (void){}
|
|||
static char NDS_nullFunc2 (void){ return 1; }
|
||||
static void NDS_nullFunc3 (int,unsigned short*) {}
|
||||
static void NDS_nullFunc4 (int,unsigned short*,unsigned char*) {}
|
||||
static void NDS_nullFunc5 (bool){}
|
||||
|
||||
GPU3DInterface gpu3DNull = {
|
||||
"None",
|
||||
NDS_nullFunc2, //NDS_3D_Init
|
||||
NDS_nullFunc1, //NDS_3D_Reset
|
||||
NDS_nullFunc1, //NDS_3D_Close
|
||||
NDS_nullFunc1, //NDS_3D_Render
|
||||
NDS_nullFunc5, //NDS_3D_Render
|
||||
NDS_nullFunc1, //NDS_3D_VramReconfigureSignal
|
||||
NDS_nullFunc4, //NDS_3D_GetLine
|
||||
NDS_nullFunc3 //NDS_3D_GetLineCaptured
|
||||
|
|
|
@ -39,7 +39,7 @@ typedef struct Render3DInterface
|
|||
void (CALL_CONVENTION* NDS_3D_Close) (void);
|
||||
|
||||
//called when the renderer should do its job and render the current display lists
|
||||
void (CALL_CONVENTION* NDS_3D_Render) (void);
|
||||
void (CALL_CONVENTION* NDS_3D_Render) (bool skipdraw);
|
||||
|
||||
//called when the emulator reconfigures its vram. you may need to invalidate your texture cache.
|
||||
void (CALL_CONVENTION* NDS_3D_VramReconfigureSignal) ();
|
||||
|
|
Loading…
Reference in New Issue