aboutsummaryrefslogtreecommitdiff
path: root/src/GPU.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/GPU.cpp')
-rw-r--r--src/GPU.cpp32
1 files changed, 24 insertions, 8 deletions
diff --git a/src/GPU.cpp b/src/GPU.cpp
index ad39007..f272129 100644
--- a/src/GPU.cpp
+++ b/src/GPU.cpp
@@ -71,7 +71,9 @@ u32 VRAMMap_TexPal[8];
u32 VRAMMap_ARM7[2];
-u32 Framebuffer[256*192*2];
+u32* Framebuffer;
+int FBScale;
+int FBScreenStride;
GPU2D* GPU2D_A;
GPU2D* GPU2D_B;
@@ -83,6 +85,9 @@ bool Init()
GPU2D_B = new GPU2D(1);
if (!GPU3D::Init()) return false;
+ //SetFramebufferScale(1);
+ SetFramebufferScale(2);
+
return true;
}
@@ -91,6 +96,8 @@ void DeInit()
delete GPU2D_A;
delete GPU2D_B;
GPU3D::DeInit();
+
+ if (Framebuffer) delete[] Framebuffer;
}
void Reset()
@@ -147,13 +154,13 @@ void Reset()
GPU2D_B->Reset();
GPU3D::Reset();
- GPU2D_A->SetFramebuffer(&Framebuffer[256*192]);
- GPU2D_B->SetFramebuffer(&Framebuffer[256*0]);
+ GPU2D_A->SetFramebuffer(&Framebuffer[FBScreenStride]);
+ GPU2D_B->SetFramebuffer(&Framebuffer[0]);
}
void Stop()
{
- memset(Framebuffer, 0, 256*192*2*4);
+ memset(Framebuffer, 0, FBScreenStride*2*sizeof(u32));
}
void DoSavestate(Savestate* file)
@@ -208,6 +215,15 @@ void DoSavestate(Savestate* file)
GPU3D::DoSavestate(file);
}
+void SetFramebufferScale(int scale)
+{
+ FBScale = scale;
+ FBScreenStride = (256*scale) * (192*scale);
+
+ if (Framebuffer) delete[] Framebuffer;
+ Framebuffer = new u32[FBScreenStride * 2];
+}
+
// VRAM mapping notes
//
@@ -668,13 +684,13 @@ void SetPowerCnt(u32 val)
if (val & (1<<15))
{
- GPU2D_A->SetFramebuffer(&Framebuffer[256*0]);
- GPU2D_B->SetFramebuffer(&Framebuffer[256*192]);
+ GPU2D_A->SetFramebuffer(&Framebuffer[0]);
+ GPU2D_B->SetFramebuffer(&Framebuffer[FBScreenStride]);
}
else
{
- GPU2D_A->SetFramebuffer(&Framebuffer[256*192]);
- GPU2D_B->SetFramebuffer(&Framebuffer[256*0]);
+ GPU2D_A->SetFramebuffer(&Framebuffer[FBScreenStride]);
+ GPU2D_B->SetFramebuffer(&Framebuffer[0]);
}
}