Ticket #2137: renderer_global_functions_v1.0.diff

File renderer_global_functions_v1.0.diff, 27.6 KB (added by Yves, 11 years ago)
  • binaries/data/mods/public/gui/pregame/mainmenu.js

     
    162162            Engine.PushGuiPage("page_splashscreen.xml", { "page": "splashscreen" } );
    163163
    164164        // Warn about removing fixed render path
    165         if (renderer.renderpath == "fixed")
     165        if (Engine.Renderer_GetRenderPath() == "fixed")
    166166            messageBox(
    167167                600,
    168168                300,
  • binaries/data/mods/public/gui/session/session.xml

     
    6464    <!-- Unit silhouettes -->
    6565    <object hotkey="silhouettes">
    6666        <action on="Press">
    67         renderer.silhouettes = !renderer.silhouettes;
    68         getGUIObjectByName("silhouettesCheckbox").checked = renderer.silhouettes;
     67        var newSetting = !Engine.Renderer_GetSILHOUETTESEnabled();
     68        Engine.Renderer_SetSILHOUETTESEnabled(newSetting);
     69        getGUIObjectByName("silhouettesCheckbox").checked = newSetting;
    6970        </action>
    7071    </object>
    7172
    7273    <!-- Sky -->
    7374    <object hotkey="showsky">
    74         <action on="Press">renderer.showsky = !renderer.showsky;</action>
     75        <action on="Press">
     76        var newSetting =  !Engine.Renderer_GetSHOWSKYEnabled();
     77        Engine.Renderer_SetSHOWSKYEnabled(newSetting);
     78        </action>
    7579    </object>
    7680
    7781    <!-- Pause -->
     
    450454                <!-- Settings / shadows -->
    451455                <object size="0 10 100%-80 35" type="text" style="RightLabelText" ghost="true">Enable Shadows</object>
    452456                <object name="shadowsCheckbox" size="100%-56 15 100%-30 40" type="checkbox" style="StoneCrossBox" checked="true">
    453                     <action on="Load">if (renderer.shadows) this.checked = true; else this.checked = false;</action>
    454                     <action on="Press">renderer.shadows = this.checked;</action>
     457                    <action on="Load">this.checked = Engine.Renderer_GetSHADOWSEnabled();</action>
     458                    <action on="Press">Engine.Renderer_SetSHADOWSEnabled(this.checked);</action>
    455459                </object>
    456460               
    457461                <!-- Settings / Shadow PCF -->
    458462                <object size="0 35 100%-80 60" type="text" style="RightLabelText" ghost="true">Enable Shadow Filtering</object>
    459463                <object name="shadowPCFCheckbox" size="100%-56 40 100%-30 65" type="checkbox" style="StoneCrossBox" checked="true">
    460                     <action on="Load">if (renderer.shadowPCF) this.checked = true; else this.checked = false;</action>
    461                     <action on="Press">renderer.shadowPCF = this.checked;</action>
     464                    <action on="Load">this.checked = Engine.Renderer_GetSHADOWPCFEnabled();</action>
     465                    <action on="Press">Engine.Renderer_SetSHADOWPCFEnabled(this.checked);</action>
    462466                </object>
    463467               
    464468                <!-- Settings / Water Normals -->
    465469                <object size="0 60 100%-80 85" type="text" style="RightLabelText" ghost="true">Water - HQ Waviness</object>
    466470                <object name="waterNormalCheckox" size="100%-56 65 100%-30 90"  type="checkbox" style="StoneCrossBox" checked="true">
    467                     <action on="Load">if (renderer.waternormal) this.checked = true; else this.checked = false;</action>
    468                     <action on="Press">renderer.waternormal = this.checked;</action>
     471                    <action on="Load">this.checked = Engine.Renderer_GetWATERNORMALEnabled();</action>
     472                    <action on="Press">Engine.Renderer_SetWATERNORMALEnabled(this.checked);</action>
    469473                </object>
    470474               
    471475                <!-- Settings / Real Depth -->
    472476                <object size="0 85 100%-80 110" type="text" style="RightLabelText" ghost="true">Water - Use Actual Depth</object>
    473477                <object name="waterRealDepthCheckbox" size="100%-56 90 100%-30 115"  type="checkbox" style="StoneCrossBox" checked="true">
    474                     <action on="Load">if (renderer.waterrealdepth) this.checked = true; else this.checked = false;</action>
    475                     <action on="Press">renderer.waterrealdepth = this.checked; </action>
     478                    <action on="Load">this.checked = Engine.Renderer_GetWATERREALDEPTHEnabled();</action>
     479                    <action on="Press">Engine.Renderer_SetWATERREALDEPTHEnabled(this.checked);</action>
    476480                </object>
    477481
    478482                <!-- Settings / Reflection -->
    479483                <object size="0 110 100%-80 135" type="text" style="RightLabelText" ghost="true">Water - Enable Reflections</object>
    480484                <object name="waterReflectionCheckbox" size="100%-56 115 100%-30 140"  type="checkbox" style="StoneCrossBox" checked="true">
    481                     <action on="Load">if (renderer.waterreflection) this.checked = true; else this.checked = false;</action>
    482                     <action on="Press">renderer.waterreflection = this.checked; </action>
     485                    <action on="Load">this.checked = Engine.Renderer_GetWATERREFLECTIONEnabled();</action>
     486                    <action on="Press">Engine.Renderer_SetWATERREFLECTIONEnabled(this.checked);</action>
    483487                </object>
    484488               
    485489                <!-- Settings / Refraction -->
    486490                <object size="0 135 100%-80 160" type="text" style="RightLabelText" ghost="true">Water - Enable Refraction</object>
    487491                <object name="waterRefractionCheckbox" size="100%-56 140 100%-30 165"  type="checkbox" style="StoneCrossBox" checked="true">
    488                     <action on="Load">if (renderer.waterrefraction) this.checked = true; else this.checked = false;</action>
    489                     <action on="Press">renderer.waterrefraction = this.checked; </action>
     492                    <action on="Load">this.checked = Engine.Renderer_GetWATERREFRACTIONEnabled();</action>
     493                    <action on="Press">Engine.Renderer_SetWATERREFRACTIONEnabled(this.checked);</action>
    490494                </object>
    491495               
    492496                <!-- Settings / Foam -->
    493497                <object size="0 160 100%-80 185" type="text" style="RightLabelText" ghost="true">Water - Enable Shore Foam</object>
    494498                <object name="waterFoamCheckbox" size="100%-56 165 100%-30 190"  type="checkbox" style="StoneCrossBox" checked="true">
    495                     <action on="Load">if (renderer.waterfoam) this.checked = true; else this.checked = false;</action>
    496                     <action on="Press">renderer.waterfoam = this.checked; </action>
     499                    <action on="Load">this.checked = Engine.Renderer_GetWATERFOAMEnabled();</action>
     500                    <action on="Press">Engine.Renderer_SetWATERFOAMEnabled(this.checked);</action>
    497501                </object>
    498502               
    499503                <!-- Settings / Waves -->
    500504                <object size="0 185 100%-80 210" type="text" style="RightLabelText" ghost="true">Water - Enable Shore Waves</object>
    501505                <object name="waterCoastalWavesCheckbox" size="100%-56 190 100%-30 215"  type="checkbox" style="StoneCrossBox" checked="true">
    502                     <action on="Load">if (renderer.watercoastalwaves) this.checked = true; else this.checked = false;</action>
    503                     <action on="Press">renderer.watercoastalwaves = this.checked; </action>
     506                    <action on="Load">this.checked = Engine.Renderer_GetWATERCOASTALWAVESEnabled();</action>
     507                    <action on="Press">Engine.Renderer_SetWATERCOASTALWAVESEnabled(this.checked);</action>
    504508                </object>
    505509               
    506510                <!-- Settings / Shadows -->
    507511                <object size="0 210 100%-80 235" type="text" style="RightLabelText" ghost="true">Water - Use Surface Shadows</object>
    508512                <object name="waterShadowsCheckbox" size="100%-56 215 100%-30 240"  type="checkbox" style="StoneCrossBox" checked="true">
    509                     <action on="Load">if (renderer.watershadow) this.checked = true; else this.checked = false;</action>
    510                     <action on="Press">renderer.watershadow = this.checked; </action>
     513                    <action on="Load">if (Engine.Renderer_GetWATERSHADOWEnabled()) this.checked = true; else this.checked = false;</action>
     514                    <action on="Press">Engine.Renderer_SetWATERSHADOWEnabled(this.checked);</action>
    511515                </object>
    512516
    513517                <!-- Settings / Particles -->
    514518                <object size="0 235 100%-80 260" type="text" style="RightLabelText" ghost="true">Enable Particles</object>
    515519                <object name="particlesCheckbox" size="100%-56 240 100%-30 265" type="checkbox" style="StoneCrossBox" checked="true">
    516                     <action on="Load">if (renderer.particles) this.checked = true; else this.checked = false;</action>
    517                     <action on="Press">renderer.particles = this.checked;</action>
     520                    <action on="Load">this.checked = Engine.Renderer_GetPARTICLESEnabled();</action>
     521                    <action on="Press">Engine.Renderer_SetPARTICLESEnabled(this.checked);</action>
    518522                </object>
    519523               
    520524                <!-- Settings / Unit Silhouettes -->
    521525                <object size="0 260 100%-80 285" type="text" style="RightLabelText" ghost="true">Enable Unit Silhouettes</object>
    522526                <object name="silhouettesCheckbox" size="100%-56 265 100%-30 290" type="checkbox" style="StoneCrossBox" checked="true">
    523                     <action on="Load">if (renderer.silhouettes) this.checked = true; else this.checked = false;</action>
    524                     <action on="Press">renderer.silhouettes = this.checked;</action>
     527                    <action on="Load">this.checked = Engine.Renderer_GetSILHOUETTESEnabled();</action>
     528                    <action on="Press">Engine.Renderer_SetSILHOUETTESEnabled(this.checked);</action>
    525529                </object>
    526530               
    527531                <!-- Settings / Music-->
  • binaries/data/mods/public/gui/options/options.xml

     
    2828                        <!-- Settings / shadows -->
    2929                        <object size="0 10 100%-80 35" type="text" style="RightLabelText" ghost="true">Enable Shadows</object>
    3030                        <object name="shadowsCheckbox" size="100%-56 15 100%-30 40" type="checkbox" style="StoneCrossBox" checked="true">
    31                                 <action on="Load">if (renderer.shadows) this.checked = true; else this.checked = false;</action>
    32                                 <action on="Press">renderer.shadows = this.checked;</action>
     31                                <action on="Load">this.checked = Engine.Renderer_GetSHADOWSEnabled();</action>
     32                                <action on="Press">Engine.Renderer_SetSHADOWSEnabled(this.checked);</action>
    3333                        </object>   
    3434
    3535                        <!-- Settings / Shadow PCF -->
    3636                        <object size="0 35 100%-80 60" type="text" style="RightLabelText" ghost="true">Enable Shadow Filtering</object>
    3737                        <object name="shadowPCFCheckbox" size="100%-56 40 100%-30 65" type="checkbox" style="StoneCrossBox" checked="true">
    38                                 <action on="Load">if (renderer.shadowPCF) this.checked = true; else this.checked = false;</action>
    39                                 <action on="Press">renderer.shadowPCF = this.checked;</action>
     38                                <action on="Load">this.checked = Engine.Renderer_GetSHADOWPCFEnabled();</action>
     39                                <action on="Press">Engine.Renderer_SetSHADOWPCFEnabled(this.checked);</action>
    4040                        </object>
    4141
    4242                        <!-- Settings / Water -->
    4343<!--                        <object size="0 60 100%-80 85" type="text" style="RightLabelText" ghost="true">Enable Water Reflections</object>
    4444                        <object name="fancyWaterCheckbox" size="100%-56 65 100%-30 90"  type="checkbox" style="StoneCrossBox" checked="true">
    45                                 <action on="Load">if (renderer.fancyWater) this.checked = true; else this.checked = false;</action>
    46                                 <action on="Press">renderer.fancyWater = this.checked;</action>
     45                                <action on="Load">this.checked = Engine.Renderer_GetWATERNORMALEnabled();</action>
     46                                <action on="Press">Engine.Renderer_SetWATERNORMALEnabled(this.checked);</action>
    4747                        </object>-->
    4848
    4949                        <!-- Settings / Music-->
  • build/premake/premake4.lua

     
    600600        "graphics",
    601601        "graphics/scripting",
    602602        "renderer",
     603        "renderer/scripting",
    603604        "third_party/mikktspace"
    604605    }
    605606    extern_libs = {
  • source/ps/GameSetup/GameSetup.cpp

     
    321321    // maths
    322322    JSI_Vector3D::init();
    323323
    324     // renderer
    325     CRenderer::ScriptingInit();
    326 
    327324    // ps
    328325    JSI_Console::init();
    329326
     
    13441341        JSBool ok = JS_GetProperty(cx, g_GUI->GetScriptObject(), "cancelOnError", &fval);
    13451342        ENSURE(ok);
    13461343
    1347         jsval msgval = ToJSVal(message);
     1344        jsval msgval = ScriptInterface::ToJSVal(cx, message);
    13481345
    13491346        if (ok && !JSVAL_IS_VOID(fval))
    13501347            JS_CallFunctionValue(cx, g_GUI->GetScriptObject(), fval, 1, &msgval, &rval);
  • source/gui/scripting/ScriptFunctions.cpp

     
    4545#include "ps/GameSetup/Atlas.h"
    4646#include "ps/GameSetup/Config.h"
    4747#include "ps/ConfigDB.h"
     48#include "renderer/scripting/JSInterface_Renderer.h"
    4849#include "tools/atlas/GameInterface/GameLoop.h"
    4950
    5051#include "simulation2/Simulation2.h"
     
    652653void GuiScriptingInit(ScriptInterface& scriptInterface)
    653654{
    654655    JSI_GameView::RegisterScriptFunctions(scriptInterface);
     656    JSI_Renderer::RegisterScriptFunctions(scriptInterface);
    655657
    656658    // GUI manager functions:
    657659    scriptInterface.RegisterFunction<CScriptVal, &GetActiveGui>("GetActiveGui");
  • source/tools/atlas/GameInterface/Handlers/MiscHandlers.cpp

     
    3333#include "ps/GameSetup/Config.h"
    3434#include "ps/GameSetup/GameSetup.h"
    3535#include "renderer/Renderer.h"
     36#include "scripting/ScriptingHost.h"
    3637
    3738extern void (*Atlas_GLSwapBuffers)(void* context);
    3839
  • source/scripting/ScriptGlue.cpp

     
    408408// property accessors
    409409//-----------------------------------------------------------------------------
    410410
    411 JSBool GetRenderer(JSContext* UNUSED(cx), JSObject* UNUSED(obj), jsid UNUSED(id), jsval* vp)
    412 {
    413     if (CRenderer::IsInitialised())
    414         *vp = OBJECT_TO_JSVAL(g_Renderer.GetScript());
    415     else
    416         *vp = JSVAL_NULL;
    417     return JS_TRUE;
    418 }
    419411
    420 
    421412enum ScriptGlobalTinyIDs
    422413{
    423414    GLOBAL_SELECTION,
     
    430421JSPropertySpec ScriptGlobalTable[] =
    431422{
    432423    { "console"    , GLOBAL_CONSOLE,     JSPROP_PERMANENT|JSPROP_READONLY, JSI_Console::getConsole, 0 },
    433     { "renderer"   , 0,                  JSPROP_PERMANENT|JSPROP_READONLY, GetRenderer, 0 },
    434424
    435425    // end of table marker
    436426    { 0, 0, 0, 0, 0 },
  • source/renderer/Renderer.cpp

     
    6868#include "renderer/TimeManager.h"
    6969#include "renderer/VertexBufferManager.h"
    7070#include "renderer/WaterManager.h"
     71#include "renderer/scripting/JSInterface_Renderer.h"
    7172
    7273extern bool g_GameRestarted;
    7374
     
    472473    m_hCompositeAlphaMap = 0;
    473474
    474475    m_Stats.Reset();
    475     AddLocalProperty(L"particles", &m_Options.m_Particles, false);
    476476
    477     AddLocalProperty(L"waternormal", &m_Options.m_WaterNormal, false);
    478     AddLocalProperty(L"waterrealdepth", &m_Options.m_WaterRealDepth, false);
    479     AddLocalProperty(L"waterreflection", &m_Options.m_WaterReflection, false);
    480     AddLocalProperty(L"waterrefraction", &m_Options.m_WaterRefraction, false);
    481     AddLocalProperty(L"waterfoam", &m_Options.m_WaterFoam, false);
    482     AddLocalProperty(L"watercoastalwaves", &m_Options.m_WaterCoastalWaves, false);
    483     AddLocalProperty(L"watershadow", &m_Options.m_WaterShadow, false);
    484 
    485     AddLocalProperty(L"horizonHeight", &m->skyManager.m_HorizonHeight, false);
    486     AddLocalProperty(L"waterMurkiness", &m->waterManager.m_Murkiness, false);
    487     AddLocalProperty(L"waterReflTintStrength", &m->waterManager.m_ReflectionTintStrength, false);
    488     AddLocalProperty(L"waterRepeatPeriod", &m->waterManager.m_RepeatPeriod, false);
    489     AddLocalProperty(L"waterShininess", &m->waterManager.m_Shininess, false);
    490     AddLocalProperty(L"waterSpecularStrength", &m->waterManager.m_SpecularStrength, false);
    491     AddLocalProperty(L"waterWaviness", &m->waterManager.m_Waviness, false);
    492     AddLocalProperty(L"silhouettes", &m_Options.m_Silhouettes, false);
    493     AddLocalProperty(L"showsky", &m_Options.m_ShowSky, false);
    494 
    495477    RegisterFileReloadFunc(ReloadChangedFileCB, this);
    496478}
    497479
     
    721703        case OPT_PARTICLES:
    722704            m_Options.m_Particles = value;
    723705            break;
     706        case OPT_PREFERGLSL:
     707            m_Options.m_PreferGLSL = value;
     708            MakeShadersDirty();
     709            break;
    724710        case OPT_SILHOUETTES:
    725711            m_Options.m_Silhouettes = value;
    726712            break;
     
    760746            return m_Options.m_ShadowPCF;
    761747        case OPT_PARTICLES:
    762748            return m_Options.m_Particles;
     749        case OPT_PREFERGLSL:
     750            return m_Options.m_PreferGLSL;
    763751        case OPT_SILHOUETTES:
    764752            return m_Options.m_Silhouettes;
    765753        case OPT_SHOWSKY:
     
    19831971    m->ShadersDirty = true;
    19841972}
    19851973
    1986 ///////////////////////////////////////////////////////////////////////////////////////////////////
    1987 // Scripting Interface
    1988 
    1989 jsval CRenderer::JSI_GetRenderPath(JSContext*)
    1990 {
    1991     return ToJSVal(GetRenderPathName(m_Options.m_RenderPath));
    1992 }
    1993 
    1994 void CRenderer::JSI_SetRenderPath(JSContext* ctx, jsval newval)
    1995 {
    1996     CStr name;
    1997 
    1998     if (!ToPrimitive(ctx, newval, name))
    1999         return;
    2000 
    2001     SetRenderPath(GetRenderPathByName(name));
    2002 }
    2003 
    2004 jsval CRenderer::JSI_GetDepthTextureBits(JSContext*)
    2005 {
    2006     return ToJSVal(m->shadow.GetDepthTextureBits());
    2007 }
    2008 
    2009 void CRenderer::JSI_SetDepthTextureBits(JSContext* ctx, jsval newval)
    2010 {
    2011     int depthTextureBits;
    2012 
    2013     if (!ToPrimitive(ctx, newval, depthTextureBits))
    2014         return;
    2015 
    2016     m->shadow.SetDepthTextureBits(depthTextureBits);
    2017 }
    2018 
    2019 jsval CRenderer::JSI_GetShadows(JSContext*)
    2020 {
    2021     return ToJSVal(m_Options.m_Shadows);
    2022 }
    2023 
    2024 void CRenderer::JSI_SetShadows(JSContext* ctx, jsval newval)
    2025 {
    2026     ToPrimitive(ctx, newval, m_Options.m_Shadows);
    2027     ReloadShaders();
    2028 }
    2029 
    2030 jsval CRenderer::JSI_GetShadowAlphaFix(JSContext*)
    2031 {
    2032     return ToJSVal(m_Options.m_ShadowAlphaFix);
    2033 }
    2034 
    2035 void CRenderer::JSI_SetShadowAlphaFix(JSContext* ctx, jsval newval)
    2036 {
    2037     if (!ToPrimitive(ctx, newval, m_Options.m_ShadowAlphaFix))
    2038         return;
    2039 
    2040     m->shadow.RecreateTexture();
    2041 }
    2042 
    2043 jsval CRenderer::JSI_GetShadowPCF(JSContext*)
    2044 {
    2045     return ToJSVal(m_Options.m_ShadowPCF);
    2046 }
    2047 
    2048 void CRenderer::JSI_SetShadowPCF(JSContext* ctx, jsval newval)
    2049 {
    2050     ToPrimitive(ctx, newval, m_Options.m_ShadowPCF);
    2051     ReloadShaders();
    2052 }
    2053 
    2054 jsval CRenderer::JSI_GetPreferGLSL(JSContext*)
    2055 {
    2056     return ToJSVal(m_Options.m_PreferGLSL);
    2057 }
    2058 
    2059 void CRenderer::JSI_SetPreferGLSL(JSContext* ctx, jsval newval)
    2060 {
    2061     ToPrimitive(ctx, newval, m_Options.m_PreferGLSL);
    2062     ReloadShaders();
    2063 }
    2064 
    2065 jsval CRenderer::JSI_GetSky(JSContext*)
    2066 {
    2067     return ToJSVal(m->skyManager.GetSkySet());
    2068 }
    2069 
    2070 void CRenderer::JSI_SetSky(JSContext* ctx, jsval newval)
    2071 {
    2072     CStrW skySet;
    2073     if (!ToPrimitive<CStrW>(ctx, newval, skySet)) return;
    2074     m->skyManager.SetSkySet(skySet);
    2075 }
    2076 
    2077 void CRenderer::ScriptingInit()
    2078 {
    2079     AddProperty(L"renderpath", &CRenderer::JSI_GetRenderPath, &CRenderer::JSI_SetRenderPath);
    2080     AddProperty(L"displayFrustum", &CRenderer::m_DisplayFrustum);
    2081     AddProperty(L"shadowZBias", &CRenderer::m_ShadowZBias);
    2082     AddProperty(L"shadowMapSize", &CRenderer::m_ShadowMapSize);
    2083     AddProperty(L"shadows", &CRenderer::JSI_GetShadows, &CRenderer::JSI_SetShadows);
    2084     AddProperty(L"depthTextureBits", &CRenderer::JSI_GetDepthTextureBits, &CRenderer::JSI_SetDepthTextureBits);
    2085     AddProperty(L"shadowAlphaFix", &CRenderer::JSI_GetShadowAlphaFix, &CRenderer::JSI_SetShadowAlphaFix);
    2086     AddProperty(L"shadowPCF", &CRenderer::JSI_GetShadowPCF, &CRenderer::JSI_SetShadowPCF);
    2087     AddProperty(L"preferGLSL", &CRenderer::JSI_GetPreferGLSL, &CRenderer::JSI_SetPreferGLSL);
    2088     AddProperty(L"skipSubmit", &CRenderer::m_SkipSubmit);
    2089     AddProperty(L"skySet", &CRenderer::JSI_GetSky, &CRenderer::JSI_SetSky);
    2090 
    2091     CJSObject<CRenderer>::ScriptingInit("Renderer");
    2092 }
    2093 
    2094 
    20951974CTextureManager& CRenderer::GetTextureManager()
    20961975{
    20971976    return m->textureManager;
  • source/renderer/Renderer.h

     
    2828#include "graphics/ShaderProgram.h"
    2929#include "lib/res/handle.h"
    3030#include "ps/Singleton.h"
    31 #include "scripting/ScriptableObject.h"
    3231
    3332#include "renderer/PostprocManager.h"
    3433#include "renderer/Scene.h"
    3534#include "renderer/TimeManager.h"
     35#include "scriptinterface/ScriptInterface.h"
    3636
    3737// necessary declarations
    3838class CLightEnv;
     
    7171
    7272class CRenderer :
    7373    public Singleton<CRenderer>,
    74     public CJSObject<CRenderer>,
    7574    private SceneCollector
    7675{
    7776public:
     
    8988        OPT_WATERSHADOW,
    9089        OPT_SHADOWPCF,
    9190        OPT_PARTICLES,
     91        OPT_PREFERGLSL,
    9292        OPT_SILHOUETTES,
    9393        OPT_SHOWSKY
    9494    };
     
    317317     */
    318318    const Caps& GetCapabilities() const { return m_Caps; }
    319319
    320     static void ScriptingInit();
     320    static void RegisterScriptFunctions(ScriptInterface& scriptInterface);
    321321
    322322protected:
    323323    friend struct CRendererInternals;
     
    335335    friend class ShaderInstancingModelRenderer;
    336336    friend class TerrainRenderer;
    337337
    338     // scripting
    339     // TODO: Perhaps we could have a version of AddLocalProperty for function-driven
    340     // properties? Then we could hide these function in the private implementation class.
    341     jsval JSI_GetRenderPath(JSContext*);
    342     void JSI_SetRenderPath(JSContext* ctx, jsval newval);
    343     jsval JSI_GetDepthTextureBits(JSContext*);
    344     void JSI_SetDepthTextureBits(JSContext* ctx, jsval newval);
    345     jsval JSI_GetShadows(JSContext*);
    346     void JSI_SetShadows(JSContext* ctx, jsval newval);
    347     jsval JSI_GetShadowAlphaFix(JSContext*);
    348     void JSI_SetShadowAlphaFix(JSContext* ctx, jsval newval);
    349     jsval JSI_GetShadowPCF(JSContext*);
    350     void JSI_SetShadowPCF(JSContext* ctx, jsval newval);
    351     jsval JSI_GetPreferGLSL(JSContext*);
    352     void JSI_SetPreferGLSL(JSContext* ctx, jsval newval);
    353     jsval JSI_GetSky(JSContext*);
    354     void JSI_SetSky(JSContext* ctx, jsval newval);
    355 
    356338    //BEGIN: Implementation of SceneCollector
    357339    void Submit(CPatch* patch);
    358340    void Submit(SOverlayLine* overlay);
  • source/renderer/scripting/JSInterface_Renderer.cpp

     
     1/* Copyright (C) 2013 Wildfire Games.
     2 * This file is part of 0 A.D.
     3 *
     4 * 0 A.D. is free software: you can redistribute it and/or modify
     5 * it under the terms of the GNU General Public License as published by
     6 * the Free Software Foundation, either version 2 of the License, or
     7 * (at your option) any later version.
     8 *
     9 * 0 A.D. is distributed in the hope that it will be useful,
     10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     12 * GNU General Public License for more details.
     13 *
     14 * You should have received a copy of the GNU General Public License
     15 * along with 0 A.D.  If not, see <http://www.gnu.org/licenses/>.
     16 */
     17
     18#include "precompiled.h"
     19
     20#include "JSInterface_Renderer.h"
     21#include "renderer/Renderer.h"
     22
     23#define IMPLEMENT_BOOLEAN_SCRIPT_SETTING(NAME) \
     24bool JSI_Renderer::Get##NAME##Enabled(void* UNUSED(cbdata)) \
     25{ \
     26    return g_Renderer.GetOptionBool(CRenderer::OPT_##NAME); \
     27} \
     28\
     29void JSI_Renderer::Set##NAME##Enabled(void* UNUSED(cbdata), bool Enabled) \
     30{ \
     31    g_Renderer.SetOptionBool(CRenderer::OPT_##NAME, Enabled); \
     32}
     33
     34IMPLEMENT_BOOLEAN_SCRIPT_SETTING(PARTICLES);
     35IMPLEMENT_BOOLEAN_SCRIPT_SETTING(PREFERGLSL);
     36IMPLEMENT_BOOLEAN_SCRIPT_SETTING(WATERNORMAL);
     37IMPLEMENT_BOOLEAN_SCRIPT_SETTING(SHADOWPCF);
     38IMPLEMENT_BOOLEAN_SCRIPT_SETTING(SHADOWS);
     39IMPLEMENT_BOOLEAN_SCRIPT_SETTING(WATERREALDEPTH);
     40IMPLEMENT_BOOLEAN_SCRIPT_SETTING(WATERREFLECTION);
     41IMPLEMENT_BOOLEAN_SCRIPT_SETTING(WATERREFRACTION);
     42IMPLEMENT_BOOLEAN_SCRIPT_SETTING(WATERFOAM);
     43IMPLEMENT_BOOLEAN_SCRIPT_SETTING(WATERCOASTALWAVES);
     44IMPLEMENT_BOOLEAN_SCRIPT_SETTING(WATERSHADOW);
     45IMPLEMENT_BOOLEAN_SCRIPT_SETTING(SILHOUETTES);
     46IMPLEMENT_BOOLEAN_SCRIPT_SETTING(SHOWSKY);
     47
     48#undef IMPLEMENT_BOOLEAN_SCRIPT_SETTING
     49
     50std::string JSI_Renderer::GetRenderPath(void* UNUSED(cbdata))
     51{
     52    return CRenderer::GetRenderPathName(g_Renderer.GetRenderPath());
     53}
     54
     55void JSI_Renderer::SetRenderPath(void* UNUSED(cbdata), std::string name)
     56{
     57    g_Renderer.SetRenderPath(CRenderer::GetRenderPathByName(name));
     58}
     59
     60
     61#define REGISTER_BOOLEAN_SCRIPT_SETTING(NAME) \
     62scriptInterface.RegisterFunction<bool, &JSI_Renderer::Get##NAME##Enabled>("Renderer_Get" #NAME "Enabled"); \
     63scriptInterface.RegisterFunction<void, bool, &JSI_Renderer::Set##NAME##Enabled>("Renderer_Set" #NAME "Enabled");
     64
     65void JSI_Renderer::RegisterScriptFunctions(ScriptInterface& scriptInterface)
     66{
     67    scriptInterface.RegisterFunction<std::string, &JSI_Renderer::GetRenderPath>("Renderer_GetRenderPath");
     68    scriptInterface.RegisterFunction<void, std::string, &JSI_Renderer::SetRenderPath>("Renderer_SetRenderPath");
     69    REGISTER_BOOLEAN_SCRIPT_SETTING(SHADOWS);
     70    REGISTER_BOOLEAN_SCRIPT_SETTING(SHADOWPCF);
     71    REGISTER_BOOLEAN_SCRIPT_SETTING(PARTICLES);
     72    REGISTER_BOOLEAN_SCRIPT_SETTING(PREFERGLSL);
     73    REGISTER_BOOLEAN_SCRIPT_SETTING(WATERNORMAL);
     74    REGISTER_BOOLEAN_SCRIPT_SETTING(WATERREALDEPTH);
     75    REGISTER_BOOLEAN_SCRIPT_SETTING(WATERREFLECTION);
     76    REGISTER_BOOLEAN_SCRIPT_SETTING(WATERREFRACTION);
     77    REGISTER_BOOLEAN_SCRIPT_SETTING(WATERFOAM);
     78    REGISTER_BOOLEAN_SCRIPT_SETTING(WATERCOASTALWAVES);
     79    REGISTER_BOOLEAN_SCRIPT_SETTING(WATERSHADOW);
     80    REGISTER_BOOLEAN_SCRIPT_SETTING(SILHOUETTES);
     81    REGISTER_BOOLEAN_SCRIPT_SETTING(SHOWSKY);
     82}
     83
     84#undef REGISTER_BOOLEAN_SCRIPT_SETTING
     85
  • source/renderer/scripting/JSInterface_Renderer.h

     
     1/* Copyright (C) 2013 Wildfire Games.
     2 * This file is part of 0 A.D.
     3 *
     4 * 0 A.D. is free software: you can redistribute it and/or modify
     5 * it under the terms of the GNU General Public License as published by
     6 * the Free Software Foundation, either version 2 of the License, or
     7 * (at your option) any later version.
     8 *
     9 * 0 A.D. is distributed in the hope that it will be useful,
     10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     12 * GNU General Public License for more details.
     13 *
     14 * You should have received a copy of the GNU General Public License
     15 * along with 0 A.D.  If not, see <http://www.gnu.org/licenses/>.
     16 */
     17
     18
     19#ifndef INCLUDED_JSINTERFACE_RENDERER
     20#define INCLUDED_JSINTERFACE_RENDERER
     21
     22#include "ps/CStr.h"
     23#include "scriptinterface/ScriptInterface.h"
     24
     25#define DECLARE_BOOLEAN_SCRIPT_SETTING(NAME) \
     26    bool Get##NAME##Enabled(void* cbdata); \
     27    void Set##NAME##Enabled(void* cbdata, bool Enabled);
     28
     29namespace JSI_Renderer
     30{
     31    std::string GetRenderPath(void* cbdata);
     32    void SetRenderPath(void* cbdata, std::string name);
     33
     34    DECLARE_BOOLEAN_SCRIPT_SETTING(SHADOWS);
     35    DECLARE_BOOLEAN_SCRIPT_SETTING(SHADOWPCF);
     36    DECLARE_BOOLEAN_SCRIPT_SETTING(PARTICLES);
     37    DECLARE_BOOLEAN_SCRIPT_SETTING(PREFERGLSL);
     38    DECLARE_BOOLEAN_SCRIPT_SETTING(WATERNORMAL);
     39    DECLARE_BOOLEAN_SCRIPT_SETTING(WATERREALDEPTH);
     40    DECLARE_BOOLEAN_SCRIPT_SETTING(WATERREFLECTION);
     41    DECLARE_BOOLEAN_SCRIPT_SETTING(WATERREFRACTION);
     42    DECLARE_BOOLEAN_SCRIPT_SETTING(WATERFOAM);
     43    DECLARE_BOOLEAN_SCRIPT_SETTING(WATERCOASTALWAVES);
     44    DECLARE_BOOLEAN_SCRIPT_SETTING(WATERSHADOW);
     45    DECLARE_BOOLEAN_SCRIPT_SETTING(SILHOUETTES);
     46    DECLARE_BOOLEAN_SCRIPT_SETTING(SHOWSKY);
     47
     48    void RegisterScriptFunctions(ScriptInterface& scriptInterface);
     49}
     50
     51#undef DECLARE_BOOLEAN_SCRIPT_SETTING
     52
     53#endif