diff --git a/source/common/platform/win32/i_main.cpp b/source/common/platform/win32/i_main.cpp index e92867ba2..f0bacc0b7 100644 --- a/source/common/platform/win32/i_main.cpp +++ b/source/common/platform/win32/i_main.cpp @@ -41,6 +41,9 @@ #include #include +#include +#include + #ifdef _MSC_VER #pragma warning(disable:4244) #endif @@ -189,14 +192,21 @@ static void UnWTS (void) static int LayoutErrorPane (HWND pane, int w) { - HWND ctl; - RECT rectc; + HWND ctl, ctl_two; + RECT rectc, rectc_two; // Right-align the Quit button. ctl = GetDlgItem (pane, IDOK); GetClientRect (ctl, &rectc); // Find out how big it is. MoveWindow (ctl, w - rectc.right - 1, 1, rectc.right, rectc.bottom, TRUE); + + // Second-right-align the Restart button + ctl_two = GetDlgItem (pane, IDC_BUTTON1); + GetClientRect (ctl_two, &rectc_two); // Find out how big it is. + MoveWindow (ctl_two, w - rectc.right - rectc_two.right - 2, 1, rectc.right, rectc.bottom, TRUE); + InvalidateRect (ctl, NULL, TRUE); + InvalidateRect (ctl_two, NULL, TRUE); // Return the needed height for this layout return rectc.bottom + 2; @@ -545,9 +555,16 @@ INT_PTR CALLBACK ErrorPaneProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lPara return TRUE; case WM_COMMAND: - // There is only one button, and it's "Ok" and makes us quit. if (HIWORD(wParam) == BN_CLICKED) { + if (LOWORD(wParam) == IDC_BUTTON1) // we pressed the restart button, so run GZDoom again + { + HMODULE hModule = GetModuleHandleW(NULL); + WCHAR path[MAX_PATH]; + GetModuleFileNameW(hModule, path, MAX_PATH); + + ShellExecuteW(NULL, L"open", path, GetCommandLineW(), NULL, SW_SHOWNORMAL); + } PostQuitMessage (0); return TRUE; } diff --git a/source/glbackend/gl_palmanager.cpp b/source/glbackend/gl_palmanager.cpp index 9186dbea7..79ee99ae1 100644 --- a/source/glbackend/gl_palmanager.cpp +++ b/source/glbackend/gl_palmanager.cpp @@ -43,6 +43,7 @@ #include "v_font.h" #include "palette.h" #include "build.h" +#include "v_video.h" //=========================================================================== // @@ -100,7 +101,7 @@ void PaletteManager::BindPalette(int index) if (palettetextures[index] == nullptr) { - auto p = GLInterface.NewTexture(4); + auto p = screen->CreateHardwareTexture(4); p->CreateTexture((uint8_t*)palettedata->Palette, 256, 1, 15, false, "Palette"); palettetextures[index] = p; } @@ -126,7 +127,7 @@ void PaletteManager::BindPalswap(int index) lastsindex = index; if (palswaptextures[index] == nullptr) { - auto p = GLInterface.NewTexture(1); + auto p = screen->CreateHardwareTexture(1); // Perform a 0<->255 index swap. The lookup tables are still the original data. TArray lookup(numshades * 256, true); diff --git a/source/glbackend/gl_texture.cpp b/source/glbackend/gl_texture.cpp index b9e1f44a3..fbe3f95ad 100644 --- a/source/glbackend/gl_texture.cpp +++ b/source/glbackend/gl_texture.cpp @@ -50,17 +50,6 @@ // //=========================================================================== -OpenGLRenderer::FHardwareTexture* GLInstance::LoadTexture(FTexture *tex, int textype, int palid) -{ - if (textype == TT_INDEXED) palid = -1; - auto phwtex = tex->SystemTextures.GetHardwareTexture(palid, false); - if (phwtex) return (OpenGLRenderer::FHardwareTexture*)phwtex; - - auto hwtex = static_cast(screen->CreateHardwareTexture(textype == TT_INDEXED? 1:4)); - if (hwtex) tex->SystemTextures.AddHardwareTexture(palid, false, hwtex); - return hwtex; -} - bool GLInstance::SetTexture(int picnum, FGameTexture* tex, int paletteid, int sampler) { TexturePick texpick; diff --git a/source/glbackend/glbackend.cpp b/source/glbackend/glbackend.cpp index 4ba6f4cf8..aa3a6b5e6 100644 --- a/source/glbackend/glbackend.cpp +++ b/source/glbackend/glbackend.cpp @@ -96,11 +96,6 @@ void GLInstance::Deinit() lastPalswapIndex = -1; } -OpenGLRenderer::FHardwareTexture* GLInstance::NewTexture(int numchannels) -{ - return new OpenGLRenderer::FHardwareTexture(numchannels); -} - void GLInstance::Draw(EDrawType type, size_t start, size_t count) { assert (BufferLock > 0); @@ -121,6 +116,7 @@ void GLInstance::DoDraw() { lastState.Flags = ~rendercommands[0].StateFlags; // Force ALL flags to be considered 'changed'. lastState.DepthFunc = INT_MIN; // Something totally invalid. + screen->RenderState()->EnableMultisampling(true); for (auto& rs : rendercommands) { @@ -177,7 +173,6 @@ void PolymostRenderState::Apply(FRenderState& state, GLState& oldState) if (StateFlags != oldState.Flags) { state.EnableDepthTest(StateFlags & STF_DEPTHTEST); - state.EnableMultisampling(StateFlags & STF_MULTISAMPLE); if ((StateFlags ^ oldState.Flags) & (STF_STENCILTEST | STF_STENCILWRITE)) { diff --git a/source/glbackend/glbackend.h b/source/glbackend/glbackend.h index 6baf52d58..9332b1b32 100644 --- a/source/glbackend/glbackend.h +++ b/source/glbackend/glbackend.h @@ -28,16 +28,14 @@ enum class PaletteManager { - OpenGLRenderer::FHardwareTexture* palettetextures[256] = {}; - OpenGLRenderer::FHardwareTexture* palswaptextures[256] = {}; + IHardwareTexture* palettetextures[256] = {}; + IHardwareTexture* palswaptextures[256] = {}; uint32_t lastindex = ~0u; uint32_t lastsindex = ~0u; GLInstance* const inst; - //OpenGLRenderer::GLDataBuffer* palswapBuffer = nullptr; - unsigned FindPalswap(const uint8_t* paldata, palette_t& fadecolor); public: @@ -86,7 +84,6 @@ public: TArray rendercommands; PaletteManager palmanager; int lastPalswapIndex = -1; - OpenGLRenderer::FHardwareTexture* texv; FGameTexture* currentTexture = nullptr; int MatrixChange = 0; @@ -112,8 +109,6 @@ public: void Draw(EDrawType type, size_t start, size_t count); void DoDraw(); - OpenGLRenderer::FHardwareTexture* NewTexture(int numchannels = 4); - float GetProjectionM5() { return mProjectionM5; } int SetMatrix(int num, const VSMatrix *mat ); int SetMatrix(int num, const float *mat) @@ -171,12 +166,6 @@ public: else renderState.StateFlags &= ~STF_DEPTHTEST; } - void EnableMultisampling(bool on) - { - if (on) renderState.StateFlags |= STF_MULTISAMPLE; - else renderState.StateFlags &= ~STF_MULTISAMPLE; - } - void EnableStencilWrite(int value) { renderState.StateFlags |= STF_STENCILWRITE; @@ -370,14 +359,12 @@ public: renderState.AlphaThreshold = al; } - OpenGLRenderer::FHardwareTexture *LoadTexture(FTexture* tex, int texturetype, int palid); - - void SetPaletteTexture(OpenGLRenderer::FHardwareTexture* tex) + void SetPaletteTexture(IHardwareTexture* tex) { renderState.PaletteTexture = tex; } - void SetLookupTexture(OpenGLRenderer::FHardwareTexture* tex) + void SetLookupTexture(IHardwareTexture* tex) { renderState.LookupTexture = tex; } diff --git a/source/glbackend/pm_renderstate.h b/source/glbackend/pm_renderstate.h index b83203285..c0751cd2c 100644 --- a/source/glbackend/pm_renderstate.h +++ b/source/glbackend/pm_renderstate.h @@ -34,7 +34,6 @@ enum PRSFlags STF_COLORMASK = 2, STF_DEPTHMASK = 4, STF_DEPTHTEST = 8, - STF_MULTISAMPLE = 16, STF_STENCILWRITE = 32, STF_STENCILTEST = 64, STF_CULLCW = 128, @@ -62,7 +61,7 @@ struct PolymostRenderState int hictint_flags = -1; FDepthBiasState mBias{ }; FMaterialState mMaterial; - OpenGLRenderer::FHardwareTexture* PaletteTexture = nullptr, * LookupTexture = nullptr; + IHardwareTexture* PaletteTexture = nullptr, * LookupTexture = nullptr; int StateFlags = STF_COLORMASK|STF_DEPTHMASK; FRenderStyle Style{}; diff --git a/source/platform/win32/gameres.rc b/source/platform/win32/gameres.rc index 2077254ee..9c48ba756 100644 --- a/source/platform/win32/gameres.rc +++ b/source/platform/win32/gameres.rc @@ -18,17 +18,17 @@ BEGIN LTEXT "Select which game file (GRP) to run.",IDC_STATIC,12,44,190,8 LISTBOX IDC_IWADLIST,12,56,200,87,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP GROUPBOX "Video settings",IDC_STATIC,8,155,109,52 - CONTROL "Fullscreen",IDC_WELCOME_FULLSCREEN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,65,167,48,10 + CONTROL "&Fullscreen",IDC_WELCOME_FULLSCREEN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,65,167,48,10 GROUPBOX "Resource settings",IDC_STATIC,123,155,95,52 - CONTROL "Disable autoload",IDC_WELCOME_NOAUTOLOAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,130,170,65,10 - //CONTROL "Load lights",IDC_WELCOME_LIGHTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,130,180,51,10 - //CONTROL "Load brightmaps",IDC_WELCOME_BRIGHTMAPS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,130,190,65,10 - CONTROL "Don't ask me this again",IDC_DONTASKIWAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,73,211,87,10 - DEFPUSHBUTTON "Play!",IDOK,8,228,90,14 - PUSHBUTTON "Exit",IDCANCEL,166,228,50,14 - CONTROL "OpenGL",IDC_WELCOME_VULKAN1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,13,167,41,10 - CONTROL "Vulkan",IDC_WELCOME_VULKAN2,"Button",BS_AUTORADIOBUTTON | WS_DISABLED,13,177,37,10 - CONTROL "SoftPoly",IDC_WELCOME_VULKAN3,"Button",BS_AUTORADIOBUTTON | WS_DISABLED,13,188,43,10 + CONTROL "Disable &autoload",IDC_WELCOME_NOAUTOLOAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,130,170,65,10 + CONTROL "Load &lights",IDC_WELCOME_LIGHTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,130,180,51,10 + CONTROL "Load &brightmaps",IDC_WELCOME_BRIGHTMAPS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,130,190,65,10 + CONTROL "&Don't ask me this again",IDC_DONTASKIWAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,73,211,87,10 + DEFPUSHBUTTON "&Play GZDoom",IDOK,8,228,90,14 + PUSHBUTTON "E&xit",IDCANCEL,166,228,50,14 + CONTROL "&OpenGL",IDC_WELCOME_VULKAN1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,13,167,41,10 + CONTROL "&Vulkan",IDC_WELCOME_VULKAN2,"Button",BS_AUTORADIOBUTTON,13,177,37,10 + CONTROL "&SoftPoly",IDC_WELCOME_VULKAN3,"Button",BS_AUTORADIOBUTTON,13,188,43,10 END IDD_CRASHDIALOG DIALOGEX 0, 0, 415, 308 @@ -38,7 +38,7 @@ CAPTION "Very Fatal Error" FONT 8, "MS Shell Dlg", 400, 0, 0x0 BEGIN CONTROL "",IDC_CRASHTAB,"SysTabControl32",WS_TABSTOP,4,4,404,280 - PUSHBUTTON "Save Report to Disk...",IDC_SAVEREPORT,242,289,91,14 + PUSHBUTTON "&Save Report to Disk...",IDC_SAVEREPORT,242,289,91,14 PUSHBUTTON "&Discard Report",IDNO,338,289,70,14 END @@ -47,10 +47,10 @@ STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_VISIBLE FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN EDITTEXT IDC_CRASHINFO,7,126,377,90,ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN | WS_VSCROLL - CONTROL "",IDC_PLEASETELLUS,"RichEdit20A",ES_MULTILINE | ES_READONLY,7,50,377,54,WS_EX_TRANSPARENT + CONTROL "",IDC_PLEASETELLUS,"RichEdit20W",ES_MULTILINE | ES_READONLY,7,50,377,54,WS_EX_TRANSPARENT LTEXT "(Optional) To help diagnose the cause of this error, please describe what you were doing when the error occured. If you were playing with custom data, please also indicate where to obtain them:",IDC_STATIC,7,108,377,16,0,WS_EX_TRANSPARENT CONTROL 131,IDC_DEADGUYVIEWER,"Static",SS_BITMAP,345,7,23,26 - CONTROL "",IDC_CRASHHEADER,"RichEdit20A",ES_MULTILINE | ES_AUTOHSCROLL | ES_READONLY,18,13,306,25,WS_EX_TRANSPARENT + CONTROL "",IDC_CRASHHEADER,"RichEdit20W",ES_MULTILINE | ES_AUTOHSCROLL | ES_READONLY,18,13,306,25,WS_EX_TRANSPARENT CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,42,407,1 GROUPBOX "Summary",IDC_STATIC,7,223,377,34 LTEXT "Static",IDC_CRASHSUMMARY,14,233,363,20 @@ -64,7 +64,7 @@ BEGIN LTEXT "The selected file contains this information:",IDC_STATIC,7,74,136,8 RTEXT "Static",IDC_CRASHFILESIZE,337,74,55,8 LISTBOX IDC_CRASHFILES,7,15,385,53,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - CONTROL "",IDC_CRASHFILECONTENTS,"RichEdit20A",ES_MULTILINE | ES_READONLY | WS_BORDER | WS_VSCROLL | WS_TABSTOP,7,83,385,174 + CONTROL "",IDC_CRASHFILECONTENTS,"RichEdit20W",ES_MULTILINE | ES_READONLY | WS_BORDER | WS_VSCROLL | WS_TABSTOP,7,83,385,174 END IDD_ERRORPANE DIALOGEX 0, 0, 190, 28 @@ -72,7 +72,8 @@ STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CL EXSTYLE WS_EX_CONTROLPARENT FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - DEFPUSHBUTTON "Quit",IDOK,133,7,50,14 + DEFPUSHBUTTON "E&xit",IDOK,133,7,50,14 + PUSHBUTTON "&Restart",IDC_BUTTON1,79,7,50,14 END