1
0
forked from 0ad/0ad

# Added parameters to control water murkiness.

This was SVN commit r4013.
This commit is contained in:
Matei 2006-06-22 21:11:18 +00:00
parent 536d6f4cd3
commit 2b0e5d0b42
6 changed files with 51 additions and 4 deletions

View File

@ -1724,6 +1724,18 @@ void CRenderer::JSI_SetWaterShininess(JSContext* ctx, jsval newval)
m->waterManager.m_Shininess = value;
}
jsval CRenderer::JSI_GetWaterMurkiness(JSContext*)
{
return ToJSVal(m->waterManager.m_Murkiness);
}
void CRenderer::JSI_SetWaterMurkiness(JSContext* ctx, jsval newval)
{
float value;
if (!ToPrimitive<float>(ctx, newval, value)) return;
m->waterManager.m_Murkiness = value;
}
jsval CRenderer::JSI_GetWaterWaviness(JSContext*)
{
return ToJSVal(m->waterManager.m_Waviness);
@ -1764,6 +1776,7 @@ void CRenderer::ScriptingInit()
AddProperty(L"waterShininess", &CRenderer::JSI_GetWaterShininess, &CRenderer::JSI_SetWaterShininess);
AddProperty(L"waterWaviness", &CRenderer::JSI_GetWaterWaviness, &CRenderer::JSI_SetWaterWaviness);
AddProperty(L"waterRepeatPeriod", &CRenderer::JSI_GetWaterRepeatPeriod, &CRenderer::JSI_SetWaterRepeatPeriod);
AddProperty(L"waterMurkiness", &CRenderer::JSI_GetWaterMurkiness, &CRenderer::JSI_SetWaterMurkiness);
CJSObject<CRenderer>::ScriptingInit("Renderer");
}

View File

@ -319,6 +319,7 @@ protected:
friend class TerrainRenderer;
// scripting
static void ScriptingInit();
jsval JSI_GetFastPlayerColor(JSContext*);
void JSI_SetFastPlayerColor(JSContext* ctx, jsval newval);
jsval JSI_GetRenderPath(JSContext*);
@ -337,7 +338,8 @@ protected:
void JSI_SetWaterWaviness(JSContext* ctx, jsval newval);
jsval JSI_GetWaterRepeatPeriod(JSContext*);
void JSI_SetWaterRepeatPeriod(JSContext* ctx, jsval newval);
static void ScriptingInit();
jsval JSI_GetWaterMurkiness(JSContext*);
void JSI_SetWaterMurkiness(JSContext* ctx, jsval newval);
// patch rendering stuff
void RenderPatches();

View File

@ -474,6 +474,9 @@ void TerrainRenderer::RenderWater()
GLint sunColor = ogl_program_get_uniform_location( m->fancyWaterShader, "sunColor" );
GLint shininess = ogl_program_get_uniform_location( m->fancyWaterShader, "shininess" );
GLint waviness = ogl_program_get_uniform_location( m->fancyWaterShader, "waviness" );
GLint murkiness = ogl_program_get_uniform_location( m->fancyWaterShader, "murkiness" );
GLint fullDepth = ogl_program_get_uniform_location( m->fancyWaterShader, "fullDepth" );
GLint tint = ogl_program_get_uniform_location( m->fancyWaterShader, "tint" );
GLint cameraPos = ogl_program_get_uniform_location( m->fancyWaterShader, "cameraPos" );
GLint reflectionMatrix = ogl_program_get_uniform_location( m->fancyWaterShader, "reflectionMatrix" );
GLint refractionMatrix = ogl_program_get_uniform_location( m->fancyWaterShader, "refractionMatrix" );
@ -487,6 +490,9 @@ void TerrainRenderer::RenderWater()
pglUniform3fvARB( sunColor, 1, &lightEnv.m_SunColor.X );
pglUniform1fARB( shininess, WaterMgr->m_Shininess );
pglUniform1fARB( waviness, WaterMgr->m_Waviness );
pglUniform1fARB( murkiness, WaterMgr->m_Murkiness );
pglUniform1fARB( fullDepth, WaterMgr->m_WaterFullDepth );
pglUniform3fvARB( tint, 1, WaterMgr->m_WaterTint.FloatArray() );
pglUniformMatrix4fvARB( reflectionMatrix, 1, false, &WaterMgr->m_ReflectionMatrix._11 );
pglUniformMatrix4fvARB( refractionMatrix, 1, false, &WaterMgr->m_RefractionMatrix._11 );
pglUniform1iARB( normalMap, 0 ); // texture unit 0
@ -565,8 +571,11 @@ void TerrainRenderer::RenderWater()
{
pglVertexAttrib1fARB( vertexDepth, WaterMgr->m_WaterHeight - terrainHeight );
}
glColor4f(WaterMgr->m_WaterColor.r*losMod, WaterMgr->m_WaterColor.g*losMod, WaterMgr->m_WaterColor.b*losMod, alpha * FresnelScalar);
else
{
glColor4f(WaterMgr->m_WaterColor.r*losMod, WaterMgr->m_WaterColor.g*losMod,
WaterMgr->m_WaterColor.b*losMod, alpha * FresnelScalar);
}
pglMultiTexCoord2fARB(GL_TEXTURE0, vertX/repeatPeriod, vertZ/repeatPeriod);
glVertex3f(vertX, WaterMgr->m_WaterHeight, vertZ);
}

