Skip to content

Commit 9d1bc82

Browse files
authored
Merge branch 'master' into add-vehicle-sirens
2 parents 2538362 + 2c9f48c commit 9d1bc82

30 files changed

+411
-241
lines changed

Client/cefweb/CWebApp.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,13 @@ CefRefPtr<CefResourceHandler> CWebApp::HandleError(const SString& strError, unsi
2121

2222
void CWebApp::OnBeforeCommandLineProcessing(const CefString& process_type, CefRefPtr<CefCommandLine> command_line)
2323
{
24+
CWebCore* pWebCore = static_cast<CWebCore*>(g_pCore->GetWebCore());
25+
26+
if (!pWebCore->GetGPUEnabled())
27+
command_line->AppendSwitch("disable-gpu");
28+
29+
command_line->AppendSwitch("disable-gpu-compositing"); // always disable this, causes issues with official builds
30+
2431
// command_line->AppendSwitch("disable-d3d11");
2532
command_line->AppendSwitch("enable-begin-frame-scheduling");
2633

Client/cefweb/CWebCore.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,13 @@ CWebCore::~CWebCore()
4949
delete m_pXmlConfig;
5050
}
5151

52-
bool CWebCore::Initialise()
52+
bool CWebCore::Initialise(bool gpuEnabled)
5353
{
5454
CefMainArgs mainArgs;
5555
void* sandboxInfo = nullptr;
56+
57+
m_bGPUEnabled = gpuEnabled;
58+
5659
CefRefPtr<CWebApp> app(new CWebApp);
5760

5861
#ifdef CEF_ENABLE_SANDBOX
@@ -869,3 +872,8 @@ void CWebCore::StaticFetchBlacklistFinished(const SHttpDownloadResult& result)
869872
OutputDebugLine("Updated browser blacklist!");
870873
#endif
871874
}
875+
876+
bool CWebCore::GetGPUEnabled() const noexcept
877+
{
878+
return m_bGPUEnabled;
879+
}

Client/cefweb/CWebCore.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class CWebCore : public CWebCoreInterface
5454
public:
5555
CWebCore();
5656
~CWebCore();
57-
bool Initialise() override;
57+
bool Initialise(bool gpuEnabled) override;
5858

5959
CWebViewInterface* CreateWebView(unsigned int uiWidth, unsigned int uiHeight, bool bIsLocal, CWebBrowserItem* pWebBrowserRenderItem, bool bTransparent);
6060
void DestroyWebView(CWebViewInterface* pWebViewInterface);
@@ -108,6 +108,8 @@ class CWebCore : public CWebCoreInterface
108108
static void StaticFetchWhitelistFinished(const SHttpDownloadResult& result);
109109
static void StaticFetchBlacklistFinished(const SHttpDownloadResult& result);
110110

111+
bool GetGPUEnabled() const noexcept;
112+
111113
private:
112114
typedef std::pair<bool, eWebFilterType> WebFilterPair;
113115

@@ -129,4 +131,7 @@ class CWebCore : public CWebCoreInterface
129131
CXMLFile* m_pXmlConfig;
130132
int m_iWhitelistRevision;
131133
int m_iBlacklistRevision;
134+
135+
// Shouldn't be changed after init
136+
bool m_bGPUEnabled;
132137
};

Client/core/CClientVariables.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,7 @@ void CClientVariables::LoadDefaults()
358358
DEFAULT("discord_rpc_share_data", false); // Consistent Rich Presence data sharing
359359
DEFAULT("discord_rpc_share_data_firsttime", false); // Display the user data sharing consent dialog box - for the first time
360360
DEFAULT("_beta_qc_rightclick_command", _S("reconnect")); // Command to run when right clicking quick connect (beta - can be removed at any time)
361+
DEFAULT("browser_enable_gpu", true); // Enable GPU in CEF? (allows stuff like WebGL to function)
361362

