diff --git a/binaries/data/mods/public/gui/options/options.xml b/binaries/data/mods/public/gui/options/options.xml
index b6de0e9..fce511e 100644
a
|
b
|
|
33 | 33 | <object style="TitleText" type="text" size="0 5 100% 25">Graphics Settings</object> |
34 | 34 | <object size="0 25 65% 50" type="text" style="RightLabelText" ghost="true">Enable Shadows</object> |
35 | 35 | <object name="ShadowsCFG" size="70% 30 70%+25 55" type="checkbox" style="StoneCrossBox"> |
36 | | <action on="Load">this.checked = Engine.Renderer_GetShadowsEnabled();</action> |
37 | | <action on="Press">Engine.Renderer_SetShadowsEnabled(this.checked);</action> |
| 36 | <action on="Load"> |
| 37 | if (Engine.Renderer_GetShadowsAvailable()) { |
| 38 | this.enabled = true; |
| 39 | Engine.ConfigDB_GetValue("user", "shadows") === "true" ? this.checked = true : this.checked = false; |
| 40 | } else { |
| 41 | this.enabled = false; |
| 42 | this.checked = false; |
| 43 | } |
| 44 | </action> |
| 45 | <action on="Press"> |
| 46 | Engine.Renderer_SetShadowsEnabled(this.checked); |
| 47 | Engine.ConfigDB_CreateValue("user", "shadows", String(this.checked)); |
| 48 | </action> |
38 | 49 | </object> |
39 | 50 | <object size="0 50 65% 75" type="text" style="RightLabelText" ghost="true">Enable Shadow Filtering</object> |
40 | 51 | <object name="ShadowPCFCFGNow" size="70% 55 70%+25 80" type="checkbox" style="StoneCrossBox"> |
41 | | <action on="Load">this.checked = Engine.Renderer_GetShadowPCFEnabled();</action> |
42 | | <action on="Press">Engine.Renderer_SetShadowPCFEnabled(this.checked);</action> |
| 52 | <action on="Load"> |
| 53 | this.checked = Engine.Renderer_GetShadowPCFEnabled(); |
| 54 | Engine.ConfigDB_GetValue("user", "shadowpcf") === "true" ? this.checked = true : this.checked = false; |
| 55 | </action> |
| 56 | <action on="Press"> |
| 57 | Engine.Renderer_SetShadowPCFEnabled(this.checked); |
| 58 | Engine.ConfigDB_CreateValue("user", "shadowpcf", String(this.checked)); |
| 59 | </action> |
43 | 60 | </object> |
44 | 61 | </object> |
45 | 62 | <object name="SoundSettings" type="image" sprite="BackgroundIndentFillDark" size="616 16 916 100%-16"> |
diff --git a/source/ps/GameSetup/GameSetup.cpp b/source/ps/GameSetup/GameSetup.cpp
index 35f85eb..6543d89 100644
a
|
b
|
static void InitRenderer()
|
599 | 599 | |
600 | 600 | // set renderer options from command line options - NOVBO must be set before opening the renderer |
601 | 601 | g_Renderer.SetOptionBool(CRenderer::OPT_NOVBO, g_NoGLVBO); |
| 602 | |
| 603 | g_Shadows = g_Shadows && g_Renderer.GetCapabilities().m_Shadows; |
602 | 604 | g_Renderer.SetOptionBool(CRenderer::OPT_SHADOWS, g_Shadows); |
603 | 605 | |
604 | 606 | g_Renderer.SetOptionBool(CRenderer::OPT_WATERNORMAL, g_WaterNormal); |
… |
… |
void InitGraphics(const CmdLineArgs& args, int flags)
|
1011 | 1013 | // TODO: i18n |
1012 | 1014 | } |
1013 | 1015 | |
1014 | | if (!ogl_HaveExtension("GL_ARB_texture_env_crossbar")) |
1015 | | { |
1016 | | DEBUG_DISPLAY_ERROR( |
1017 | | L"The GL_ARB_texture_env_crossbar extension doesn't appear to be available on your computer." |
1018 | | L" Shadows are not available and overall graphics quality might suffer." |
1019 | | L" You are advised to try installing newer drivers and/or upgrade your graphics card."); |
1020 | | g_Shadows = false; |
1021 | | } |
1022 | | |
1023 | 1016 | ogl_WarnIfError(); |
1024 | 1017 | InitRenderer(); |
1025 | 1018 | |
diff --git a/source/renderer/scripting/JSInterface_Renderer.cpp b/source/renderer/scripting/JSInterface_Renderer.cpp
index 88331d1..0795133 100644
a
|
b
|
void JSI_Renderer::SetRenderPath(void* UNUSED(cbdata), std::string name)
|
57 | 57 | g_Renderer.SetRenderPath(CRenderer::GetRenderPathByName(name)); |
58 | 58 | } |
59 | 59 | |
| 60 | bool JSI_Renderer::GetShadowsAvailable(void* UNUSED(cbdata)) |
| 61 | { |
| 62 | if (!g_Renderer.GetCapabilities().m_Shadows) |
| 63 | { |
| 64 | DEBUG_DISPLAY_ERROR( |
| 65 | L" Shadows are not available and overall graphics quality might suffer." |
| 66 | L" You are advised to try installing newer drivers and/or upgrade your graphics card."); |
| 67 | return false; |
| 68 | } else { |
| 69 | return true; |
| 70 | } |
| 71 | } |
| 72 | |
60 | 73 | |
61 | 74 | #define REGISTER_BOOLEAN_SCRIPT_SETTING(NAME) \ |
62 | 75 | scriptInterface.RegisterFunction<bool, &JSI_Renderer::Get##NAME##Enabled>("Renderer_Get" #NAME "Enabled"); \ |
… |
… |
void JSI_Renderer::RegisterScriptFunctions(ScriptInterface& scriptInterface)
|
66 | 79 | { |
67 | 80 | scriptInterface.RegisterFunction<std::string, &JSI_Renderer::GetRenderPath>("Renderer_GetRenderPath"); |
68 | 81 | scriptInterface.RegisterFunction<void, std::string, &JSI_Renderer::SetRenderPath>("Renderer_SetRenderPath"); |
| 82 | scriptInterface.RegisterFunction<bool, &JSI_Renderer::GetShadowsAvailable>("Renderer_GetShadowsAvailable"); |
69 | 83 | REGISTER_BOOLEAN_SCRIPT_SETTING(Shadows); |
70 | 84 | REGISTER_BOOLEAN_SCRIPT_SETTING(ShadowPCF); |
71 | 85 | REGISTER_BOOLEAN_SCRIPT_SETTING(Particles); |
diff --git a/source/renderer/scripting/JSInterface_Renderer.h b/source/renderer/scripting/JSInterface_Renderer.h
index eca4afa..81e23c3 100644
a
|
b
|
namespace JSI_Renderer
|
29 | 29 | { |
30 | 30 | std::string GetRenderPath(void* cbdata); |
31 | 31 | void SetRenderPath(void* cbdata, std::string name); |
| 32 | bool GetShadowsAvailable(void* cbdata); |
32 | 33 | |
33 | 34 | DECLARE_BOOLEAN_SCRIPT_SETTING(Shadows); |
34 | 35 | DECLARE_BOOLEAN_SCRIPT_SETTING(ShadowPCF); |