mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2025-07-21 05:09:46 -06:00
resolution switch somewhat functional
This commit is contained in:
@ -1489,8 +1489,8 @@ void GPU2D::DrawBG_3D()
|
|||||||
{
|
{
|
||||||
for (; i < iend; i++)
|
for (; i < iend; i++)
|
||||||
{
|
{
|
||||||
int is = i << 1;
|
int is = i << 2;
|
||||||
int xs = xoff << 1;
|
int xs = xoff << 2;
|
||||||
u32 c;
|
u32 c;
|
||||||
|
|
||||||
xoff++;
|
xoff++;
|
||||||
@ -1511,8 +1511,8 @@ void GPU2D::DrawBG_3D()
|
|||||||
xs++;
|
xs++;
|
||||||
}
|
}
|
||||||
|
|
||||||
is += 1021;
|
is += 1020;
|
||||||
xs += 1021;
|
xs += 1020;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
#include "DlgVideoSettings.h"
|
#include "DlgVideoSettings.h"
|
||||||
|
|
||||||
|
|
||||||
//
|
void ApplyNewSettings(int type);
|
||||||
|
|
||||||
|
|
||||||
namespace DlgVideoSettings
|
namespace DlgVideoSettings
|
||||||
@ -50,7 +50,8 @@ void OnResolutionChanged(uiRadioButtons* rb, void* blarg)
|
|||||||
{
|
{
|
||||||
int id = uiRadioButtonsSelected(rb);
|
int id = uiRadioButtonsSelected(rb);
|
||||||
|
|
||||||
printf("res=%d\n", id);
|
Config::ScreenScale = id;
|
||||||
|
ApplyNewSettings(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnCancel(uiButton* btn, void* blarg)
|
void OnCancel(uiButton* btn, void* blarg)
|
||||||
@ -167,8 +168,8 @@ void Open()
|
|||||||
uiRadioButtons* rbApplyScalingTo = uiNewRadioButtons();
|
uiRadioButtons* rbApplyScalingTo = uiNewRadioButtons();
|
||||||
uiRadioButtonsAppend(rbApplyScalingTo, "Both screens");
|
uiRadioButtonsAppend(rbApplyScalingTo, "Both screens");
|
||||||
uiRadioButtonsAppend(rbApplyScalingTo, "Emphasized screen (see 'Screen sizing')");
|
uiRadioButtonsAppend(rbApplyScalingTo, "Emphasized screen (see 'Screen sizing')");
|
||||||
uiRadioButtonsAppend(rbApplyScalingTo, "Top screen");
|
//uiRadioButtonsAppend(rbApplyScalingTo, "Top screen");
|
||||||
uiRadioButtonsAppend(rbApplyScalingTo, "Bottom screen");
|
//uiRadioButtonsAppend(rbApplyScalingTo, "Bottom screen");
|
||||||
uiBoxAppend(in_ctrl, uiControl(rbApplyScalingTo), 0);
|
uiBoxAppend(in_ctrl, uiControl(rbApplyScalingTo), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,10 +96,9 @@ bool SavestateLoaded;
|
|||||||
|
|
||||||
bool ScreenDrawInited = false;
|
bool ScreenDrawInited = false;
|
||||||
uiDrawBitmap* ScreenBitmap[2] = {NULL,NULL};
|
uiDrawBitmap* ScreenBitmap[2] = {NULL,NULL};
|
||||||
SDL_mutex* ScreenMutex;
|
|
||||||
u32* ScreenBuffer;
|
|
||||||
|
|
||||||
int ScreenScale;
|
int ScreenScale[3];
|
||||||
|
int ScreenScaleMode;
|
||||||
|
|
||||||
int ScreenGap = 0;
|
int ScreenGap = 0;
|
||||||
int ScreenLayout = 0;
|
int ScreenLayout = 0;
|
||||||
@ -400,13 +399,18 @@ int EmuThreadFunc(void* burp)
|
|||||||
uiGLMakeContextCurrent(GLContext);
|
uiGLMakeContextCurrent(GLContext);
|
||||||
NDS::Init();
|
NDS::Init();
|
||||||
|
|
||||||
ScreenBuffer = new u32[(256*ScreenScale) * (384*ScreenScale)];
|
|
||||||
|
|
||||||
MainScreenPos[0] = 0;
|
MainScreenPos[0] = 0;
|
||||||
MainScreenPos[1] = 0;
|
MainScreenPos[1] = 0;
|
||||||
MainScreenPos[2] = 0;
|
MainScreenPos[2] = 0;
|
||||||
AutoScreenSizing = 0;
|
AutoScreenSizing = 0;
|
||||||
|
|
||||||
|
// FIXME
|
||||||
|
ScreenScale[2] = Config::ScreenScale;
|
||||||
|
ScreenScale[0] = ScreenScale[2];
|
||||||
|
ScreenScale[1] = ScreenScale[2];
|
||||||
|
|
||||||
|
int lastscale[2] = {-1, -1};
|
||||||
|
|
||||||
Touching = false;
|
Touching = false;
|
||||||
KeyInputMask = 0xFFF;
|
KeyInputMask = 0xFFF;
|
||||||
HotkeyMask = 0;
|
HotkeyMask = 0;
|
||||||
@ -522,11 +526,6 @@ int EmuThreadFunc(void* burp)
|
|||||||
// microphone input
|
// microphone input
|
||||||
FeedMicInput();
|
FeedMicInput();
|
||||||
|
|
||||||
// emulate
|
|
||||||
u32 nlines = NDS::RunFrame();
|
|
||||||
|
|
||||||
if (EmuRunning == 0) break;
|
|
||||||
|
|
||||||
// auto screen layout
|
// auto screen layout
|
||||||
{
|
{
|
||||||
MainScreenPos[2] = MainScreenPos[1];
|
MainScreenPos[2] = MainScreenPos[1];
|
||||||
@ -556,7 +555,18 @@ int EmuThreadFunc(void* burp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//memcpy(ScreenBuffer, GPU::Framebuffer, (256*ScreenScale)*(384*ScreenScale)*4);
|
if (ScreenScale[0] != lastscale[0] ||
|
||||||
|
ScreenScale[1] != lastscale[1])
|
||||||
|
{
|
||||||
|
GPU::SetFramebufferScale(ScreenScale[0], ScreenScale[1]);
|
||||||
|
ScreenDrawInited = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// emulate
|
||||||
|
u32 nlines = NDS::RunFrame();
|
||||||
|
|
||||||
|
if (EmuRunning == 0) break;
|
||||||
|
|
||||||
uiAreaQueueRedrawAll(MainDrawArea);
|
uiAreaQueueRedrawAll(MainDrawArea);
|
||||||
|
|
||||||
// framerate limiter based off SDL2_gfx
|
// framerate limiter based off SDL2_gfx
|
||||||
@ -622,8 +632,6 @@ int EmuThreadFunc(void* burp)
|
|||||||
|
|
||||||
if (joybuttons) delete[] joybuttons;
|
if (joybuttons) delete[] joybuttons;
|
||||||
|
|
||||||
delete[] ScreenBuffer;
|
|
||||||
|
|
||||||
NDS::DeInit();
|
NDS::DeInit();
|
||||||
Platform::LAN_DeInit();
|
Platform::LAN_DeInit();
|
||||||
|
|
||||||
@ -636,16 +644,19 @@ void OnAreaDraw(uiAreaHandler* handler, uiArea* area, uiAreaDrawParams* params)
|
|||||||
// TODO: recreate bitmap if screen scale changed
|
// TODO: recreate bitmap if screen scale changed
|
||||||
if (!ScreenDrawInited)
|
if (!ScreenDrawInited)
|
||||||
{
|
{
|
||||||
|
if (ScreenBitmap[0]) uiDrawFreeBitmap(ScreenBitmap[0]);
|
||||||
|
if (ScreenBitmap[1]) uiDrawFreeBitmap(ScreenBitmap[1]);
|
||||||
|
|
||||||
ScreenDrawInited = true;
|
ScreenDrawInited = true;
|
||||||
ScreenBitmap[0] = uiDrawNewBitmap(params->Context, 256*ScreenScale, 192*ScreenScale);
|
ScreenBitmap[0] = uiDrawNewBitmap(params->Context, 256<<ScreenScale[0], 192<<ScreenScale[0]);
|
||||||
ScreenBitmap[1] = uiDrawNewBitmap(params->Context, 256*ScreenScale, 192*ScreenScale);
|
ScreenBitmap[1] = uiDrawNewBitmap(params->Context, 256<<ScreenScale[1], 192<<ScreenScale[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ScreenBitmap[0] || !ScreenBitmap[1]) return;
|
if (!ScreenBitmap[0] || !ScreenBitmap[1]) return;
|
||||||
if (!GPU::Framebuffer[0][0]) return;
|
if (!GPU::Framebuffer[0][0]) return;
|
||||||
|
|
||||||
uiRect top = {0, 0, 256*ScreenScale, 192*ScreenScale};
|
uiRect top = {0, 0, 256<<ScreenScale[0], 192<<ScreenScale[0]};
|
||||||
uiRect bot = {0, 0, 256*ScreenScale, 192*ScreenScale};
|
uiRect bot = {0, 0, 256<<ScreenScale[1], 192<<ScreenScale[1]};
|
||||||
|
|
||||||
int frontbuf = GPU::FrontBuffer;
|
int frontbuf = GPU::FrontBuffer;
|
||||||
uiDrawBitmapUpdate(ScreenBitmap[0], GPU::Framebuffer[frontbuf][0]);
|
uiDrawBitmapUpdate(ScreenBitmap[0], GPU::Framebuffer[frontbuf][0]);
|
||||||
@ -830,10 +841,34 @@ void SetupScreenRects(int width, int height)
|
|||||||
screenH = 192;
|
screenH = 192;
|
||||||
}
|
}
|
||||||
|
|
||||||
gap = ScreenGap;
|
if (ScreenScaleMode == 0 || sizemode == 0)
|
||||||
|
{
|
||||||
|
// scale both screens
|
||||||
|
screenW <<= ScreenScale[2];
|
||||||
|
screenH <<= ScreenScale[2];
|
||||||
|
|
||||||
screenW *= ScreenScale;
|
ScreenScale[0] = ScreenScale[2];
|
||||||
screenH *= ScreenScale;
|
ScreenScale[1] = ScreenScale[2];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// scale emphasized screen
|
||||||
|
// screenW/screenH will apply to the non-emphasized screen
|
||||||
|
// the emphasized screen basically taking up all the remaining space
|
||||||
|
|
||||||
|
if (sizemode == 1)
|
||||||
|
{
|
||||||
|
ScreenScale[0] = ScreenScale[2];
|
||||||
|
ScreenScale[1] = 0;
|
||||||
|
}
|
||||||
|
else if (sizemode == 2)
|
||||||
|
{
|
||||||
|
ScreenScale[0] = 0;
|
||||||
|
ScreenScale[1] = ScreenScale[2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gap = ScreenGap;
|
||||||
|
|
||||||
uiRect *topscreen, *bottomscreen;
|
uiRect *topscreen, *bottomscreen;
|
||||||
if (ScreenRotation == 1 || ScreenRotation == 2)
|
if (ScreenRotation == 1 || ScreenRotation == 2)
|
||||||
@ -1111,7 +1146,6 @@ void Stop(bool internal)
|
|||||||
uiMenuItemDisable(MenuItem_Stop);
|
uiMenuItemDisable(MenuItem_Stop);
|
||||||
uiMenuItemSetChecked(MenuItem_Pause, 0);
|
uiMenuItemSetChecked(MenuItem_Pause, 0);
|
||||||
|
|
||||||
memset(ScreenBuffer, 0, 256*384*4);
|
|
||||||
uiAreaQueueRedrawAll(MainDrawArea);
|
uiAreaQueueRedrawAll(MainDrawArea);
|
||||||
|
|
||||||
SDL_PauseAudioDevice(AudioDevice, 1);
|
SDL_PauseAudioDevice(AudioDevice, 1);
|
||||||
@ -1530,10 +1564,16 @@ void EnsureProperMinSize()
|
|||||||
{
|
{
|
||||||
bool isHori = (ScreenRotation == 1 || ScreenRotation == 3);
|
bool isHori = (ScreenRotation == 1 || ScreenRotation == 3);
|
||||||
|
|
||||||
int w0 = 256 * ScreenScale;
|
int w0 = 256 << ScreenScale[2];
|
||||||
int h0 = 192 * ScreenScale;
|
int h0 = 192 << ScreenScale[2];
|
||||||
int w1 = 256 * ScreenScale;
|
int w1 = 256;
|
||||||
int h1 = 192 * ScreenScale;
|
int h1 = 192;
|
||||||
|
|
||||||
|
if (ScreenScale[2] != 0 && (ScreenScaleMode != 1 || ScreenSizing == 0 || ScreenSizing == 3))
|
||||||
|
{
|
||||||
|
w1 <<= ScreenScale[2];
|
||||||
|
h1 <<= ScreenScale[2];
|
||||||
|
}
|
||||||
|
|
||||||
if (ScreenLayout == 0) // natural
|
if (ScreenLayout == 0) // natural
|
||||||
{
|
{
|
||||||
@ -1563,8 +1603,8 @@ void OnSetScreenSize(uiMenuItem* item, uiWindow* window, void* param)
|
|||||||
int factor = *(int*)param;
|
int factor = *(int*)param;
|
||||||
bool isHori = (ScreenRotation == 1 || ScreenRotation == 3);
|
bool isHori = (ScreenRotation == 1 || ScreenRotation == 3);
|
||||||
|
|
||||||
int w = 256*factor * ScreenScale;
|
int w = 256*factor;// * ScreenScale;
|
||||||
int h = 192*factor * ScreenScale;
|
int h = 192*factor;// * ScreenScale;
|
||||||
|
|
||||||
// FIXME
|
// FIXME
|
||||||
|
|
||||||
@ -1701,7 +1741,14 @@ void ApplyNewSettings(int type)
|
|||||||
}
|
}
|
||||||
else if (type == 2) // upscaling/video settings
|
else if (type == 2) // upscaling/video settings
|
||||||
{
|
{
|
||||||
//
|
int scale = Config::ScreenScale;
|
||||||
|
if (scale != ScreenScale[2])
|
||||||
|
{
|
||||||
|
ScreenScale[2] = scale;
|
||||||
|
|
||||||
|
EnsureProperMinSize();
|
||||||
|
SetupScreenRects(WindowWidth, WindowHeight);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EmuRunning = prevstatus;
|
EmuRunning = prevstatus;
|
||||||
@ -1984,7 +2031,7 @@ int main(int argc, char** argv)
|
|||||||
WindowHeight = h;
|
WindowHeight = h;
|
||||||
|
|
||||||
//ScreenScale = 1;
|
//ScreenScale = 1;
|
||||||
ScreenScale = 2; // HAW HAW HAW
|
ScreenScale[2] = 0; // FIXME
|
||||||
|
|
||||||
MainWindow = uiNewWindow("melonDS " MELONDS_VERSION, w, h, Config::WindowMaximized, 1, 1);
|
MainWindow = uiNewWindow("melonDS " MELONDS_VERSION, w, h, Config::WindowMaximized, 1, 1);
|
||||||
uiWindowOnClosing(MainWindow, OnCloseWindow, NULL);
|
uiWindowOnClosing(MainWindow, OnCloseWindow, NULL);
|
||||||
@ -2005,8 +2052,6 @@ int main(int argc, char** argv)
|
|||||||
uiMenuItemDisable(MenuItem_Reset);
|
uiMenuItemDisable(MenuItem_Reset);
|
||||||
uiMenuItemDisable(MenuItem_Stop);
|
uiMenuItemDisable(MenuItem_Stop);
|
||||||
|
|
||||||
ScreenMutex = SDL_CreateMutex();
|
|
||||||
|
|
||||||
uiAreaHandler areahandler;
|
uiAreaHandler areahandler;
|
||||||
areahandler.Draw = OnAreaDraw;
|
areahandler.Draw = OnAreaDraw;
|
||||||
areahandler.MouseEvent = OnAreaMouseEvent;
|
areahandler.MouseEvent = OnAreaMouseEvent;
|
||||||
@ -2145,8 +2190,6 @@ int main(int argc, char** argv)
|
|||||||
|
|
||||||
Config::Save();
|
Config::Save();
|
||||||
|
|
||||||
SDL_DestroyMutex(ScreenMutex);
|
|
||||||
|
|
||||||
if (ScreenBitmap[0]) uiDrawFreeBitmap(ScreenBitmap[0]);
|
if (ScreenBitmap[0]) uiDrawFreeBitmap(ScreenBitmap[0]);
|
||||||
if (ScreenBitmap[1]) uiDrawFreeBitmap(ScreenBitmap[1]);
|
if (ScreenBitmap[1]) uiDrawFreeBitmap(ScreenBitmap[1]);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user