From 2b0e5d0b42d74958cdc96d58db3f95038ecc3d65 Mon Sep 17 00:00:00 2001 From: Matei Date: Thu, 22 Jun 2006 21:11:18 +0000 Subject: [PATCH] # Added parameters to control water murkiness. This was SVN commit r4013. --- source/renderer/Renderer.cpp | 13 +++++++++++++ source/renderer/Renderer.h | 4 +++- source/renderer/TerrainRenderer.cpp | 13 +++++++++++-- source/renderer/WaterManager.cpp | 2 ++ source/renderer/WaterManager.h | 2 ++ source/scripting/ScriptGlue.cpp | 21 ++++++++++++++++++++- 6 files changed, 51 insertions(+), 4 deletions(-) diff --git a/source/renderer/Renderer.cpp b/source/renderer/Renderer.cpp index 7dc9cc705f..67498cdd8b 100644 --- a/source/renderer/Renderer.cpp +++ b/source/renderer/Renderer.cpp @@ -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(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::ScriptingInit("Renderer"); } diff --git a/source/renderer/Renderer.h b/source/renderer/Renderer.h index ae90d1e457..a01267233b 100644 --- a/source/renderer/Renderer.h +++ b/source/renderer/Renderer.h @@ -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(); diff --git a/source/renderer/TerrainRenderer.cpp b/source/renderer/TerrainRenderer.cpp index df2bc14542..3a88b41336 100644 --- a/source/renderer/TerrainRenderer.cpp +++ b/source/renderer/TerrainRenderer.cpp @@ -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); } diff --git a/source/renderer/WaterManager.cpp b/source/renderer/WaterManager.cpp index 91db60d105..3d8e176391 100644 --- a/source/renderer/WaterManager.cpp +++ b/source/renderer/WaterManager.cpp @@ -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++) diff --git a/source/renderer/WaterManager.h b/source/renderer/WaterManager.h index 213590774d..4158b4218e 100644 --- a/source/renderer/WaterManager.h +++ b/source/renderer/WaterManager.h @@ -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(); diff --git a/source/scripting/ScriptGlue.cpp b/source/scripting/ScriptGlue.cpp index 9bceecfd06..348cbe19c7 100644 --- a/source/scripting/ScriptGlue.cpp +++ b/source/scripting/ScriptGlue.cpp @@ -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)