summaryrefslogtreecommitdiff
path: root/indra/newview/llsky.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llsky.cpp')
-rw-r--r--indra/newview/llsky.cpp666
1 files changed, 333 insertions, 333 deletions
diff --git a/indra/newview/llsky.cpp b/indra/newview/llsky.cpp
index f6382bf38a..2e73e47e05 100644
--- a/indra/newview/llsky.cpp
+++ b/indra/newview/llsky.cpp
@@ -1,333 +1,333 @@
-/**
- * @file llsky.cpp
- * @brief IndraWorld sky class
- *
- * $LicenseInfo:firstyear=2000&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-// Ideas:
-// -haze should be controlled by global query from sims
-// -need secondary optical effects on sun (flare)
-// -stars should be brought down from sims
-// -star intensity should be driven by global ambient level from sims,
-// so that eclipses, etc can be easily done.
-//
-
-#include "llviewerprecompiledheaders.h"
-
-#include "llsky.h"
-
-// linden library includes
-#include "llerror.h"
-#include "llmath.h"
-#include "math.h"
-#include "v4color.h"
-
-#include "llviewerobjectlist.h"
-#include "llviewerobject.h"
-#include "llviewercamera.h"
-#include "pipeline.h"
-#include "lldrawpool.h"
-
-#include "llvosky.h"
-#include "llcubemap.h"
-#include "llviewercontrol.h"
-#include "llenvironment.h"
-#include "llvoavatarself.h"
-#include "llvowlsky.h"
-
-F32 azimuth_from_vector(const LLVector3 &v);
-F32 elevation_from_vector(const LLVector3 &v);
-
-LLSky gSky;
-
-// ---------------- LLSky ----------------
-//////////////////////////////////////////////////////////////////////
-// Construction/Destruction
-//////////////////////////////////////////////////////////////////////
-
-LLSky::LLSky()
-{
- // Set initial clear color to black
- // Set fog color
- mFogColor.mV[VRED] = mFogColor.mV[VGREEN] = mFogColor.mV[VBLUE] = 0.5f;
- mFogColor.mV[VALPHA] = 0.0f;
-
- mLightingGeneration = 0;
- mUpdatedThisFrame = true;
-}
-
-
-LLSky::~LLSky()
-{
-}
-
-void LLSky::cleanup()
-{
- mVOSkyp = NULL;
- mVOWLSkyp = NULL;
-}
-
-void LLSky::destroyGL()
-{
- if (!mVOSkyp.isNull() && mVOSkyp->getCubeMap())
- {
- mVOSkyp->cleanupGL();
- }
- if (mVOWLSkyp.notNull())
- {
- mVOWLSkyp->cleanupGL();
- }
-}
-
-void LLSky::restoreGL()
-{
- if (mVOSkyp)
- {
- mVOSkyp->restoreGL();
- }
- if (mVOWLSkyp)
- {
- mVOWLSkyp->restoreGL();
- }
-}
-
-void LLSky::resetVertexBuffers()
-{
- if (gSky.mVOSkyp.notNull())
- {
- gPipeline.resetVertexBuffers(gSky.mVOSkyp->mDrawable);
- gPipeline.markRebuild(gSky.mVOSkyp->mDrawable, LLDrawable::REBUILD_ALL);
- }
- if (gSky.mVOWLSkyp.notNull())
- {
- gSky.mVOWLSkyp->resetVertexBuffers();
- gPipeline.resetVertexBuffers(gSky.mVOWLSkyp->mDrawable);
- gPipeline.markRebuild(gSky.mVOWLSkyp->mDrawable, LLDrawable::REBUILD_ALL);
- }
-}
-
-void LLSky::setSunScale(F32 sun_scale)
-{
- if(mVOSkyp.notNull())
- {
- mVOSkyp->setSunScale(sun_scale);
- }
-}
-
-void LLSky::setMoonScale(F32 moon_scale)
-{
- if(mVOSkyp.notNull())
- {
- mVOSkyp->setMoonScale(moon_scale);
- }
-}
-
-void LLSky::setSunTextures(const LLUUID& sun_texture, const LLUUID& sun_texture_next)
-{
- if(mVOSkyp.notNull()) {
- mVOSkyp->setSunTextures(sun_texture, sun_texture_next);
- }
-}
-
-void LLSky::setMoonTextures(const LLUUID& moon_texture, const LLUUID& moon_texture_next)
-{
- if(mVOSkyp.notNull()) {
- mVOSkyp->setMoonTextures(moon_texture, moon_texture_next);
- }
-}
-
-void LLSky::setCloudNoiseTextures(const LLUUID& cloud_noise_texture, const LLUUID& cloud_noise_texture_next)
-{
- if(mVOSkyp.notNull()) {
- mVOSkyp->setCloudNoiseTextures(cloud_noise_texture, cloud_noise_texture_next);
- }
-}
-
-void LLSky::setBloomTextures(const LLUUID& bloom_texture, const LLUUID& bloom_texture_next)
-{
- if(mVOSkyp.notNull()) {
- mVOSkyp->setBloomTextures(bloom_texture, bloom_texture_next);
- }
-}
-
-void LLSky::setSunAndMoonDirectionsCFR(const LLVector3 &sun_direction, const LLVector3 &moon_direction)
-{
- if(mVOSkyp.notNull()) {
- mVOSkyp->setSunAndMoonDirectionsCFR(sun_direction, moon_direction);
- }
-}
-
-void LLSky::setSunDirectionCFR(const LLVector3 &sun_direction)
-{
- if(mVOSkyp.notNull()) {
- mVOSkyp->setSunDirectionCFR(sun_direction);
- }
-}
-
-void LLSky::setMoonDirectionCFR(const LLVector3 &moon_direction)
-{
- if(mVOSkyp.notNull()) {
- mVOSkyp->setMoonDirectionCFR(moon_direction);
- }
-}
-
-//////////////////////////////////////////////////////////////////////
-// Public Methods
-//////////////////////////////////////////////////////////////////////
-
-void LLSky::init()
-{
- mVOWLSkyp = static_cast<LLVOWLSky*>(gObjectList.createObjectViewer(LLViewerObject::LL_VO_WL_SKY, NULL));
- mVOWLSkyp->init();
- gPipeline.createObject(mVOWLSkyp.get());
-
- mVOSkyp = (LLVOSky *)gObjectList.createObjectViewer(LLViewerObject::LL_VO_SKY, NULL);
- mVOSkyp->init();
- gPipeline.createObject(mVOSkyp.get());
-
- gSky.setFogRatio(gSavedSettings.getF32("RenderFogRatio"));
-
- mUpdatedThisFrame = true;
-}
-
-
-void LLSky::setCloudDensityAtAgent(F32 cloud_density)
-{
- if (mVOSkyp)
- {
- mVOSkyp->setCloudDensity(cloud_density);
- }
-}
-
-
-void LLSky::setWind(const LLVector3& average_wind)
-{
- if (mVOSkyp)
- {
- mVOSkyp->setWind(average_wind);
- }
-}
-
-void LLSky::addSunMoonBeacons()
-{
- if (!gAgentAvatarp || !mVOSkyp) return;
-
- static LLUICachedControl<bool> show_sun_beacon("sunbeacon", false);
- static LLUICachedControl<bool> show_moon_beacon("moonbeacon", false);
-
- if (show_sun_beacon)
- {
- renderSunMoonBeacons(gAgentAvatarp->getPositionAgent(), mVOSkyp->getSun().getDirection(), LLColor4(1.f, 0.5f, 0.f, 0.5f));
- }
- if (show_moon_beacon)
- {
- renderSunMoonBeacons(gAgentAvatarp->getPositionAgent(), mVOSkyp->getMoon().getDirection(), LLColor4(1.f, 0.f, 0.8f, 0.5f));
- }
-}
-
-//////////////////////////////////////////////////////////////////////
-// Private Methods
-//////////////////////////////////////////////////////////////////////
-
-
-LLColor4 LLSky::getSkyFogColor() const
-{
- if (mVOSkyp)
- {
- return mVOSkyp->getSkyFogColor();
- }
-
- return LLColor4(1.f, 1.f, 1.f, 1.f);
-}
-
-void LLSky::updateFog(const F32 distance)
-{
- if (mVOSkyp)
- {
- mVOSkyp->updateFog(distance);
- }
-}
-
-void LLSky::updateCull()
-{
- // *TODO: do culling for wl sky properly -Brad
-}
-
-void LLSky::updateSky()
-{
- if (!gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_SKY))
- {
- return;
- }
- if (mVOSkyp)
- {
- mVOSkyp->updateSky();
- }
-}
-
-
-void LLSky::setFogRatio(const F32 fog_ratio)
-{
- if (mVOSkyp)
- {
- mVOSkyp->setFogRatio(fog_ratio);
- }
-}
-
-
-F32 LLSky::getFogRatio() const
-{
- if (mVOSkyp)
- {
- return mVOSkyp->getFogRatio();
- }
- else
- {
- return 0.f;
- }
-}
-
-
-// Returns angle (DEGREES) between the horizontal plane and "v",
-// where the angle is negative when v.mV[VZ] < 0.0f
-F32 elevation_from_vector(const LLVector3 &v)
-{
- F32 elevation = 0.0f;
- F32 xy_component = (F32) sqrt(v.mV[VX] * v.mV[VX] + v.mV[VY] * v.mV[VY]);
- if (xy_component != 0.0f)
- {
- elevation = RAD_TO_DEG * (F32) atan(v.mV[VZ]/xy_component);
- }
- else
- {
- if (v.mV[VZ] > 0.f)
- {
- elevation = 90.f;
- }
- else
- {
- elevation = -90.f;
- }
- }
- return elevation;
-}
+/**
+ * @file llsky.cpp
+ * @brief IndraWorld sky class
+ *
+ * $LicenseInfo:firstyear=2000&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+// Ideas:
+// -haze should be controlled by global query from sims
+// -need secondary optical effects on sun (flare)
+// -stars should be brought down from sims
+// -star intensity should be driven by global ambient level from sims,
+// so that eclipses, etc can be easily done.
+//
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llsky.h"
+
+// linden library includes
+#include "llerror.h"
+#include "llmath.h"
+#include "math.h"
+#include "v4color.h"
+
+#include "llviewerobjectlist.h"
+#include "llviewerobject.h"
+#include "llviewercamera.h"
+#include "pipeline.h"
+#include "lldrawpool.h"
+
+#include "llvosky.h"
+#include "llcubemap.h"
+#include "llviewercontrol.h"
+#include "llenvironment.h"
+#include "llvoavatarself.h"
+#include "llvowlsky.h"
+
+F32 azimuth_from_vector(const LLVector3 &v);
+F32 elevation_from_vector(const LLVector3 &v);
+
+LLSky gSky;
+
+// ---------------- LLSky ----------------
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+LLSky::LLSky()
+{
+ // Set initial clear color to black
+ // Set fog color
+ mFogColor.mV[VRED] = mFogColor.mV[VGREEN] = mFogColor.mV[VBLUE] = 0.5f;
+ mFogColor.mV[VALPHA] = 0.0f;
+
+ mLightingGeneration = 0;
+ mUpdatedThisFrame = true;
+}
+
+
+LLSky::~LLSky()
+{
+}
+
+void LLSky::cleanup()
+{
+ mVOSkyp = NULL;
+ mVOWLSkyp = NULL;
+}
+
+void LLSky::destroyGL()
+{
+ if (!mVOSkyp.isNull() && mVOSkyp->getCubeMap())
+ {
+ mVOSkyp->cleanupGL();
+ }
+ if (mVOWLSkyp.notNull())
+ {
+ mVOWLSkyp->cleanupGL();
+ }
+}
+
+void LLSky::restoreGL()
+{
+ if (mVOSkyp)
+ {
+ mVOSkyp->restoreGL();
+ }
+ if (mVOWLSkyp)
+ {
+ mVOWLSkyp->restoreGL();
+ }
+}
+
+void LLSky::resetVertexBuffers()
+{
+ if (gSky.mVOSkyp.notNull())
+ {
+ gPipeline.resetVertexBuffers(gSky.mVOSkyp->mDrawable);
+ gPipeline.markRebuild(gSky.mVOSkyp->mDrawable, LLDrawable::REBUILD_ALL);
+ }
+ if (gSky.mVOWLSkyp.notNull())
+ {
+ gSky.mVOWLSkyp->resetVertexBuffers();
+ gPipeline.resetVertexBuffers(gSky.mVOWLSkyp->mDrawable);
+ gPipeline.markRebuild(gSky.mVOWLSkyp->mDrawable, LLDrawable::REBUILD_ALL);
+ }
+}
+
+void LLSky::setSunScale(F32 sun_scale)
+{
+ if(mVOSkyp.notNull())
+ {
+ mVOSkyp->setSunScale(sun_scale);
+ }
+}
+
+void LLSky::setMoonScale(F32 moon_scale)
+{
+ if(mVOSkyp.notNull())
+ {
+ mVOSkyp->setMoonScale(moon_scale);
+ }
+}
+
+void LLSky::setSunTextures(const LLUUID& sun_texture, const LLUUID& sun_texture_next)
+{
+ if(mVOSkyp.notNull()) {
+ mVOSkyp->setSunTextures(sun_texture, sun_texture_next);
+ }
+}
+
+void LLSky::setMoonTextures(const LLUUID& moon_texture, const LLUUID& moon_texture_next)
+{
+ if(mVOSkyp.notNull()) {
+ mVOSkyp->setMoonTextures(moon_texture, moon_texture_next);
+ }
+}
+
+void LLSky::setCloudNoiseTextures(const LLUUID& cloud_noise_texture, const LLUUID& cloud_noise_texture_next)
+{
+ if(mVOSkyp.notNull()) {
+ mVOSkyp->setCloudNoiseTextures(cloud_noise_texture, cloud_noise_texture_next);
+ }
+}
+
+void LLSky::setBloomTextures(const LLUUID& bloom_texture, const LLUUID& bloom_texture_next)
+{
+ if(mVOSkyp.notNull()) {
+ mVOSkyp->setBloomTextures(bloom_texture, bloom_texture_next);
+ }
+}
+
+void LLSky::setSunAndMoonDirectionsCFR(const LLVector3 &sun_direction, const LLVector3 &moon_direction)
+{
+ if(mVOSkyp.notNull()) {
+ mVOSkyp->setSunAndMoonDirectionsCFR(sun_direction, moon_direction);
+ }
+}
+
+void LLSky::setSunDirectionCFR(const LLVector3 &sun_direction)
+{
+ if(mVOSkyp.notNull()) {
+ mVOSkyp->setSunDirectionCFR(sun_direction);
+ }
+}
+
+void LLSky::setMoonDirectionCFR(const LLVector3 &moon_direction)
+{
+ if(mVOSkyp.notNull()) {
+ mVOSkyp->setMoonDirectionCFR(moon_direction);
+ }
+}
+
+//////////////////////////////////////////////////////////////////////
+// Public Methods
+//////////////////////////////////////////////////////////////////////
+
+void LLSky::init()
+{
+ mVOWLSkyp = static_cast<LLVOWLSky*>(gObjectList.createObjectViewer(LLViewerObject::LL_VO_WL_SKY, NULL));
+ mVOWLSkyp->init();
+ gPipeline.createObject(mVOWLSkyp.get());
+
+ mVOSkyp = (LLVOSky *)gObjectList.createObjectViewer(LLViewerObject::LL_VO_SKY, NULL);
+ mVOSkyp->init();
+ gPipeline.createObject(mVOSkyp.get());
+
+ gSky.setFogRatio(gSavedSettings.getF32("RenderFogRatio"));
+
+ mUpdatedThisFrame = true;
+}
+
+
+void LLSky::setCloudDensityAtAgent(F32 cloud_density)
+{
+ if (mVOSkyp)
+ {
+ mVOSkyp->setCloudDensity(cloud_density);
+ }
+}
+
+
+void LLSky::setWind(const LLVector3& average_wind)
+{
+ if (mVOSkyp)
+ {
+ mVOSkyp->setWind(average_wind);
+ }
+}
+
+void LLSky::addSunMoonBeacons()
+{
+ if (!gAgentAvatarp || !mVOSkyp) return;
+
+ static LLUICachedControl<bool> show_sun_beacon("sunbeacon", false);
+ static LLUICachedControl<bool> show_moon_beacon("moonbeacon", false);
+
+ if (show_sun_beacon)
+ {
+ renderSunMoonBeacons(gAgentAvatarp->getPositionAgent(), mVOSkyp->getSun().getDirection(), LLColor4(1.f, 0.5f, 0.f, 0.5f));
+ }
+ if (show_moon_beacon)
+ {
+ renderSunMoonBeacons(gAgentAvatarp->getPositionAgent(), mVOSkyp->getMoon().getDirection(), LLColor4(1.f, 0.f, 0.8f, 0.5f));
+ }
+}
+
+//////////////////////////////////////////////////////////////////////
+// Private Methods
+//////////////////////////////////////////////////////////////////////
+
+
+LLColor4 LLSky::getSkyFogColor() const
+{
+ if (mVOSkyp)
+ {
+ return mVOSkyp->getSkyFogColor();
+ }
+
+ return LLColor4(1.f, 1.f, 1.f, 1.f);
+}
+
+void LLSky::updateFog(const F32 distance)
+{
+ if (mVOSkyp)
+ {
+ mVOSkyp->updateFog(distance);
+ }
+}
+
+void LLSky::updateCull()
+{
+ // *TODO: do culling for wl sky properly -Brad
+}
+
+void LLSky::updateSky()
+{
+ if (!gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_SKY))
+ {
+ return;
+ }
+ if (mVOSkyp)
+ {
+ mVOSkyp->updateSky();
+ }
+}
+
+
+void LLSky::setFogRatio(const F32 fog_ratio)
+{
+ if (mVOSkyp)
+ {
+ mVOSkyp->setFogRatio(fog_ratio);
+ }
+}
+
+
+F32 LLSky::getFogRatio() const
+{
+ if (mVOSkyp)
+ {
+ return mVOSkyp->getFogRatio();
+ }
+ else
+ {
+ return 0.f;
+ }
+}
+
+
+// Returns angle (DEGREES) between the horizontal plane and "v",
+// where the angle is negative when v.mV[VZ] < 0.0f
+F32 elevation_from_vector(const LLVector3 &v)
+{
+ F32 elevation = 0.0f;
+ F32 xy_component = (F32) sqrt(v.mV[VX] * v.mV[VX] + v.mV[VY] * v.mV[VY]);
+ if (xy_component != 0.0f)
+ {
+ elevation = RAD_TO_DEG * (F32) atan(v.mV[VZ]/xy_component);
+ }
+ else
+ {
+ if (v.mV[VZ] > 0.f)
+ {
+ elevation = 90.f;
+ }
+ else
+ {
+ elevation = -90.f;
+ }
+ }
+ return elevation;
+}