1
0
forked from 0ad/0ad

Changes the Renderer to expose global functions to scripts instead of using CJSObject.

Fixes #2137
Refs #1886

This was SVN commit r13877.
This commit is contained in:
Yves 2013-09-21 08:24:45 +00:00
parent c0b84fb41f
commit 12e2428495
12 changed files with 187 additions and 195 deletions

View File

@ -28,22 +28,22 @@
<!-- Settings / shadows -->
<object size="0 10 100%-80 35" type="text" style="RightLabelText" ghost="true">Enable Shadows</object>
<object name="shadowsCheckbox" size="100%-56 15 100%-30 40" type="checkbox" style="StoneCrossBox" checked="true">
<action on="Load">if (renderer.shadows) this.checked = true; else this.checked = false;</action>
<action on="Press">renderer.shadows = this.checked;</action>
<action on="Load">this.checked = Engine.Renderer_GetShadowsEnabled();</action>
<action on="Press">Engine.Renderer_SetShadowsEnabled(this.checked);</action>
</object>
<!-- Settings / Shadow PCF -->
<object size="0 35 100%-80 60" type="text" style="RightLabelText" ghost="true">Enable Shadow Filtering</object>
<object name="shadowPCFCheckbox" size="100%-56 40 100%-30 65" type="checkbox" style="StoneCrossBox" checked="true">
<action on="Load">if (renderer.shadowPCF) this.checked = true; else this.checked = false;</action>
<action on="Press">renderer.shadowPCF = this.checked;</action>
<action on="Load">this.checked = Engine.Renderer_GetShadowPCFEnabled();</action>
<action on="Press">Engine.Renderer_SetShadowPCFEnabled(this.checked);</action>
</object>
<!-- Settings / Water -->
<!-- <object size="0 60 100%-80 85" type="text" style="RightLabelText" ghost="true">Enable Water Reflections</object>
<object name="fancyWaterCheckbox" size="100%-56 65 100%-30 90" type="checkbox" style="StoneCrossBox" checked="true">
<action on="Load">if (renderer.fancyWater) this.checked = true; else this.checked = false;</action>
<action on="Press">renderer.fancyWater = this.checked;</action>
<action on="Load">this.checked = Engine.Renderer_GetWaterNormalEnabled();</action>
<action on="Press">Engine.Renderer_SetWaterNormalEnabled(this.checked);</action>
</object>-->
<!-- Settings / Music-->

View File

