1
0

Fix VSYNC

This commit is contained in:
otya128
2016-12-16 20:36:48 +09:00
parent aedb1ffd4e
commit c5b6579920
2 changed files with 8 additions and 5 deletions

View File

@@ -274,10 +274,6 @@ class BuiltinFunction
} }
static void VSYNC(PetitComputer p, int time) static void VSYNC(PetitComputer p, int time)
{ {
if (time == 0)
{
return;
}
p.vsync(time); p.vsync(time);
} }
static void WAIT(PetitComputer p, DefaultValue!int time) static void WAIT(PetitComputer p, DefaultValue!int time)

View File

@@ -321,13 +321,13 @@ class PetitComputer
SDL_Renderer* renderer; SDL_Renderer* renderer;
int vsyncFrame; int vsyncFrame;
int vsyncCount; int vsyncCount;
int prevVSyncCount;
bool isVSync; bool isVSync;
bool waitFlag; bool waitFlag;
void vsync(int f) void vsync(int f)
{ {
waitFlag = true; waitFlag = true;
isVSync = true; isVSync = true;
vsyncCount = 0;
vsyncFrame = f; vsyncFrame = f;
} }
void wait(int f) void wait(int f)
@@ -1151,6 +1151,7 @@ class PetitComputer
if (maincntRender != oldmaincnt) if (maincntRender != oldmaincnt)
{ {
maincnt++; maincnt++;
vsyncCount++;
} }
if(waitFlag) if(waitFlag)
{ {
@@ -1158,6 +1159,10 @@ class PetitComputer
//A=MAINCNT:WAIT 50:A=MAINCNT-A->A=50 //A=MAINCNT:WAIT 50:A=MAINCNT-A->A=50
//A=MAINCNT:VSYNC 50:A=MAINCNT-A->A=0~50 //A=MAINCNT:VSYNC 50:A=MAINCNT-A->A=0~50
graphic.updateVM(); graphic.updateVM();
if (isVSync && prevVSyncCount)
{
vsyncFrame -= vsyncCount - prevVSyncCount;
}
auto endmaincnt = maincnt + vsyncFrame; auto endmaincnt = maincnt + vsyncFrame;
oldmaincnt = maincntRender; oldmaincnt = maincntRender;
while (maincnt < endmaincnt && !quit) while (maincnt < endmaincnt && !quit)
@@ -1172,6 +1177,7 @@ class PetitComputer
vsyncFrame = 0; vsyncFrame = 0;
waitFlag = false; waitFlag = false;
isVSync = false; isVSync = false;
prevVSyncCount = vsyncCount;
} }
//maincnt = cast(int)((SDL_GetTicks() - startcnt) / frame); //maincnt = cast(int)((SDL_GetTicks() - startcnt) / frame);
graphic.updateVM(); graphic.updateVM();
@@ -1211,6 +1217,7 @@ class PetitComputer
scope (exit) scope (exit)
{ {
maincnt += maincntRender - oldmaincnt; maincnt += maincntRender - oldmaincnt;
vsyncCount += maincntRender - oldmaincnt;
} }
void setText(wstring text) void setText(wstring text)
{ {