362363
if (!Exists("locale"))
363364
{

Client/core/CCore.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1155,8 +1155,12 @@ CWebCoreInterface* CCore::GetWebCore()
11551155
{
11561156
if (m_pWebCore == nullptr)
11571157
{
1158+
bool gpuEnabled;
1159+
auto cvars = g_pCore->GetCVars();
1160+
cvars->Get("browser_enable_gpu", gpuEnabled);
1161+
11581162
m_pWebCore = CreateModule<CWebCoreInterface>(m_WebCoreModule, "CefWeb", "cefweb", "InitWebCoreInterface", this);
1159-
m_pWebCore->Initialise();
1163+
m_pWebCore->Initialise(gpuEnabled);
11601164
}
11611165
return m_pWebCore;
11621166
}

Client/core/CGUI.cpp

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,15 @@ CLocalGUI::~CLocalGUI()
5656

5757
void CLocalGUI::SetSkin(const char* szName)
5858
{
59+
CVector2D consolePos, consoleSize;
60+
5961
bool guiWasLoaded = m_pMainMenu != NULL;
6062
if (guiWasLoaded)
63+
{
64+
consolePos = m_pConsole->GetPosition();
65+
consoleSize = m_pConsole->GetSize();
6166
DestroyWindows();
67+
}
6268

6369
std::string error;
6470

@@ -93,7 +99,11 @@ void CLocalGUI::SetSkin(const char* szName)
9399
m_LastSettingsRevision = cvars->GetRevision();
94100

95101
if (guiWasLoaded)
102+
{
96103
CreateWindows(guiWasLoaded);
104+
m_pConsole->SetPosition(consolePos);
105+
m_pConsole->SetSize(consoleSize);
106+
}
97107

98108
if (CCore::GetSingleton().GetConsole() && !error.empty())
99109
CCore::GetSingleton().GetConsole()->Echo(error.c_str());
@@ -104,8 +114,8 @@ void CLocalGUI::ChangeLocale(const char* szName)
104114
bool guiWasLoaded = m_pMainMenu != NULL;
105115
assert(guiWasLoaded);
106116

107-
CVector2D vPos = m_pConsole->GetPosition();
108-
CVector2D vSize = m_pConsole->GetSize();
117+
CVector2D consolePos = m_pConsole->GetPosition();
118+
CVector2D consoleSize = m_pConsole->GetSize();
109119

110120
if (guiWasLoaded)
111121
DestroyWindows();
@@ -119,12 +129,8 @@ void CLocalGUI::ChangeLocale(const char* szName)
119129
if (guiWasLoaded)
120130
{
121131
CreateWindows(guiWasLoaded);
122-
123-
if (m_pConsole != nullptr)
124-
{
125-
m_pConsole->SetPosition(vPos);
126-
m_pConsole->SetSize(vSize);
127-
}
132+
m_pConsole->SetPosition(consolePos);
133+
m_pConsole->SetSize(consoleSize);
128134
}
129135
}
130136

Client/core/CSettings.cpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -917,6 +917,10 @@ void CSettings::CreateGUI()
917917
m_pCheckBoxRemoteJavascript->GetPosition(vecTemp);
918918
m_pCheckBoxRemoteJavascript->AutoSize(NULL, 20.0f);
919919

920+
m_pCheckBoxBrowserGPUEnabled = reinterpret_cast<CGUICheckBox*>(pManager->CreateCheckBox(m_pTabBrowser, _("Enable GPU rendering"), true));
921+
m_pCheckBoxBrowserGPUEnabled->SetPosition(CVector2D(vecTemp.fX + 300.0f, vecTemp.fY - 25.0f));
922+
m_pCheckBoxBrowserGPUEnabled->AutoSize(NULL, 20.0f);
923+
920924
m_pLabelBrowserCustomBlacklist = reinterpret_cast<CGUILabel*>(pManager->CreateLabel(m_pTabBrowser, _("Custom blacklist")));
921925
m_pLabelBrowserCustomBlacklist->SetPosition(CVector2D(vecTemp.fX, vecTemp.fY + 30.0f));
922926
m_pLabelBrowserCustomBlacklist->GetPosition(vecTemp);
@@ -3287,6 +3291,8 @@ void CSettings::LoadData()
32873291
m_pCheckBoxRemoteBrowser->SetSelected(bVar);
32883292
CVARS_GET("browser_remote_javascript", bVar);
32893293
m_pCheckBoxRemoteJavascript->SetSelected(bVar);
3294+
CVARS_GET("browser_enable_gpu", bVar);
3295+
m_pCheckBoxBrowserGPUEnabled->SetSelected(bVar);
32903296

32913297
ReloadBrowserLists();
32923298
}
@@ -3711,6 +3717,13 @@ void CSettings::SaveData()
37113717
bBrowserSettingChanged = true;
37123718
}
37133719

