more code botching

it's less shitty tho

but still has bugs
This commit is contained in:
Arisotura
2019-05-24 02:04:41 +02:00
parent e5236f0cde
commit 667dee6754
5 changed files with 166 additions and 233 deletions

View File

@ -22,6 +22,7 @@
#include "NDS.h" #include "NDS.h"
#include "GPU.h" #include "GPU.h"
#include "FIFO.h" #include "FIFO.h"
#include "Config.h"
// 3D engine notes // 3D engine notes
@ -610,12 +611,9 @@ void SetEnabled(bool geometry, bool rendering)
} }
int SetRenderer(int renderer) int InitRenderer(bool hasGL)
{ {
//if (renderer == Renderer) return renderer; int renderer = hasGL ? Config::_3DRenderer : 0;
//if (Renderer == 0) SoftRenderer::DeInit();
//else GLRenderer::DeInit();
if (renderer == 1) if (renderer == 1)
{ {
@ -629,6 +627,24 @@ int SetRenderer(int renderer)
return renderer; return renderer;
} }
void DeInitRenderer()
{
if (Renderer == 0) SoftRenderer::DeInit();
else GLRenderer::DeInit();
}
void UpdateRendererConfig()
{
if (Renderer == 0)
{
SoftRenderer::SetupRenderThread();
}
else
{
GLRenderer::UpdateDisplaySettings();
}
}
void MatrixLoadIdentity(s32* m) void MatrixLoadIdentity(s32* m)

View File

@ -90,6 +90,8 @@ extern u32 RenderNumPolygons;
extern u64 Timestamp; extern u64 Timestamp;
extern int Renderer;
bool Init(); bool Init();
void DeInit(); void DeInit();
void Reset(); void Reset();
@ -98,7 +100,9 @@ void DoSavestate(Savestate* file);
void SetEnabled(bool geometry, bool rendering); void SetEnabled(bool geometry, bool rendering);
int SetRenderer(int renderer); int InitRenderer(bool hasGL);
void DeInitRenderer();
void UpdateRendererConfig();
void ExecuteCommand(); void ExecuteCommand();
@ -111,7 +115,6 @@ void VCount144();
void VBlank(); void VBlank();
void VCount215(); void VCount215();
u32* GetLine(int line); u32* GetLine(int line);
void SetupAccelFrame();
void WriteToGXFIFO(u32 val); void WriteToGXFIFO(u32 val);
@ -144,7 +147,7 @@ bool Init();
void DeInit(); void DeInit();
void Reset(); void Reset();
void SetDisplaySettings(int scale, bool antialias); void UpdateDisplaySettings();
void RenderFrame(); void RenderFrame();
void PrepareCaptureFrame(); void PrepareCaptureFrame();

View File

@ -20,6 +20,7 @@
#include <string.h> #include <string.h>
#include "NDS.h" #include "NDS.h"
#include "GPU.h" #include "GPU.h"
#include "Config.h"
#include "OpenGLSupport.h" #include "OpenGLSupport.h"
#include "GPU3D_OpenGL_shaders.h" #include "GPU3D_OpenGL_shaders.h"
@ -362,10 +363,14 @@ void DeInit()
void Reset() void Reset()
{ {
UpdateDisplaySettings();
} }
void SetDisplaySettings(int scale, bool antialias) void UpdateDisplaySettings()
{ {
int scale = Config::GL_ScaleFactor;
bool antialias = false; //Config::GL_Antialias;
if (antialias) scale *= 2; if (antialias) scale *= 2;
ScaleFactor = scale; ScaleFactor = scale;
@ -950,7 +955,7 @@ u32* GetLine(int line)
} }
void SetupAccelFrame() void SetupAccelFrame()
{ {printf("morp %04X\n", glGetError());
glBindTexture(GL_TEXTURE_2D, FramebufferTex[FrontBuffer]); glBindTexture(GL_TEXTURE_2D, FramebufferTex[FrontBuffer]);
} }

View File

@ -83,13 +83,14 @@ void OnRendererChanged(uiRadioButtons* rb, void* blarg)
printf("RENDERER CHANGE: %d\n", id); printf("RENDERER CHANGE: %d\n", id);
Config::_3DRenderer = id; Config::_3DRenderer = id;
UpdateControls(); UpdateControls();
ApplyNewSettings(2); ApplyNewSettings(3);
} }
void OnGLDisplayChanged(uiCheckbox* cb, void* blarg) void OnGLDisplayChanged(uiCheckbox* cb, void* blarg)
{ {
Config::ScreenUseGL = uiCheckboxChecked(cb); Config::ScreenUseGL = uiCheckboxChecked(cb);
ApplyNewSettings(2); ApplyNewSettings(2);
uiControlSetFocus(uiControl(cb));
} }
void OnThreaded3DChanged(uiCheckbox* cb, void* blarg) void OnThreaded3DChanged(uiCheckbox* cb, void* blarg)
@ -103,21 +104,23 @@ void OnResolutionChanged(uiCombobox* cb, void* blarg)
int id = uiComboboxSelected(cb); int id = uiComboboxSelected(cb);
Config::GL_ScaleFactor = id+1; Config::GL_ScaleFactor = id+1;
ApplyNewSettings(3); ApplyNewSettings(0);
} }
void OnAntialiasChanged(uiCheckbox* cb, void* blarg) void OnAntialiasChanged(uiCheckbox* cb, void* blarg)
{ {
Config::GL_Antialias = uiCheckboxChecked(cb); Config::GL_Antialias = uiCheckboxChecked(cb);
ApplyNewSettings(3); ApplyNewSettings(0);
} }
void OnCancel(uiButton* btn, void* blarg) void OnCancel(uiButton* btn, void* blarg)
{ {
bool apply0 = false;
if (old_renderer != Config::_3DRenderer) if (old_renderer != Config::_3DRenderer)
{ {
Config::_3DRenderer = old_renderer; Config::_3DRenderer = old_renderer;
ApplyNewSettings(2); ApplyNewSettings(3);
} }
if (old_gldisplay != Config::ScreenUseGL) if (old_gldisplay != Config::ScreenUseGL)
@ -129,7 +132,7 @@ void OnCancel(uiButton* btn, void* blarg)
if (old_threaded3D != Config::Threaded3D) if (old_threaded3D != Config::Threaded3D)
{ {
Config::Threaded3D = old_threaded3D; Config::Threaded3D = old_threaded3D;
ApplyNewSettings(0); apply0 = true;
} }
if (old_resolution != Config::GL_ScaleFactor || if (old_resolution != Config::GL_ScaleFactor ||
@ -137,9 +140,11 @@ void OnCancel(uiButton* btn, void* blarg)
{ {
Config::GL_ScaleFactor = old_resolution; Config::GL_ScaleFactor = old_resolution;
Config::GL_Antialias = old_antialias; Config::GL_Antialias = old_antialias;
ApplyNewSettings(3); apply0 = true;
} }
if (apply0) ApplyNewSettings(0);
uiControlDestroy(uiControl(win)); uiControlDestroy(uiControl(win));
opened = false; opened = false;
} }

View File

@ -104,7 +104,6 @@ char PrevSRAMPath[1024]; // for savestate 'undo load'
bool SavestateLoaded; bool SavestateLoaded;
bool Screen_UseGL; bool Screen_UseGL;
int _3DRenderer;
bool ScreenDrawInited = false; bool ScreenDrawInited = false;
uiDrawBitmap* ScreenBitmap[2] = {NULL,NULL}; uiDrawBitmap* ScreenBitmap[2] = {NULL,NULL};
@ -164,6 +163,10 @@ void LoadState(int slot);
void UndoStateLoad(); void UndoStateLoad();
void GetSavestateName(int slot, char* filename, int len); void GetSavestateName(int slot, char* filename, int len);
void CreateMainWindow(bool opengl);
void DestroyMainWindow();
void RecreateMainWindow(bool opengl);
bool GLScreen_Init() bool GLScreen_Init()
@ -239,7 +242,7 @@ void GLScreen_DrawScreen()
GL_ShaderConfig.uScreenSize[0] = WindowWidth; GL_ShaderConfig.uScreenSize[0] = WindowWidth;
GL_ShaderConfig.uScreenSize[1] = WindowHeight; GL_ShaderConfig.uScreenSize[1] = WindowHeight;
GL_ShaderConfig.u3DScale = GL_3DScale; GL_ShaderConfig.u3DScale = GL_3DScale;
printf("updating GL scale: %d\n", GL_3DScale);
glBindBuffer(GL_UNIFORM_BUFFER, GL_ShaderConfigUBO); glBindBuffer(GL_UNIFORM_BUFFER, GL_ShaderConfigUBO);
void* unibuf = glMapBuffer(GL_UNIFORM_BUFFER, GL_WRITE_ONLY); void* unibuf = glMapBuffer(GL_UNIFORM_BUFFER, GL_WRITE_ONLY);
if (unibuf) memcpy(unibuf, &GL_ShaderConfig, sizeof(GL_ShaderConfig)); if (unibuf) memcpy(unibuf, &GL_ShaderConfig, sizeof(GL_ShaderConfig));
@ -381,7 +384,7 @@ printf("updating GL scale: %d\n", GL_3DScale);
GL_UNSIGNED_BYTE, GPU::Framebuffer[frontbuf][1]); GL_UNSIGNED_BYTE, GPU::Framebuffer[frontbuf][1]);
glActiveTexture(GL_TEXTURE1); glActiveTexture(GL_TEXTURE1);
if (_3DRenderer != 0) if (GPU3D::Renderer != 0)
GPU3D::GLRenderer::SetupAccelFrame(); GPU3D::GLRenderer::SetupAccelFrame();
glBindBuffer(GL_ARRAY_BUFFER, GL_ScreenVertexBufferID); glBindBuffer(GL_ARRAY_BUFFER, GL_ScreenVertexBufferID);
@ -392,89 +395,6 @@ printf("updating GL scale: %d\n", GL_3DScale);
uiGLSwapBuffers(GLContext); uiGLSwapBuffers(GLContext);
} }
void ScreenCreateArea(bool opengl)
{
bool opengl_good = opengl;
if (opengl_good)
{
MainDrawArea = uiNewGLArea(&MainDrawAreaHandler, kGLVersions);
uiWindowSetChild(MainWindow, uiControl(MainDrawArea));
uiControlSetMinSize(uiControl(MainDrawArea), 256, 384);
uiAreaSetBackgroundColor(MainDrawArea, 0, 0, 0);
GLContext = uiAreaGetGLContext(MainDrawArea);
if (!GLContext) opengl_good = false;
}
if (opengl_good)
{
uiGLMakeContextCurrent(GLContext);
if (!GLScreen_Init()) opengl_good = false;
}
if (opengl_good)
{
//if (_3DRenderer != 0)
{
_3DRenderer = GPU3D::SetRenderer(_3DRenderer);
if (_3DRenderer != 0)
GPU3D::GLRenderer::SetDisplaySettings(Config::GL_ScaleFactor, Config::GL_Antialias);
else if (RunningSomething)
GPU3D::SoftRenderer::SetupRenderThread();
}
uiGLMakeContextCurrent(NULL);
}
else
{
if (opengl)
{
uiWindowSetChild(MainWindow, NULL);
uiControlDestroy(uiControl(MainDrawArea));
}
Screen_UseGL = false;
MainDrawArea = uiNewArea(&MainDrawAreaHandler);
uiWindowSetChild(MainWindow, uiControl(MainDrawArea));
uiControlSetMinSize(uiControl(MainDrawArea), 256, 384);
uiAreaSetBackgroundColor(MainDrawArea, 0, 0, 0);
ScreenDrawInited = false;
}
uiControlShow(uiControl(MainWindow));
uiControlSetFocus(uiControl(MainDrawArea));
}
void ScreenSetMethod(bool opengl)
{
int oldstatus = EmuRunning;
EmuRunning = 3;
while (EmuStatus != 3);
if (Screen_UseGL)
{
uiGLMakeContextCurrent(GLContext);
if (_3DRenderer != 0) GPU3D::GLRenderer::DeInit();
else GPU3D::SoftRenderer::DeInit();
GLScreen_DeInit();
uiGLMakeContextCurrent(NULL);
}
else
{
if (ScreenBitmap[0]) uiDrawFreeBitmap(ScreenBitmap[0]);
if (ScreenBitmap[1]) uiDrawFreeBitmap(ScreenBitmap[1]);
}
uiWindowSetChild(MainWindow, NULL);
uiControlDestroy(uiControl(MainDrawArea));
Screen_UseGL = Config::ScreenUseGL;
_3DRenderer = Config::_3DRenderer;
ScreenCreateArea(opengl);
EmuRunning = oldstatus;
}
void MicLoadWav(char* name) void MicLoadWav(char* name)
{ {
SDL_AudioSpec format; SDL_AudioSpec format;
@ -730,12 +650,6 @@ void FeedMicInput()
int EmuThreadFunc(void* burp) int EmuThreadFunc(void* burp)
{ {
if (Screen_UseGL)
{
uiGLMakeContextCurrent(GLContext);
GLScreen_Init();
}
NDS::Init(); NDS::Init();
MainScreenPos[0] = 0; MainScreenPos[0] = 0;
@ -743,8 +657,18 @@ int EmuThreadFunc(void* burp)
MainScreenPos[2] = 0; MainScreenPos[2] = 0;
AutoScreenSizing = 0; AutoScreenSizing = 0;
GPU::SetDisplaySettings(_3DRenderer != 0); if (Screen_UseGL)
if (Screen_UseGL) uiGLMakeContextCurrent(NULL); {
uiGLMakeContextCurrent(GLContext);
GPU3D::InitRenderer(true);
GPU::SetDisplaySettings(GPU3D::Renderer != 0);
uiGLMakeContextCurrent(NULL);
}
else
{
GPU3D::InitRenderer(false);
GPU::SetDisplaySettings(false);
}
Touching = false; Touching = false;
KeyInputMask = 0xFFF; KeyInputMask = 0xFFF;
@ -895,10 +819,7 @@ int EmuThreadFunc(void* burp)
if (EmuRunning == 0) break; if (EmuRunning == 0) break;
if (Screen_UseGL) if (Screen_UseGL) GLScreen_DrawScreen();
{
GLScreen_DrawScreen();
}
uiAreaQueueRedrawAll(MainDrawArea); uiAreaQueueRedrawAll(MainDrawArea);
// framerate limiter based off SDL2_gfx // framerate limiter based off SDL2_gfx
@ -1731,7 +1652,7 @@ void OnCloseByMenu(uiMenuItem* item, uiWindow* window, void* blarg)
EmuRunning = 3; EmuRunning = 3;
while (EmuStatus != 3); while (EmuStatus != 3);
uiControlDestroy(uiControl(window)); DestroyMainWindow();
uiQuit(); uiQuit();
} }
@ -1851,22 +1772,10 @@ void OnOpenHotkeyConfig(uiMenuItem* item, uiWindow* window, void* blarg)
{ {
DlgInputConfig::Open(1); DlgInputConfig::Open(1);
} }
void zarg();
void OnOpenVideoSettings(uiMenuItem* item, uiWindow* window, void* blarg) void OnOpenVideoSettings(uiMenuItem* item, uiWindow* window, void* blarg)
{ {
//DlgVideoSettings::Open(); DlgVideoSettings::Open();
int zerp = EmuRunning;
EmuRunning = 3;
while (EmuStatus != 3);
int winX, winY;
uiWindowPosition(MainWindow, &winX, &winY);
uiControlDestroy(uiControl(window));
zarg();
uiWindowSetPosition(MainWindow, winX, winY);
EmuRunning = zerp;
} }
void OnOpenAudioSettings(uiMenuItem* item, uiWindow* window, void* blarg) void OnOpenAudioSettings(uiMenuItem* item, uiWindow* window, void* blarg)
@ -2037,23 +1946,18 @@ void OnSetLimitFPS(uiMenuItem* item, uiWindow* window, void* blarg)
void ApplyNewSettings(int type) void ApplyNewSettings(int type)
{ {
if (type == 2) if (!RunningSomething && type != 2) return;
{
bool usegl = Config::ScreenUseGL || (Config::_3DRenderer != 0);
ScreenSetMethod(usegl);
return;
}
if (!RunningSomething) return;
int prevstatus = EmuRunning; int prevstatus = EmuRunning;
EmuRunning = 3; EmuRunning = 3;
while (EmuStatus != 3); while (EmuStatus != 3);
if (type == 0) // software renderer thread if (type == 0) // 3D renderer settings
{ {
if (_3DRenderer == 0) GPU3D::UpdateRendererConfig();
GPU3D::SoftRenderer::SetupRenderThread();
GL_3DScale = Config::GL_ScaleFactor; // dorp
GL_ScreenSizeDirty = true;
} }
else if (type == 1) // wifi settings else if (type == 1) // wifi settings
{ {
@ -2066,19 +1970,36 @@ void ApplyNewSettings(int type)
Platform::LAN_DeInit(); Platform::LAN_DeInit();
Platform::LAN_Init(); Platform::LAN_Init();
} }
else if (type == 3) // GL renderer settings else if (type == 2) // video output method
{ {
GL_3DScale = Config::GL_ScaleFactor; bool usegl = Config::ScreenUseGL || (Config::_3DRenderer != 0);
if (usegl != Screen_UseGL)
{
Screen_UseGL = usegl;
if (_3DRenderer != 0) if (RunningSomething)
{ {
uiGLMakeContextCurrent(GLContext); if (usegl) uiGLMakeContextCurrent(GLContext);
printf("%04X\n", glGetError()); GPU3D::DeInitRenderer();
printf("%04X\n", glGetError()); if (usegl) uiGLMakeContextCurrent(NULL);
GPU3D::GLRenderer::SetDisplaySettings(Config::GL_ScaleFactor, Config::GL_Antialias);
uiGLMakeContextCurrent(NULL);
GL_ScreenSizeDirty = true;
} }
RecreateMainWindow(usegl);
if (RunningSomething)
{
if (Screen_UseGL) uiGLMakeContextCurrent(GLContext);
GPU3D::InitRenderer(Screen_UseGL);
if (Screen_UseGL) uiGLMakeContextCurrent(NULL);
}
}
}
else if (type == 3) // 3D renderer
{
if (Screen_UseGL) uiGLMakeContextCurrent(GLContext);
GPU3D::DeInitRenderer();
GPU3D::InitRenderer(Screen_UseGL);
if (Screen_UseGL) uiGLMakeContextCurrent(NULL);
} }
EmuRunning = prevstatus; EmuRunning = prevstatus;
@ -2251,24 +2172,11 @@ void CreateMainWindowMenu()
uiMenuItemOnClicked(MenuItem_LimitFPS, OnSetLimitFPS, NULL); uiMenuItemOnClicked(MenuItem_LimitFPS, OnSetLimitFPS, NULL);
} }
void zarg() void CreateMainWindow(bool opengl)
{ {
int w = Config::WindowWidth; MainWindow = uiNewWindow("melonDS " MELONDS_VERSION,
int h = Config::WindowHeight; WindowWidth, WindowHeight,
//if (w < 256) w = 256; Config::WindowMaximized, 1, 1);
//if (h < 384) h = 384;
WindowWidth = w;
WindowHeight = h;
Screen_UseGL = Config::ScreenUseGL || (Config::_3DRenderer != 0);
_3DRenderer = Config::_3DRenderer;
GL_3DScale = Config::GL_ScaleFactor;
if (GL_3DScale < 1) GL_3DScale = 1;
else if (GL_3DScale > 8) GL_3DScale = 8;
MainWindow = uiNewWindow("melonDS " MELONDS_VERSION, w, h, Config::WindowMaximized, 1, 1);
uiWindowOnClosing(MainWindow, OnCloseWindow, NULL); uiWindowOnClosing(MainWindow, OnCloseWindow, NULL);
uiWindowSetDropTarget(MainWindow, 1); uiWindowSetDropTarget(MainWindow, 1);
@ -2277,40 +2185,57 @@ void zarg()
uiWindowOnGetFocus(MainWindow, OnGetFocus, NULL); uiWindowOnGetFocus(MainWindow, OnGetFocus, NULL);
uiWindowOnLoseFocus(MainWindow, OnLoseFocus, NULL); uiWindowOnLoseFocus(MainWindow, OnLoseFocus, NULL);
MainDrawAreaHandler.Draw = OnAreaDraw;
MainDrawAreaHandler.MouseEvent = OnAreaMouseEvent;
MainDrawAreaHandler.MouseCrossed = OnAreaMouseCrossed;
MainDrawAreaHandler.DragBroken = OnAreaDragBroken;
MainDrawAreaHandler.KeyEvent = OnAreaKeyEvent;
MainDrawAreaHandler.Resize = OnAreaResize;
ScreenDrawInited = false; ScreenDrawInited = false;
ScreenCreateArea(Screen_UseGL); bool opengl_good = opengl;
ScreenRotation = Config::ScreenRotation; if (!opengl) MainDrawArea = uiNewArea(&MainDrawAreaHandler);
ScreenGap = Config::ScreenGap; else MainDrawArea = uiNewGLArea(&MainDrawAreaHandler, kGLVersions);
ScreenLayout = Config::ScreenLayout;
ScreenSizing = Config::ScreenSizing;
#define SANITIZE(var, min, max) if ((var < min) || (var > max)) var = 0; uiWindowSetChild(MainWindow, uiControl(MainDrawArea));
SANITIZE(ScreenRotation, 0, 3); uiControlSetMinSize(uiControl(MainDrawArea), 256, 384);
SANITIZE(ScreenLayout, 0, 2); uiAreaSetBackgroundColor(MainDrawArea, 0, 0, 0);
SANITIZE(ScreenSizing, 0, 3);
#undef SANITIZE
/*uiMenuItemSetChecked(MenuItem_SavestateSRAMReloc, Config::SavestateRelocSRAM?1:0); uiControlShow(uiControl(MainWindow));
uiControlSetFocus(uiControl(MainDrawArea));
uiMenuItemSetChecked(MenuItem_ScreenRot[ScreenRotation], 1); if (opengl_good)
uiMenuItemSetChecked(MenuItem_ScreenLayout[ScreenLayout], 1);
uiMenuItemSetChecked(MenuItem_ScreenSizing[ScreenSizing], 1);
for (int i = 0; i < 6; i++)
{ {
if (ScreenGap == kScreenGap[i]) GLContext = uiAreaGetGLContext(MainDrawArea);
uiMenuItemSetChecked(MenuItem_ScreenGap[i], 1); if (!GLContext) opengl_good = false;
}*/ }
if (opengl_good)
{
uiGLMakeContextCurrent(GLContext);
if (!GLScreen_Init()) opengl_good = false;
uiGLMakeContextCurrent(NULL);
}
OnSetScreenRotation(MenuItem_ScreenRot[ScreenRotation], MainWindow, (void*)&kScreenRot[ScreenRotation]); if (opengl && !opengl_good)
{
printf("OpenGL: initialization failed\n");
RecreateMainWindow(false);
Screen_UseGL = false;
}
}
void DestroyMainWindow()
{
uiControlDestroy(uiControl(MainWindow));
if (ScreenBitmap[0]) uiDrawFreeBitmap(ScreenBitmap[0]);
if (ScreenBitmap[1]) uiDrawFreeBitmap(ScreenBitmap[1]);
ScreenBitmap[0] = NULL;
ScreenBitmap[1] = NULL;
}
void RecreateMainWindow(bool opengl)
{
int winX, winY;
uiWindowPosition(MainWindow, &winX, &winY);
DestroyMainWindow();
CreateMainWindow(opengl);
uiWindowSetPosition(MainWindow, winX, winY);
} }
@ -2417,40 +2342,6 @@ int main(int argc, char** argv)
CreateMainWindowMenu(); CreateMainWindowMenu();
int w = Config::WindowWidth;
int h = Config::WindowHeight;
//if (w < 256) w = 256;
//if (h < 384) h = 384;
WindowWidth = w;
WindowHeight = h;
Screen_UseGL = Config::ScreenUseGL || (Config::_3DRenderer != 0);
_3DRenderer = Config::_3DRenderer;
GL_3DScale = Config::GL_ScaleFactor;
if (GL_3DScale < 1) GL_3DScale = 1;
else if (GL_3DScale > 8) GL_3DScale = 8;
MainWindow = uiNewWindow("melonDS " MELONDS_VERSION, w, h, Config::WindowMaximized, 1, 1);
uiWindowOnClosing(MainWindow, OnCloseWindow, NULL);
uiWindowSetDropTarget(MainWindow, 1);
uiWindowOnDropFile(MainWindow, OnDropFile, NULL);
uiWindowOnGetFocus(MainWindow, OnGetFocus, NULL);
uiWindowOnLoseFocus(MainWindow, OnLoseFocus, NULL);
//uiMenuItemDisable(MenuItem_SaveState);
//uiMenuItemDisable(MenuItem_LoadState);
for (int i = 0; i < 9; i++) uiMenuItemDisable(MenuItem_SaveStateSlot[i]);
for (int i = 0; i < 9; i++) uiMenuItemDisable(MenuItem_LoadStateSlot[i]);
uiMenuItemDisable(MenuItem_UndoStateLoad);
uiMenuItemDisable(MenuItem_Pause);
uiMenuItemDisable(MenuItem_Reset);
uiMenuItemDisable(MenuItem_Stop);
MainDrawAreaHandler.Draw = OnAreaDraw; MainDrawAreaHandler.Draw = OnAreaDraw;
MainDrawAreaHandler.MouseEvent = OnAreaMouseEvent; MainDrawAreaHandler.MouseEvent = OnAreaMouseEvent;
MainDrawAreaHandler.MouseCrossed = OnAreaMouseCrossed; MainDrawAreaHandler.MouseCrossed = OnAreaMouseCrossed;
@ -2458,8 +2349,16 @@ int main(int argc, char** argv)
MainDrawAreaHandler.KeyEvent = OnAreaKeyEvent; MainDrawAreaHandler.KeyEvent = OnAreaKeyEvent;
MainDrawAreaHandler.Resize = OnAreaResize; MainDrawAreaHandler.Resize = OnAreaResize;
ScreenDrawInited = false; WindowWidth = Config::WindowWidth;
ScreenCreateArea(Screen_UseGL); WindowHeight = Config::WindowHeight;
Screen_UseGL = Config::ScreenUseGL || (Config::_3DRenderer != 0);
GL_3DScale = Config::GL_ScaleFactor;
if (GL_3DScale < 1) GL_3DScale = 1;
else if (GL_3DScale > 8) GL_3DScale = 8;
CreateMainWindow(Screen_UseGL);
ScreenRotation = Config::ScreenRotation; ScreenRotation = Config::ScreenRotation;
ScreenGap = Config::ScreenGap; ScreenGap = Config::ScreenGap;
@ -2472,6 +2371,14 @@ int main(int argc, char** argv)
SANITIZE(ScreenSizing, 0, 3); SANITIZE(ScreenSizing, 0, 3);
#undef SANITIZE #undef SANITIZE
for (int i = 0; i < 9; i++) uiMenuItemDisable(MenuItem_SaveStateSlot[i]);
for (int i = 0; i < 9; i++) uiMenuItemDisable(MenuItem_LoadStateSlot[i]);
uiMenuItemDisable(MenuItem_UndoStateLoad);
uiMenuItemDisable(MenuItem_Pause);
uiMenuItemDisable(MenuItem_Reset);
uiMenuItemDisable(MenuItem_Stop);
uiMenuItemSetChecked(MenuItem_SavestateSRAMReloc, Config::SavestateRelocSRAM?1:0); uiMenuItemSetChecked(MenuItem_SavestateSRAMReloc, Config::SavestateRelocSRAM?1:0);
uiMenuItemSetChecked(MenuItem_ScreenRot[ScreenRotation], 1); uiMenuItemSetChecked(MenuItem_ScreenRot[ScreenRotation], 1);
@ -2575,9 +2482,6 @@ int main(int argc, char** argv)
Config::Save(); Config::Save();
if (ScreenBitmap[0]) uiDrawFreeBitmap(ScreenBitmap[0]);
if (ScreenBitmap[1]) uiDrawFreeBitmap(ScreenBitmap[1]);
uiUninit(); uiUninit();
SDL_Quit(); SDL_Quit();
delete[] EmuDirectory; delete[] EmuDirectory;