View File

@ -53,6 +53,8 @@ WaterManager::WaterManager()
m_WaterTexTimer = 0.0;
m_Shininess = 200.0f;
m_Waviness = 8.0f;
m_WaterTint = CColor(0.25f, 0.3f, 0.55f, 1.0f);
m_Murkiness = 0.3f;
m_RepeatPeriod = 16.0f;
for (uint i = 0; i < ARRAY_SIZE(m_WaterTexture); i++)

View File

@ -56,9 +56,11 @@ public:
CMatrix3D m_RefractionMatrix;
// Shader parameters for fancy water
CColor m_WaterTint;
float m_RepeatPeriod;
float m_Shininess;
float m_Waviness;
float m_Murkiness;
public:
WaterManager();

View File

@ -1037,6 +1037,24 @@ JSBool setWaterColor( JSContext* cx, JSObject* UNUSED(globalObject), uint argc,
return( JS_TRUE );
}
// Sets the water tint (used to tint reflections in fancy water)
JSBool setWaterTint( JSContext* cx, JSObject* UNUSED(globalObject), uint argc, jsval* argv, jsval* rval )
{
REQUIRE_PARAMS( 3, setWaterTint );
float r,g,b;
if(!ToPrimitive( g_ScriptingHost.GetContext(), argv[0], r )
|| !ToPrimitive( g_ScriptingHost.GetContext(), argv[1], g )
|| !ToPrimitive( g_ScriptingHost.GetContext(), argv[2], b ))
{
JS_ReportError( cx, "Invalid arguments" );
*rval = JSVAL_VOID;
return( JS_FALSE );
}
g_Renderer.GetWaterManager()->m_WaterTint = CColor(r, g, b, 1.0f);
*rval = JSVAL_VOID;
return( JS_TRUE );
}
// Sets the max water alpha (achieved when it is at WaterFullDepth or deeper)
JSBool setWaterMaxAlpha( JSContext* cx, JSObject* UNUSED(globalObject), uint argc, jsval* argv, jsval* rval )
{
@ -1203,7 +1221,8 @@ JSFunctionSpec ScriptFunctionTable[] =
JS_FUNC(toggleWater, toggleWater, 0)
JS_FUNC(setWaterHeight, setWaterHeight, 1)
JS_FUNC(getWaterHeight, getWaterHeight, 0)
JS_FUNC(setWaterColor, setWaterColor, 0)
JS_FUNC(setWaterColor, setWaterColor, 3)
JS_FUNC(setWaterTint, setWaterTint, 3)
JS_FUNC(setWaterMaxAlpha, setWaterMaxAlpha, 0)
JS_FUNC(setWaterFullDepth, setWaterFullDepth, 0)
JS_FUNC(setWaterAlphaOffset, setWaterAlphaOffset, 0)