@ -162,7 +162,7 @@ function onTick()
Engine.PushGuiPage("page_splashscreen.xml", { "page": "splashscreen" } );
// Warn about removing fixed render path
if (renderer.renderpath == "fixed")
if (Engine.Renderer_GetRenderPath() == "fixed")
messageBox(
600,
300,

View File

@ -64,14 +64,18 @@
<!-- Unit silhouettes -->
<object hotkey="silhouettes">
<action on="Press">
renderer.silhouettes = !renderer.silhouettes;
getGUIObjectByName("silhouettesCheckbox").checked = renderer.silhouettes;
var newSetting = !Engine.Renderer_GetSilhouettesEnabled();
Engine.Renderer_SetSilhouettesEnabled(newSetting);
getGUIObjectByName("silhouettesCheckbox").checked = newSetting;
</action>
</object>
<!-- Sky -->
<object hotkey="showsky">
<action on="Press">renderer.showsky = !renderer.showsky;</action>
<action on="Press">
var newSetting = !Engine.Renderer_GetShowSkyEnabled();
Engine.Renderer_SetShowSkyEnabled(newSetting);
</action>
</object>
<!-- Pause -->
@ -450,78 +454,78 @@
<!-- Settings / shadows -->
<object size="0 10 100%-80 35" type="text" style="RightLabelText" ghost="true">Enable Shadows</object>
<object name="shadowsCheckbox" size="100%-56 15 100%-30 40" type="checkbox" style="StoneCrossBox" checked="true">
<action on="Load">if (renderer.shadows) this.checked = true; else this.checked = false;</action>
<action on="Press">renderer.shadows = this.checked;</action>
<action on="Load">this.checked = Engine.Renderer_GetShadowsEnabled();</action>
<action on="Press">Engine.Renderer_SetShadowsEnabled(this.checked);</action>
</object>
<!-- Settings / Shadow PCF -->
<object size="0 35 100%-80 60" type="text" style="RightLabelText" ghost="true">Enable Shadow Filtering</object>
<object name="shadowPCFCheckbox" size="100%-56 40 100%-30 65" type="checkbox" style="StoneCrossBox" checked="true">
<action on="Load">if (renderer.shadowPCF) this.checked = true; else this.checked = false;</action>
<action on="Press">renderer.shadowPCF = this.checked;</action>
<action on="Load">this.checked = Engine.Renderer_GetShadowPCFEnabled();</action>
<action on="Press">Engine.Renderer_SetShadowPCFEnabled(this.checked);</action>
</object>
<!-- Settings / Water Normals -->
<object size="0 60 100%-80 85" type="text" style="RightLabelText" ghost="true">Water - HQ Waviness</object>
<object name="waterNormalCheckox" size="100%-56 65 100%-30 90" type="checkbox" style="StoneCrossBox" checked="true">
<action on="Load">if (renderer.waternormal) this.checked = true; else this.checked = false;</action>
<action on="Press">renderer.waternormal = this.checked;</action>
<action on="Load">this.checked = Engine.Renderer_GetWaterNormalEnabled();</action>
<action on="Press">Engine.Renderer_SetWaterNormalEnabled(this.checked);</action>
</object>
<!-- Settings / Real Depth -->
<object size="0 85 100%-80 110" type="text" style="RightLabelText" ghost="true">Water - Use Actual Depth</object>
<object name="waterRealDepthCheckbox" size="100%-56 90 100%-30 115" type="checkbox" style="StoneCrossBox" checked="true">
<action on="Load">if (renderer.waterrealdepth) this.checked = true; else this.checked = false;</action>
<action on="Press">renderer.waterrealdepth = this.checked; </action>
<action on="Load">this.checked = Engine.Renderer_GetWaterRealDepthEnabled();</action>
<action on="Press">Engine.Renderer_SetWaterRealDepthEnabled(this.checked);</action>
</object>
<!-- Settings / Reflection -->
<object size="0 110 100%-80 135" type="text" style="RightLabelText" ghost="true">Water - Enable Reflections</object>
<object name="waterReflectionCheckbox" size="100%-56 115 100%-30 140" type="checkbox" style="StoneCrossBox" checked="true">
<action on="Load">if (renderer.waterreflection) this.checked = true; else this.checked = false;</action>
<action on="Press">renderer.waterreflection = this.checked; </action>
<action on="Load">this.checked = Engine.Renderer_GetWaterReflectionEnabled();</action>
<action on="Press">Engine.Renderer_SetWaterReflectionEnabled(this.checked);</action>
</object>
<!-- Settings / Refraction -->
<object size="0 135 100%-80 160" type="text" style="RightLabelText" ghost="true">Water - Enable Refraction</object>
<object name="waterRefractionCheckbox" size="100%-56 140 100%-30 165" type="checkbox" style="StoneCrossBox" checked="true">
<action on="Load">if (renderer.waterrefraction) this.checked = true; else this.checked = false;</action>
<action on="Press">renderer.waterrefraction = this.checked; </action>
<action on="Load">this.checked = Engine.Renderer_GetWaterRefractionEnabled();</action>
<action on="Press">Engine.Renderer_SetWaterRefractionEnabled(this.checked);</action>
</object>
<!-- Settings / Foam -->
<object size="0 160 100%-80 185" type="text" style="RightLabelText" ghost="true">Water - Enable Shore Foam</object>
<object name="waterFoamCheckbox" size="100%-56 165 100%-30 190" type="checkbox" style="StoneCrossBox" checked="true">
<action on="Load">if (renderer.waterfoam) this.checked = true; else this.checked = false;</action>
<action on="Press">renderer.waterfoam = this.checked; </action>
<action on="Load">this.checked = Engine.Renderer_GetWaterFoamEnabled();</action>
<action on="Press">Engine.Renderer_SetWaterFoamEnabled(this.checked);</action>
</object>
<!-- Settings / Waves -->
<object size="0 185 100%-80 210" type="text" style="RightLabelText" ghost="true">Water - Enable Shore Waves</object>
<object name="waterCoastalWavesCheckbox" size="100%-56 190 100%-30 215" type="checkbox" style="StoneCrossBox" checked="true">
<action on="Load">if (renderer.watercoastalwaves) this.checked = true; else this.checked = false;</action>
<action on="Press">renderer.watercoastalwaves = this.checked; </action>
<action on="Load">this.checked = Engine.Renderer_GetWaterCoastalWavesEnabled();</action>
<action on="Press">Engine.Renderer_SetWaterCoastalWavesEnabled(this.checked);</action>
</object>
<!-- Settings / Shadows -->
<object size="0 210 100%-80 235" type="text" style="RightLabelText" ghost="true">Water - Use Surface Shadows</object>
<object name="waterShadowsCheckbox" size="100%-56 215 100%-30 240" type="checkbox" style="StoneCrossBox" checked="true">
<action on="Load">if (renderer.watershadow) this.checked = true; else this.checked = false;</action>
<action on="Press">renderer.watershadow = this.checked; </action>
<action on="Load">if (Engine.Renderer_GetWaterShadowEnabled()) this.checked = true; else this.checked = false;</action>
<action on="Press">Engine.Renderer_SetWaterShadowEnabled(this.checked);</action>
</object>
<!-- Settings / Particles -->
<object size="0 235 100%-80 260" type="text" style="RightLabelText" ghost="true">Enable Particles</object>
<object name="particlesCheckbox" size="100%-56 240 100%-30 265" type="checkbox" style="StoneCrossBox" checked="true">
<action on="Load">if (renderer.particles) this.checked = true; else this.checked = false;</action>
<action on="Press">renderer.particles = this.checked;</action>
<action on="Load">this.checked = Engine.Renderer_GetParticlesEnabled();</action>
<action on="Press">Engine.Renderer_SetParticlesEnabled(this.checked);</action>
</object>
<!-- Settings / Unit Silhouettes -->
<object size="0 260 100%-80 285" type="text" style="RightLabelText" ghost="true">Enable Unit Silhouettes</object>
<object name="silhouettesCheckbox" size="100%-56 265 100%-30 290" type="checkbox" style="StoneCrossBox" checked="true">
<action on="Load">if (renderer.silhouettes) this.checked = true; else this.checked = false;</action>
<action on="Press">renderer.silhouettes = this.checked;</action>
<action on="Load">this.checked = Engine.Renderer_GetSilhouettesEnabled();</action>
<action on="Press">Engine.Renderer_SetSilhouettesEnabled(this.checked);</action>
</object>
<!-- Settings / Music-->

View File

@ -600,6 +600,7 @@ function setup_all_libs ()
"graphics",
"graphics/scripting",
"renderer",
"renderer/scripting",
"third_party/mikktspace"
}
extern_libs = {

View File

@ -45,6 +45,7 @@
#include "ps/GameSetup/Atlas.h"
#include "ps/GameSetup/Config.h"
#include "ps/ConfigDB.h"
#include "renderer/scripting/JSInterface_Renderer.h"
#include "tools/atlas/GameInterface/GameLoop.h"
#include "simulation2/Simulation2.h"
@ -652,6 +653,7 @@ void SetBoundingBoxDebugOverlay(void* UNUSED(cbdata), bool enabled)
void GuiScriptingInit(ScriptInterface& scriptInterface)
{
JSI_GameView::RegisterScriptFunctions(scriptInterface);
JSI_Renderer::RegisterScriptFunctions(scriptInterface);
// GUI manager functions:
scriptInterface.RegisterFunction<CScriptVal, &GetActiveGui>("GetActiveGui");

View File

@ -321,9 +321,6 @@ static void RegisterJavascriptInterfaces()
// maths
JSI_Vector3D::init();
// renderer
CRenderer::ScriptingInit();
// ps
JSI_Console::init();
@ -1344,7 +1341,7 @@ void CancelLoad(const CStrW& message)
JSBool ok = JS_GetProperty(cx, g_GUI->GetScriptObject(), "cancelOnError", &fval);
ENSURE(ok);
jsval msgval = ToJSVal(message);
jsval msgval = ScriptInterface::ToJSVal(cx, message);
if (ok && !JSVAL_IS_VOID(fval))
JS_CallFunctionValue(cx, g_GUI->GetScriptObject(), fval, 1, &msgval, &rval);

View File

@ -472,25 +472,6 @@ CRenderer::CRenderer()
m_hCompositeAlphaMap = 0;
m_Stats.Reset();
AddLocalProperty(L"particles", &m_Options.m_Particles, false);
AddLocalProperty(L"waternormal", &m_Options.m_WaterNormal, false);
AddLocalProperty(L"waterrealdepth", &m_Options.m_WaterRealDepth, false);
AddLocalProperty(L"waterreflection", &m_Options.m_WaterReflection, false);
AddLocalProperty(L"waterrefraction", &m_Options.m_WaterRefraction, false);
AddLocalProperty(L"waterfoam", &m_Options.m_WaterFoam, false);
AddLocalProperty(L"watercoastalwaves", &m_Options.m_WaterCoastalWaves, false);
AddLocalProperty(L"watershadow", &m_Options.m_WaterShadow, false);
AddLocalProperty(L"horizonHeight", &m->skyManager.m_HorizonHeight, false);
AddLocalProperty(L"waterMurkiness", &m->waterManager.m_Murkiness, false);
AddLocalProperty(L"waterReflTintStrength", &m->waterManager.m_ReflectionTintStrength, false);
AddLocalProperty(L"waterRepeatPeriod", &m->waterManager.m_RepeatPeriod, false);
AddLocalProperty(L"waterShininess", &m->waterManager.m_Shininess, false);
AddLocalProperty(L"waterSpecularStrength", &m->waterManager.m_SpecularStrength, false);
AddLocalProperty(L"waterWaviness", &m->waterManager.m_Waviness, false);
AddLocalProperty(L"silhouettes", &m_Options.m_Silhouettes, false);
AddLocalProperty(L"showsky", &m_Options.m_ShowSky, false);
RegisterFileReloadFunc(ReloadChangedFileCB, this);
}
@ -721,6 +702,10 @@ void CRenderer::SetOptionBool(enum Option opt,bool value)
case OPT_PARTICLES:
m_Options.m_Particles = value;
break;
case OPT_PREFERGLSL:
m_Options.m_PreferGLSL = value;
MakeShadersDirty();
break;
case OPT_SILHOUETTES:
m_Options.m_Silhouettes = value;
break;
@ -760,6 +745,8 @@ bool CRenderer::GetOptionBool(enum Option opt) const
return m_Options.m_ShadowPCF;
case OPT_PARTICLES:
return m_Options.m_Particles;
case OPT_PREFERGLSL:
return m_Options.m_PreferGLSL;
case OPT_SILHOUETTES:
return m_Options.m_Silhouettes;
case OPT_SHOWSKY:
@ -1983,115 +1970,6 @@ void CRenderer::MakeShadersDirty()
m->ShadersDirty = true;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
// Scripting Interface
jsval CRenderer::JSI_GetRenderPath(JSContext*)
{
return ToJSVal(GetRenderPathName(m_Options.m_RenderPath));
}
void CRenderer::JSI_SetRenderPath(JSContext* ctx, jsval newval)
{
CStr name;
if (!ToPrimitive(ctx, newval, name))
return;
SetRenderPath(GetRenderPathByName(name));
}
jsval CRenderer::JSI_GetDepthTextureBits(JSContext*)
{
return ToJSVal(m->shadow.GetDepthTextureBits());
}
void CRenderer::JSI_SetDepthTextureBits(JSContext* ctx, jsval newval)
{
int depthTextureBits;
if (!ToPrimitive(ctx, newval, depthTextureBits))
return;
m->shadow.SetDepthTextureBits(depthTextureBits);
}
jsval CRenderer::JSI_GetShadows(JSContext*)
{
return ToJSVal(m_Options.m_Shadows);
}
void CRenderer::JSI_SetShadows(JSContext* ctx, jsval newval)
{
ToPrimitive(ctx, newval, m_Options.m_Shadows);
ReloadShaders();
}
jsval CRenderer::JSI_GetShadowAlphaFix(JSContext*)
{
return ToJSVal(m_Options.m_ShadowAlphaFix);
}
void CRenderer::JSI_SetShadowAlphaFix(JSContext* ctx, jsval newval)
{
if (!ToPrimitive(ctx, newval, m_Options.m_ShadowAlphaFix))
return;
m->shadow.RecreateTexture();
}
jsval CRenderer::JSI_GetShadowPCF(JSContext*)
{
return ToJSVal(m_Options.m_ShadowPCF);
}
void CRenderer::JSI_SetShadowPCF(JSContext* ctx, jsval newval)
{
ToPrimitive(ctx, newval, m_Options.m_ShadowPCF);
ReloadShaders();
}
jsval CRenderer::JSI_GetPreferGLSL(JSContext*)
{
return ToJSVal(m_Options.m_PreferGLSL);
}
void CRenderer::JSI_SetPreferGLSL(JSContext* ctx, jsval newval)
{
ToPrimitive(ctx, newval, m_Options.m_PreferGLSL);
ReloadShaders();
}
jsval CRenderer::JSI_GetSky(JSContext*)
{
return ToJSVal(m->skyManager.GetSkySet());
}
void CRenderer::JSI_SetSky(JSContext* ctx, jsval newval)
{
CStrW skySet;
if (!ToPrimitive<CStrW>(ctx, newval, skySet)) return;
m->skyManager.SetSkySet(skySet);
}
void CRenderer::ScriptingInit()
{
AddProperty(L"renderpath", &CRenderer::JSI_GetRenderPath, &CRenderer::JSI_SetRenderPath);
AddProperty(L"displayFrustum", &CRenderer::m_DisplayFrustum);
AddProperty(L"shadowZBias", &CRenderer::m_ShadowZBias);
AddProperty(L"shadowMapSize", &CRenderer::m_ShadowMapSize);
AddProperty(L"shadows", &CRenderer::JSI_GetShadows, &CRenderer::JSI_SetShadows);
AddProperty(L"depthTextureBits", &CRenderer::JSI_GetDepthTextureBits, &CRenderer::JSI_SetDepthTextureBits);
AddProperty(L"shadowAlphaFix", &CRenderer::JSI_GetShadowAlphaFix, &CRenderer::JSI_SetShadowAlphaFix);
AddProperty(L"shadowPCF", &CRenderer::JSI_GetShadowPCF, &CRenderer::JSI_SetShadowPCF);
AddProperty(L"preferGLSL", &CRenderer::JSI_GetPreferGLSL, &CRenderer::JSI_SetPreferGLSL);
AddProperty(L"skipSubmit", &CRenderer::m_SkipSubmit);
AddProperty(L"skySet", &CRenderer::JSI_GetSky, &CRenderer::JSI_SetSky);
CJSObject<CRenderer>::ScriptingInit("Renderer");
}
CTextureManager& CRenderer::GetTextureManager()
{
return m->textureManager;

View File

@ -28,11 +28,11 @@
#include "graphics/ShaderProgram.h"
#include "lib/res/handle.h"
#include "ps/Singleton.h"
#include "scripting/ScriptableObject.h"
#include "renderer/PostprocManager.h"
#include "renderer/Scene.h"
#include "renderer/TimeManager.h"
#include "scriptinterface/ScriptInterface.h"
// necessary declarations
class CLightEnv;
@ -71,7 +71,6 @@ struct CRendererInternals;
class CRenderer :
public Singleton<CRenderer>,
public CJSObject<CRenderer>,
private SceneCollector
{
public:
@ -89,6 +88,7 @@ public:
OPT_WATERSHADOW,
OPT_SHADOWPCF,
OPT_PARTICLES,
OPT_PREFERGLSL,
OPT_SILHOUETTES,
OPT_SHOWSKY
};
@ -317,7 +317,7 @@ public:
*/
const Caps& GetCapabilities() const { return m_Caps; }
static void ScriptingInit();
static void RegisterScriptFunctions(ScriptInterface& scriptInterface);
protected:
friend struct CRendererInternals;
@ -335,24 +335,6 @@ protected:
friend class ShaderInstancingModelRenderer;
friend class TerrainRenderer;
// scripting
// TODO: Perhaps we could have a version of AddLocalProperty for function-driven
// properties? Then we could hide these function in the private implementation class.
jsval JSI_GetRenderPath(JSContext*);
void JSI_SetRenderPath(JSContext* ctx, jsval newval);
jsval JSI_GetDepthTextureBits(JSContext*);
void JSI_SetDepthTextureBits(JSContext* ctx, jsval newval);
jsval JSI_GetShadows(JSContext*);
void JSI_SetShadows(JSContext* ctx, jsval newval);
jsval JSI_GetShadowAlphaFix(JSContext*);
void JSI_SetShadowAlphaFix(JSContext* ctx, jsval newval);
jsval JSI_GetShadowPCF(JSContext*);
void JSI_SetShadowPCF(JSContext* ctx, jsval newval);
jsval JSI_GetPreferGLSL(JSContext*);
void JSI_SetPreferGLSL(JSContext* ctx, jsval newval);
jsval JSI_GetSky(JSContext*);
void JSI_SetSky(JSContext* ctx, jsval newval);
//BEGIN: Implementation of SceneCollector
void Submit(CPatch* patch);
void Submit(SOverlayLine* overlay);

View File

@ -0,0 +1,85 @@
/* Copyright (C) 2013 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* 0 A.D. is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
*/
#include "precompiled.h"
#include "JSInterface_Renderer.h"
#include "renderer/Renderer.h"
#define IMPLEMENT_BOOLEAN_SCRIPT_SETTING(NAME, SCRIPTNAME) \
bool JSI_Renderer::Get##SCRIPTNAME##Enabled(void* UNUSED(cbdata)) \
{ \
return g_Renderer.GetOptionBool(CRenderer::OPT_##NAME); \
} \
\
void JSI_Renderer::Set##SCRIPTNAME##Enabled(void* UNUSED(cbdata), bool Enabled) \
{ \
g_Renderer.SetOptionBool(CRenderer::OPT_##NAME, Enabled); \
}
IMPLEMENT_BOOLEAN_SCRIPT_SETTING(PARTICLES, Particles);
IMPLEMENT_BOOLEAN_SCRIPT_SETTING(PREFERGLSL, PreferGLSL);
IMPLEMENT_BOOLEAN_SCRIPT_SETTING(WATERNORMAL, WaterNormal);
IMPLEMENT_BOOLEAN_SCRIPT_SETTING(SHADOWPCF, ShadowPCF);
IMPLEMENT_BOOLEAN_SCRIPT_SETTING(SHADOWS, Shadows);
IMPLEMENT_BOOLEAN_SCRIPT_SETTING(WATERREALDEPTH, WaterRealDepth);
IMPLEMENT_BOOLEAN_SCRIPT_SETTING(WATERREFLECTION, WaterReflection);
IMPLEMENT_BOOLEAN_SCRIPT_SETTING(WATERREFRACTION, WaterRefraction);
IMPLEMENT_BOOLEAN_SCRIPT_SETTING(WATERFOAM, WaterFoam);
IMPLEMENT_BOOLEAN_SCRIPT_SETTING(WATERCOASTALWAVES, WaterCoastalWaves);
IMPLEMENT_BOOLEAN_SCRIPT_SETTING(WATERSHADOW, WaterShadow);
IMPLEMENT_BOOLEAN_SCRIPT_SETTING(SILHOUETTES, Silhouettes);
IMPLEMENT_BOOLEAN_SCRIPT_SETTING(SHOWSKY, ShowSky);
#undef IMPLEMENT_BOOLEAN_SCRIPT_SETTING
std::string JSI_Renderer::GetRenderPath(void* UNUSED(cbdata))
{
return CRenderer::GetRenderPathName(g_Renderer.GetRenderPath());
}
void JSI_Renderer::SetRenderPath(void* UNUSED(cbdata), std::string name)
{
g_Renderer.SetRenderPath(CRenderer::GetRenderPathByName(name));
}
#define REGISTER_BOOLEAN_SCRIPT_SETTING(NAME) \
scriptInterface.RegisterFunction<bool, &JSI_Renderer::Get##NAME##Enabled>("Renderer_Get" #NAME "Enabled"); \
scriptInterface.RegisterFunction<void, bool, &JSI_Renderer::Set##NAME##Enabled>("Renderer_Set" #NAME "Enabled");
void JSI_Renderer::RegisterScriptFunctions(ScriptInterface& scriptInterface)
{
scriptInterface.RegisterFunction<std::string, &JSI_Renderer::GetRenderPath>("Renderer_GetRenderPath");
scriptInterface.RegisterFunction<void, std::string, &JSI_Renderer::SetRenderPath>("Renderer_SetRenderPath");
REGISTER_BOOLEAN_SCRIPT_SETTING(Shadows);
REGISTER_BOOLEAN_SCRIPT_SETTING(ShadowPCF);
REGISTER_BOOLEAN_SCRIPT_SETTING(Particles);
REGISTER_BOOLEAN_SCRIPT_SETTING(PreferGLSL);
REGISTER_BOOLEAN_SCRIPT_SETTING(WaterNormal);
REGISTER_BOOLEAN_SCRIPT_SETTING(WaterRealDepth);
REGISTER_BOOLEAN_SCRIPT_SETTING(WaterReflection);
REGISTER_BOOLEAN_SCRIPT_SETTING(WaterRefraction);
REGISTER_BOOLEAN_SCRIPT_SETTING(WaterFoam);
REGISTER_BOOLEAN_SCRIPT_SETTING(WaterCoastalWaves);
REGISTER_BOOLEAN_SCRIPT_SETTING(WaterShadow);
REGISTER_BOOLEAN_SCRIPT_SETTING(Silhouettes);
REGISTER_BOOLEAN_SCRIPT_SETTING(ShowSky);
}
#undef REGISTER_BOOLEAN_SCRIPT_SETTING

View File

@ -0,0 +1,52 @@
/* Copyright (C) 2013 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* 0 A.D. is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef INCLUDED_JSINTERFACE_RENDERER
#define INCLUDED_JSINTERFACE_RENDERER
class ScriptInterface;
#define DECLARE_BOOLEAN_SCRIPT_SETTING(NAME) \
bool Get##NAME##Enabled(void* cbdata); \
void Set##NAME##Enabled(void* cbdata, bool Enabled);
namespace JSI_Renderer
{
std::string GetRenderPath(void* cbdata);
void SetRenderPath(void* cbdata, std::string name);
DECLARE_BOOLEAN_SCRIPT_SETTING(Shadows);
DECLARE_BOOLEAN_SCRIPT_SETTING(ShadowPCF);
DECLARE_BOOLEAN_SCRIPT_SETTING(Particles);
DECLARE_BOOLEAN_SCRIPT_SETTING(PreferGLSL);
DECLARE_BOOLEAN_SCRIPT_SETTING(WaterNormal);
DECLARE_BOOLEAN_SCRIPT_SETTING(WaterRealDepth);
DECLARE_BOOLEAN_SCRIPT_SETTING(WaterReflection);
DECLARE_BOOLEAN_SCRIPT_SETTING(WaterRefraction);
DECLARE_BOOLEAN_SCRIPT_SETTING(WaterFoam);
DECLARE_BOOLEAN_SCRIPT_SETTING(WaterCoastalWaves);
DECLARE_BOOLEAN_SCRIPT_SETTING(WaterShadow);
DECLARE_BOOLEAN_SCRIPT_SETTING(Silhouettes);
DECLARE_BOOLEAN_SCRIPT_SETTING(ShowSky);
void RegisterScriptFunctions(ScriptInterface& scriptInterface);
}
#undef DECLARE_BOOLEAN_SCRIPT_SETTING
#endif

View File

@ -408,15 +408,6 @@ JSFunctionSpec ScriptFunctionTable[] =
// property accessors
//-----------------------------------------------------------------------------
JSBool GetRenderer(JSContext* UNUSED(cx), JSObject* UNUSED(obj), jsid UNUSED(id), jsval* vp)
{
if (CRenderer::IsInitialised())
*vp = OBJECT_TO_JSVAL(g_Renderer.GetScript());
else
*vp = JSVAL_NULL;
return JS_TRUE;
}
enum ScriptGlobalTinyIDs
{
@ -430,7 +421,6 @@ enum ScriptGlobalTinyIDs
JSPropertySpec ScriptGlobalTable[] =
{
{ "console" , GLOBAL_CONSOLE, JSPROP_PERMANENT|JSPROP_READONLY, JSI_Console::getConsole, 0 },
{ "renderer" , 0, JSPROP_PERMANENT|JSPROP_READONLY, GetRenderer, 0 },
// end of table marker
{ 0, 0, 0, 0, 0 },

View File

@ -33,6 +33,7 @@
#include "ps/GameSetup/Config.h"
#include "ps/GameSetup/GameSetup.h"
#include "renderer/Renderer.h"
#include "scripting/ScriptingHost.h"
extern void (*Atlas_GLSwapBuffers)(void* context);