diff --git a/Source/Glide64/Config.cpp b/Source/Glide64/Config.cpp index ab9345e22..56732e330 100644 --- a/Source/Glide64/Config.cpp +++ b/Source/Glide64/Config.cpp @@ -481,7 +481,7 @@ public: tooltip = "Buffer clear on every frame:\n\nForces the frame buffer to be cleared every frame drawn.\nUsually frame buffer clear is controlled by the game.\nHowever, in some cases it is not well emulated, and some garbage may be left on the screen.\nIn such cases, this option must be set on.\n\n[Recommended: on]"; TTSetTxt(IDC_CHK_BUFFER_CLEAR, tooltip.c_str()); m_cbxBuffer.Attach(GetDlgItem(IDC_CHK_BUFFER_CLEAR)); - m_cbxBuffer.SetCheck(g_settings->buff_clear > 0 ? BST_CHECKED : BST_UNCHECKED); + m_cbxBuffer.SetCheck(g_settings->buff_clear() ? BST_CHECKED : BST_UNCHECKED); m_cbxFBEnable.Attach(GetDlgItem(IDC_CHK_FRAME_BUFFER_EMULATION)); TTSetTxt(IDC_CHK_FRAME_BUFFER_EMULATION, "Enable frame buffer emulation:\n\nIf on, plugin will try to detect frame buffer usage and apply appropriate frame buffer emulation.\n\n[Recommended: on for games which use frame buffer effects]"); @@ -521,7 +521,7 @@ public: g_settings->SetAspectmode((CSettings::AspectMode_t)m_cmbAspect.GetItemData(m_cmbAspect.GetCurSel())); g_settings->SetSwapMode((CSettings::SwapMode_t)m_cmbBufferSwap.GetItemData(m_cmbBufferSwap.GetCurSel())); g_settings->SetFog(m_cbxFog.GetCheck() == BST_CHECKED); - g_settings->buff_clear = m_cbxBuffer.GetCheck() == BST_CHECKED; + g_settings->SetBuffClear(m_cbxBuffer.GetCheck() == BST_CHECKED); g_settings->SetLODmode((CSettings::PixelLevelOfDetail_t)m_cmbLOD.GetItemData(m_cmbLOD.GetCurSel())); CButton * fb_buttons[] = diff --git a/Source/Glide64/Main.cpp b/Source/Glide64/Main.cpp index 74dc6c2ac..756934c46 100644 --- a/Source/Glide64/Main.cpp +++ b/Source/Glide64/Main.cpp @@ -1564,7 +1564,7 @@ void newSwapBuffers() } } - if (g_settings->wireframe || g_settings->buff_clear || (g_settings->hacks(CSettings::hack_PPL) && g_settings->ucode() == CSettings::ucode_S2DEX)) + if (g_settings->wireframe || g_settings->buff_clear() || (g_settings->hacks(CSettings::hack_PPL) && g_settings->ucode() == CSettings::ucode_S2DEX)) { grDepthMask((g_settings->hacks(CSettings::hack_RE2) && g_settings->fb_depth_render_enabled()) ? FXFALSE : FXTRUE); grBufferClear(0, 0, 0xFFFF); diff --git a/Source/Glide64/Settings.cpp b/Source/Glide64/Settings.cpp index 91e5efa23..5091a1e8c 100644 --- a/Source/Glide64/Settings.cpp +++ b/Source/Glide64/Settings.cpp @@ -27,7 +27,7 @@ CSettings::CSettings() : m_rotate(Rotate_None), m_filtering(Filter_Automatic), m_fog(false), -buff_clear(0), + m_buff_clear(false), m_swapmode(SwapMode_Old), m_lodmode(LOD_Off), m_aspectmode(Aspect_4x3), @@ -157,7 +157,7 @@ void CSettings::RegisterSettings(void) general_setting(Set_filtering_default, "filtering", CSettings::Filter_Automatic); general_setting(Set_lodmode_default, "lodmode", CSettings::LOD_Off); general_setting(Set_fog_default, "fog", true); - general_setting(Set_buff_clear_default, "buff_clear", 1); + general_setting(Set_buff_clear_default, "buff_clear", true); general_setting(Set_swapmode_default, "swapmode", SwapMode_New); general_setting(Set_aspect_default, "aspect", Aspect_4x3); @@ -316,6 +316,15 @@ void CSettings::SetFog(bool value) } } +void CSettings::SetBuffClear(bool value) +{ + if (value != m_buff_clear) + { + m_buff_clear = value; + m_dirty = true; + } +} + void CSettings::SetGhqFltr(TextureFilter_t value) { if (value != m_ghq_fltr) @@ -617,7 +626,6 @@ void CSettings::ReadGameSettings(const char * name) g_settings->old_style_adither = GetSetting(Set_old_style_adither); g_settings->n64_z_scale = GetSetting(Set_n64_z_scale); - g_settings->buff_clear = GetSetting(g_romopen ? Set_buff_clear : Set_buff_clear_default); m_ScreenRes = GetSetting(Set_Resolution); if (m_ScreenRes >= GetScreenResolutionCount()) { m_ScreenRes = GetDefaultScreenRes(); } @@ -676,6 +684,7 @@ void CSettings::ReadGameSettings(const char * name) SetFiltering((Filtering_t)GetSetting(g_romopen ? Set_filtering : Set_filtering_default)); SetFog(GetSetting(g_romopen ? Set_fog : Set_fog_default) != 0); + SetBuffClear(GetSetting(g_romopen ? Set_buff_clear : Set_buff_clear_default) != 0); SetSwapMode((SwapMode_t)GetSetting(g_romopen ? Set_swapmode : Set_swapmode_default)); SetAspectmode((AspectMode_t)GetSetting(g_romopen ? Set_aspect : Set_aspect_default)); SetLODmode((PixelLevelOfDetail_t)GetSetting(g_romopen ? Set_lodmode : Set_lodmode_default)); @@ -725,7 +734,7 @@ void CSettings::WriteSettings(void) SetSetting(g_romopen ? Set_filtering : Set_filtering_default, filtering()); SetSetting(g_romopen ? Set_fog : Set_fog_default, m_fog); - SetSetting(g_romopen ? Set_buff_clear : Set_buff_clear_default, g_settings->buff_clear); + SetSetting(g_romopen ? Set_buff_clear : Set_buff_clear_default, m_buff_clear); SetSetting(g_romopen ? Set_swapmode : Set_swapmode_default, g_settings->swapmode()); SetSetting(g_romopen ? Set_lodmode : Set_lodmode_default, lodmode()); SetSetting(g_romopen ? Set_aspect : Set_aspect_default, m_aspectmode); diff --git a/Source/Glide64/Settings.h b/Source/Glide64/Settings.h index 435290f42..57c3d4bdc 100644 --- a/Source/Glide64/Settings.h +++ b/Source/Glide64/Settings.h @@ -145,8 +145,6 @@ public: ucode_Turbo3d = 21, }; - int buff_clear; - enum FBCRCMODE_t { @@ -184,6 +182,7 @@ public: inline Filtering_t filtering(void) const { return m_filtering; } inline bool fog (void) const { return m_fog; } + inline bool buff_clear(void) const { return m_buff_clear; } inline SwapMode_t swapmode(void) const { return m_swapmode; } inline PixelLevelOfDetail_t lodmode(void) const { return m_lodmode; } inline AspectMode_t aspectmode(void) const { return m_aspectmode; } @@ -261,6 +260,7 @@ public: void SetFiltering(Filtering_t value); void SetSwapMode(SwapMode_t value); void SetFog(bool value); + void SetBuffClear(bool value); void SetGhqFltr(TextureFilter_t value); void SetGhqEnht(TextureEnhancement_t value); void UpdateFrameBufferBits(uint32_t BitsToAdd, uint32_t BitsToRemove); @@ -294,6 +294,7 @@ private: ScreenRotate_t m_rotate; Filtering_t m_filtering; bool m_fog; + bool m_buff_clear; SwapMode_t m_swapmode; PixelLevelOfDetail_t m_lodmode; bool m_advanced_options;