diff options
-rw-r--r-- | src/GPU.cpp | 7 | ||||
-rw-r--r-- | src/GPU3D.cpp | 4 | ||||
-rw-r--r-- | src/GPU3D_Soft.cpp | 8 | ||||
-rw-r--r-- | src/NDS.cpp | 1 | ||||
-rw-r--r-- | src/wx/main.cpp | 6 |
5 files changed, 20 insertions, 6 deletions
diff --git a/src/GPU.cpp b/src/GPU.cpp index 92f05d8..af8c5d8 100644 --- a/src/GPU.cpp +++ b/src/GPU.cpp @@ -651,8 +651,11 @@ void StartHBlank(u32 line) { // draw // note: this should start 48 cycles after the scanline start - GPU2D_A->DrawScanline(line); - GPU2D_B->DrawScanline(line); + if (line < 192) + { + GPU2D_A->DrawScanline(line); + GPU2D_B->DrawScanline(line); + } NDS::CheckDMAs(0, 0x02); } diff --git a/src/GPU3D.cpp b/src/GPU3D.cpp index d818c5c..7521952 100644 --- a/src/GPU3D.cpp +++ b/src/GPU3D.cpp @@ -607,6 +607,10 @@ int ClipPolygon(Vertex* vertices, int nverts, int clipstart) // TODO: check for 1-dot polygons // TODO: the hardware seems to use a different algorithm. it reacts differently to vertices with W=0 + // some vertices that should get Y=-0x1000 get Y=0x1000 for some reason on hardware. it doesn't make sense. + // clipping seems to process the Y plane before the X plane. + + // also, polygons with any negative W are completely rejected. (TODO) // X clipping nverts = ClipAgainstPlane<0, attribs>(vertices, nverts, clipstart); diff --git a/src/GPU3D_Soft.cpp b/src/GPU3D_Soft.cpp index 01653e9..cce5d70 100644 --- a/src/GPU3D_Soft.cpp +++ b/src/GPU3D_Soft.cpp @@ -1522,8 +1522,7 @@ void ScanlineFinalPass(s32 y) if (RenderDispCnt & (1<<5)) { // edge marking - - // TODO: is it applied to bottom pixels? + // only applied to topmost pixels for (int x = 0; x < 256; x++) { @@ -1842,7 +1841,10 @@ void RenderThreadFunc() void RequestLine(int line) { if (RenderThreadRunning) - Platform::Semaphore_Wait(Sema_ScanlineCount); + { + if (line < 192) + Platform::Semaphore_Wait(Sema_ScanlineCount); + } } u32* GetLine(int line) diff --git a/src/NDS.cpp b/src/NDS.cpp index 10f3d64..271b618 100644 --- a/src/NDS.cpp +++ b/src/NDS.cpp @@ -400,6 +400,7 @@ u32 RunFrame() s32 ndscyclestorun; s32 ndscycles = 0; + // TODO: give it some margin, so it can directly do 17 cycles instead of 16 then 1 CalcIterationCycles(); if (CPUStop & 0xFFFF) diff --git a/src/wx/main.cpp b/src/wx/main.cpp index 3c2375b..302f5da 100644 --- a/src/wx/main.cpp +++ b/src/wx/main.cpp @@ -496,8 +496,12 @@ wxThread::ExitCode EmuThread::Entry() u32 fps = (nframes * 1000) / diff; nframes = 0; + float fpstarget; + if (framerate < 1) fpstarget = 999; + else fpstarget = 1000.0f/framerate; + char melontitle[100]; - sprintf(melontitle, "%d FPS - melonDS " MELONDS_VERSION, fps); + sprintf(melontitle, "%d/%.0f FPS | melonDS " MELONDS_VERSION, fps, fpstarget); SDL_SetWindowTitle(sdlwin, melontitle); } } |