225 lines
6.5 KiB
C++
225 lines
6.5 KiB
C++
/**
|
|
* @file llfloaterhardwaresettings.cpp
|
|
* @brief Menu of all the different graphics hardware settings
|
|
*
|
|
* $LicenseInfo:firstyear=2001&license=viewergpl$
|
|
*
|
|
* Copyright (c) 2001-2009, Linden Research, Inc.
|
|
*
|
|
* Second Life Viewer Source Code
|
|
* The source code in this file ("Source Code") is provided by Linden Lab
|
|
* to you under the terms of the GNU General Public License, version 2.0
|
|
* ("GPL"), unless you have obtained a separate licensing agreement
|
|
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
|
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
|
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
|
*
|
|
* There are special exceptions to the terms and conditions of the GPL as
|
|
* it is applied to this Source Code. View the full text of the exception
|
|
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
|
* online at
|
|
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
|
*
|
|
* By copying, modifying or distributing this software, you acknowledge
|
|
* that you have read and understood your obligations described above,
|
|
* and agree to abide by those obligations.
|
|
*
|
|
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
|
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
|
* COMPLETENESS OR PERFORMANCE.
|
|
* $/LicenseInfo$
|
|
*/
|
|
|
|
#include "llviewerprecompiledheaders.h"
|
|
|
|
#include "llfloaterhardwaresettings.h"
|
|
#include "llfloaterpreference.h"
|
|
#include "llviewerwindow.h"
|
|
#include "llwindow.h"
|
|
#include "llviewercontrol.h"
|
|
#include "llviewertexturelist.h"
|
|
#include "llfeaturemanager.h"
|
|
#include "llstartup.h"
|
|
|
|
#include "llradiogroup.h"
|
|
#include "lluictrlfactory.h"
|
|
|
|
#include "llimagegl.h"
|
|
#include "pipeline.h"
|
|
|
|
LLFloaterHardwareSettings* LLFloaterHardwareSettings::sHardwareSettings = NULL;
|
|
|
|
LLFloaterHardwareSettings::LLFloaterHardwareSettings() : LLFloater(std::string("Hardware Settings Floater"))
|
|
{
|
|
LLUICtrlFactory::getInstance()->buildFloater(this, "floater_hardware_settings.xml");
|
|
|
|
// load it up
|
|
initCallbacks();
|
|
}
|
|
|
|
LLFloaterHardwareSettings::~LLFloaterHardwareSettings()
|
|
{
|
|
}
|
|
|
|
void LLFloaterHardwareSettings::onClickHelp(void* data)
|
|
{
|
|
const char* xml_alert = "HardwareSettingsHelpButton";
|
|
LLNotifications::instance().add(xml_alert);
|
|
}
|
|
|
|
void LLFloaterHardwareSettings::initCallbacks(void)
|
|
{
|
|
}
|
|
|
|
// menu maintenance functions
|
|
|
|
void LLFloaterHardwareSettings::refresh()
|
|
{
|
|
LLPanel::refresh();
|
|
|
|
mUseVBO = gSavedSettings.getBOOL("RenderVBOEnable");
|
|
mUseFBO = gSavedSettings.getBOOL("RenderUseFBO");
|
|
mUseAniso = gSavedSettings.getBOOL("RenderAnisotropic");
|
|
mFSAASamples = gSavedSettings.getU32("RenderFSAASamples");
|
|
mGamma = gSavedSettings.getF32("RenderGamma");
|
|
mVideoCardMem = gSavedSettings.getS32("TextureMemory");
|
|
mFogRatio = gSavedSettings.getF32("RenderFogRatio");
|
|
mProbeHardwareOnStartup = gSavedSettings.getBOOL("ProbeHardwareOnStartup");
|
|
|
|
childSetValue("fsaa", (LLSD::Integer) mFSAASamples);
|
|
refreshEnabledState();
|
|
}
|
|
|
|
void LLFloaterHardwareSettings::refreshEnabledState()
|
|
{
|
|
S32 min_tex_mem = LLViewerTextureList::getMinVideoRamSetting();
|
|
S32 max_tex_mem = LLViewerTextureList::getMaxVideoRamSetting();
|
|
childSetMinValue("GrapicsCardTextureMemory", min_tex_mem);
|
|
childSetMaxValue("GrapicsCardTextureMemory", max_tex_mem);
|
|
|
|
mLastVBOState = LLVertexBuffer::sEnableVBOs;
|
|
if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderVBOEnable") ||
|
|
!gGLManager.mHasVertexBufferObject)
|
|
{
|
|
childSetEnabled("vbo", FALSE);
|
|
//Streaming VBOs -Shyotl
|
|
childSetEnabled("vbo_stream", FALSE);
|
|
}
|
|
else
|
|
{
|
|
childSetEnabled("vbo_stream", LLVertexBuffer::sEnableVBOs);
|
|
}
|
|
|
|
childSetEnabled("fbo",gGLManager.mHasFramebufferObject && !LLPipeline::sRenderDeferred);
|
|
|
|
// if no windlight shaders, turn off nighttime brightness, gamma, and fog distance
|
|
childSetEnabled("gamma", !gPipeline.canUseWindLightShaders());
|
|
childSetEnabled("(brightness, lower is brighter)", !gPipeline.canUseWindLightShaders());
|
|
childSetEnabled("fog", !gPipeline.canUseWindLightShaders());
|
|
|
|
}
|
|
|
|
// static instance of it
|
|
LLFloaterHardwareSettings* LLFloaterHardwareSettings::instance()
|
|
{
|
|
if (!sHardwareSettings)
|
|
{
|
|
sHardwareSettings = new LLFloaterHardwareSettings();
|
|
sHardwareSettings->close();
|
|
}
|
|
return sHardwareSettings;
|
|
}
|
|
void LLFloaterHardwareSettings::show()
|
|
{
|
|
LLFloaterHardwareSettings* hardSettings = instance();
|
|
hardSettings->refresh();
|
|
hardSettings->center();
|
|
|
|
// comment in if you want the menu to rebuild each time
|
|
//LLUICtrlFactory::getInstance()->buildFloater(hardSettings, "floater_hardware_settings.xml");
|
|
//hardSettings->initCallbacks();
|
|
|
|
hardSettings->open();
|
|
}
|
|
|
|
bool LLFloaterHardwareSettings::isOpen()
|
|
{
|
|
if (sHardwareSettings != NULL)
|
|
{
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// virtual
|
|
void LLFloaterHardwareSettings::onClose(bool app_quitting)
|
|
{
|
|
if (sHardwareSettings)
|
|
{
|
|
sHardwareSettings->setVisible(FALSE);
|
|
}
|
|
}
|
|
|
|
// virtual
|
|
void LLFloaterHardwareSettings::draw()
|
|
{
|
|
if(mLastVBOState == !LLVertexBuffer::sEnableVBOs)
|
|
refreshEnabledState();
|
|
LLFloater::draw();
|
|
}
|
|
|
|
//============================================================================
|
|
|
|
BOOL LLFloaterHardwareSettings::postBuild()
|
|
{
|
|
childSetAction("OK", onBtnOK, this);
|
|
|
|
refresh();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
void LLFloaterHardwareSettings::apply()
|
|
{
|
|
//Still do a bit of voodoo here. V2 forces restart to change FSAA with FBOs off.
|
|
//Let's not do that, and instead do pre-V2 FSAA change handling for that particular case
|
|
if(!LLRenderTarget::sUseFBO && (mFSAASamples != (U32)childGetValue("fsaa").asInteger()))
|
|
{
|
|
BOOL logged_in = (LLStartUp::getStartupState() >= STATE_STARTED);
|
|
LLWindow* window = gViewerWindow->getWindow();
|
|
LLCoordScreen size;
|
|
window->getSize(&size);
|
|
gViewerWindow->changeDisplaySettings(window->getFullscreen(),
|
|
size,
|
|
gSavedSettings.getBOOL("DisableVerticalSync"),
|
|
logged_in);
|
|
}
|
|
|
|
refresh();
|
|
}
|
|
|
|
|
|
void LLFloaterHardwareSettings::cancel()
|
|
{
|
|
gSavedSettings.setBOOL("RenderVBOEnable", mUseVBO);
|
|
gSavedSettings.setBOOL("RenderUseFBO", mUseFBO);
|
|
gSavedSettings.setBOOL("RenderAnisotropic", mUseAniso);
|
|
gSavedSettings.setU32("RenderFSAASamples", mFSAASamples);
|
|
gSavedSettings.setF32("RenderGamma", mGamma);
|
|
gSavedSettings.setS32("TextureMemory", mVideoCardMem);
|
|
gSavedSettings.setF32("RenderFogRatio", mFogRatio);
|
|
gSavedSettings.setBOOL("ProbeHardwareOnStartup", mProbeHardwareOnStartup );
|
|
|
|
close();
|
|
}
|
|
|
|
// static
|
|
void LLFloaterHardwareSettings::onBtnOK( void* userdata )
|
|
{
|
|
LLFloaterHardwareSettings *fp =(LLFloaterHardwareSettings *)userdata;
|
|
fp->apply();
|
|
fp->close(false);
|
|
}
|
|
|