Ticket #2310: 0ad_save_graphics_settings.diff

File 0ad_save_graphics_settings.diff, 5.6 KB (added by José Manuel Santamaría Lema, 10 years ago)
  • binaries/data/mods/public/gui/options/options.xml

    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  
    3333            <object style="TitleText" type="text" size="0 5 100% 25">Graphics Settings</object>
    3434            <object size="0 25 65% 50" type="text" style="RightLabelText" ghost="true">Enable Shadows</object>
    3535            <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>
    3849            </object>
    3950            <object size="0 50 65% 75" type="text" style="RightLabelText" ghost="true">Enable Shadow Filtering</object>
    4051            <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>
    4360            </object>
    4461        </object>
    4562        <object name="SoundSettings" type="image" sprite="BackgroundIndentFillDark" size="616 16 916 100%-16">
  • source/ps/GameSetup/GameSetup.cpp

    diff --git a/source/ps/GameSetup/GameSetup.cpp b/source/ps/GameSetup/GameSetup.cpp
    index 35f85eb..6543d89 100644
    a b static void InitRenderer()  
    599599
    600600    // set renderer options from command line options - NOVBO must be set before opening the renderer
    601601    g_Renderer.SetOptionBool(CRenderer::OPT_NOVBO, g_NoGLVBO);
     602
     603    g_Shadows = g_Shadows && g_Renderer.GetCapabilities().m_Shadows;
    602604    g_Renderer.SetOptionBool(CRenderer::OPT_SHADOWS, g_Shadows);
    603605
    604606    g_Renderer.SetOptionBool(CRenderer::OPT_WATERNORMAL, g_WaterNormal);
    void InitGraphics(const CmdLineArgs& args, int flags)  
    10111013        // TODO: i18n
    10121014    }
    10131015
    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 
    10231016    ogl_WarnIfError();
    10241017    InitRenderer();
    10251018
  • source/renderer/scripting/JSInterface_Renderer.cpp

    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)  
    5757    g_Renderer.SetRenderPath(CRenderer::GetRenderPathByName(name));
    5858}
    5959
     60bool 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
    6073
    6174#define REGISTER_BOOLEAN_SCRIPT_SETTING(NAME) \
    6275scriptInterface.RegisterFunction<bool, &JSI_Renderer::Get##NAME##Enabled>("Renderer_Get" #NAME "Enabled"); \
    void JSI_Renderer::RegisterScriptFunctions(ScriptInterface& scriptInterface)  
    6679{
    6780    scriptInterface.RegisterFunction<std::string, &JSI_Renderer::GetRenderPath>("Renderer_GetRenderPath");
    6881    scriptInterface.RegisterFunction<void, std::string, &JSI_Renderer::SetRenderPath>("Renderer_SetRenderPath");
     82    scriptInterface.RegisterFunction<bool, &JSI_Renderer::GetShadowsAvailable>("Renderer_GetShadowsAvailable");
    6983    REGISTER_BOOLEAN_SCRIPT_SETTING(Shadows);
    7084    REGISTER_BOOLEAN_SCRIPT_SETTING(ShadowPCF);
    7185    REGISTER_BOOLEAN_SCRIPT_SETTING(Particles);
  • source/renderer/scripting/JSInterface_Renderer.h

    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  
    2929{
    3030    std::string GetRenderPath(void* cbdata);
    3131    void SetRenderPath(void* cbdata, std::string name);
     32    bool GetShadowsAvailable(void* cbdata);
    3233
    3334    DECLARE_BOOLEAN_SCRIPT_SETTING(Shadows);
    3435    DECLARE_BOOLEAN_SCRIPT_SETTING(ShadowPCF);