mirror of
https://github.com/OpenDriver2/REDRIVER2.git
synced 2024-11-25 03:42:34 +01:00
- [Psy-X] VSync support reworked
This commit is contained in:
parent
a5f7597637
commit
d154a77e13
@ -118,6 +118,9 @@ extern void PsyX_WaitForTimestep(int count);
|
||||
/* Changes swap interval state */
|
||||
extern void PsyX_EnableSwapInterval(int enable);
|
||||
|
||||
/* Changes swap interval interval interval */
|
||||
extern void PsyX_SetSwapInterval(int interval);
|
||||
|
||||
#if defined(_LANGUAGE_C_PLUS_PLUS)||defined(__cplusplus)||defined(c_plusplus)
|
||||
}
|
||||
#endif
|
||||
|
@ -43,10 +43,9 @@ int strcasecmp(const char* _l, const char* _r)
|
||||
|
||||
SDL_Window* g_window = NULL;
|
||||
|
||||
#define SWAP_INTERVAL 1
|
||||
|
||||
int g_swapInterval = SWAP_INTERVAL;
|
||||
int g_swapInterval = 1;
|
||||
int g_enableSwapInterval = 1;
|
||||
int g_skipSwapInterval = 0;
|
||||
|
||||
PsyXKeyboardMapping g_keyboard_mapping;
|
||||
PsyXControllerMapping g_controller_mapping;
|
||||
@ -147,7 +146,7 @@ long PsyX_Sys_SetVMode(long mode)
|
||||
|
||||
int PsyX_Sys_GetVBlankCount()
|
||||
{
|
||||
if (g_swapInterval == 0)
|
||||
if (g_skipSwapInterval)
|
||||
{
|
||||
// extra speedup.
|
||||
// does not affect `vsync_callback` count
|
||||
@ -801,6 +800,7 @@ void PsyX_Sys_DoDebugMouseMotion(int x, int y)
|
||||
gameDebugMouse(x, y);
|
||||
}
|
||||
|
||||
|
||||
void PsyX_Sys_DoDebugKeys(int nKey, char down)
|
||||
{
|
||||
if (gameDebugKeys)
|
||||
@ -809,21 +809,9 @@ void PsyX_Sys_DoDebugKeys(int nKey, char down)
|
||||
if (nKey == SDL_SCANCODE_BACKSPACE)
|
||||
{
|
||||
if (down)
|
||||
{
|
||||
if (g_swapInterval != 0)
|
||||
{
|
||||
g_swapInterval = 0;
|
||||
GR_ResetDevice();
|
||||
}
|
||||
}
|
||||
g_skipSwapInterval = 1;
|
||||
else
|
||||
{
|
||||
if (g_swapInterval != SWAP_INTERVAL)
|
||||
{
|
||||
g_swapInterval = SWAP_INTERVAL;
|
||||
GR_ResetDevice();
|
||||
}
|
||||
}
|
||||
g_skipSwapInterval = 0;
|
||||
}
|
||||
|
||||
if (!down)
|
||||
@ -919,7 +907,7 @@ void PsyX_WaitForTimestep(int count)
|
||||
#endif
|
||||
|
||||
// wait for vblank
|
||||
if (g_swapInterval > 0)
|
||||
if (!g_skipSwapInterval)
|
||||
{
|
||||
static int swapLastVbl = 0;
|
||||
|
||||
|
@ -78,6 +78,8 @@ int g_pgxpTextureCorrection = 1;
|
||||
int g_pgxpZBuffer = 1;
|
||||
int g_bilinearFiltering = 0;
|
||||
|
||||
extern int g_skipSwapInterval;
|
||||
|
||||
// this has to be configured for each game
|
||||
float g_pgxpZNear = 0.25f;
|
||||
float g_pgxpZFar = 1000.0f;
|
||||
@ -511,6 +513,13 @@ void GR_Shutdown()
|
||||
#endif
|
||||
}
|
||||
|
||||
void GR_UpdateSwapIntervalState()
|
||||
{
|
||||
#if defined(RENDERER_OGL)
|
||||
SDL_GL_SetSwapInterval((g_enableSwapInterval && !g_skipSwapInterval) ? g_swapInterval : 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
void GR_BeginScene()
|
||||
{
|
||||
g_lastBoundTexture = 0;
|
||||
@ -523,6 +532,7 @@ void GR_BeginScene()
|
||||
|
||||
GR_UpdateVRAM();
|
||||
GR_SetViewPort(0, 0, g_windowWidth, g_windowHeight);
|
||||
GR_UpdateSwapIntervalState();
|
||||
|
||||
if (g_wireframeMode)
|
||||
{
|
||||
@ -553,7 +563,7 @@ unsigned short vram[VRAM_WIDTH * VRAM_HEIGHT];
|
||||
|
||||
void GR_ResetDevice()
|
||||
{
|
||||
PsyX_EnableSwapInterval(g_enableSwapInterval);
|
||||
GR_UpdateSwapIntervalState();
|
||||
}
|
||||
|
||||
typedef struct
|
||||
@ -1119,17 +1129,18 @@ int GR_InitialisePSX()
|
||||
#endif
|
||||
|
||||
GR_ResetDevice();
|
||||
PsyX_EnableSwapInterval(g_enableSwapInterval);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void PsyX_SetSwapInterval(int interval)
|
||||
{
|
||||
g_swapInterval = interval;
|
||||
}
|
||||
|
||||
void PsyX_EnableSwapInterval(int enable)
|
||||
{
|
||||
g_enableSwapInterval = enable;
|
||||
#if defined(RENDERER_OGL)
|
||||
SDL_GL_SetSwapInterval(g_enableSwapInterval ? g_swapInterval : 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
void GR_Ortho2D(float left, float right, float bottom, float top, float znear, float zfar)
|
||||
|
Loading…
Reference in New Issue
Block a user