3720+
bool bBrowserGPUEnabled = false;
3721+
CVARS_GET("browser_enable_gpu", bBrowserGPUEnabled);
3722+
3723+
bool bBrowserGPUSetting = m_pCheckBoxBrowserGPUEnabled->GetSelected();
3724+
bool bBrowserGPUSettingChanged = (bBrowserGPUSetting != bBrowserGPUEnabled);
3725+
CVARS_SET("browser_enable_gpu", bBrowserGPUSetting);
3726+
37143727
// Ensure CVARS ranges ok
37153728
CClientVariables::GetSingleton().ValidateValues();
37163729

@@ -3720,7 +3733,7 @@ void CSettings::SaveData()
37203733
gameSettings->Save();
37213734

37223735
// Ask to restart?
3723-
if (bIsVideoModeChanged || bIsAntiAliasingChanged || bIsCustomizedSAFilesChanged || processsDPIAwareChanged)
3736+
if (bIsVideoModeChanged || bIsAntiAliasingChanged || bIsCustomizedSAFilesChanged || processsDPIAwareChanged || bBrowserGPUSettingChanged)
37243737
ShowRestartQuestion();
37253738
else if (CModManager::GetSingleton().IsLoaded() && bBrowserSettingChanged)
37263739
ShowDisconnectQuestion();

Client/core/CSettings.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,7 @@ class CSettings
338338
CGUIButton* m_pButtonBrowserWhitelistAdd;
339339
CGUIGridList* m_pGridBrowserWhitelist;
340340
CGUIButton* m_pButtonBrowserWhitelistRemove;
341+
CGUICheckBox* m_pCheckBoxBrowserGPUEnabled;
341342
bool m_bBrowserListsChanged;
342343
bool m_bBrowserListsLoadEnabled;
343344

Client/game_sa/CSettingsSA.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,20 @@ void CSettingsSA::SetDynamicPedShadowsEnabled(bool bEnable)
316316
m_bDynamicPedShadowsEnabled = bEnable;
317317
}
318318

319+
bool CSettingsSA::IsDynamicPedShadowsEnabledByVideoSetting() const noexcept
320+
{
321+
bool pedDynamicShadows;
322+
g_pCore->GetCVars()->Get("dynamic_ped_shadows", pedDynamicShadows);
323+
return pedDynamicShadows;
324+
}
325+
326+
bool CSettingsSA::ResetDynamicPedShadows() noexcept
327+
{
328+
pGame->GetSettings()->SetDynamicPedShadowsEnabled(pGame->GetSettings()->IsDynamicPedShadowsEnabledByVideoSetting());
329+
return true;
330+
}
331+
332+
319333
//
320334
// Volumetric shadow hooks
321335
//

Client/game_sa/CSettingsSA.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,8 @@ class CSettingsSA : public CGameSettings
147147

148148
bool IsDynamicPedShadowsEnabled();
149149
void SetDynamicPedShadowsEnabled(bool bEnable);
150+
bool IsDynamicPedShadowsEnabledByVideoSetting() const noexcept;
151+
bool ResetDynamicPedShadows() noexcept;
150152

151153
float GetAspectRatioValue();
152154
eAspectRatio GetAspectRatio();

0 commit comments

Comments
 (0)