llfloaterhardwaresettings.cpp
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:5k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llfloaterhardwaresettings.cpp
  3.  * @brief Menu of all the different graphics hardware settings
  4.  *
  5.  * $LicenseInfo:firstyear=2001&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2001-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #include "llviewerprecompiledheaders.h"
  33. #include "llfloaterhardwaresettings.h"
  34. // Viewer includes
  35. #include "llfloaterpreference.h"
  36. #include "llviewerwindow.h"
  37. #include "llviewercontrol.h"
  38. #include "llviewertexturelist.h"
  39. #include "llfeaturemanager.h"
  40. #include "llstartup.h"
  41. #include "pipeline.h"
  42. // Linden library includes
  43. #include "llradiogroup.h"
  44. #include "lluictrlfactory.h"
  45. #include "llwindow.h"
  46. #include "llsliderctrl.h"
  47. LLFloaterHardwareSettings::LLFloaterHardwareSettings(const LLSD& key)
  48. : LLFloater(key),
  49.   // these should be set on imminent refresh() call,
  50.   // but init them anyway
  51.   mUseVBO(0),
  52.   mUseAniso(0),
  53.   mFSAASamples(0),
  54.   mGamma(0.0),
  55.   mVideoCardMem(0),
  56.   mFogRatio(0.0),
  57.   mProbeHardwareOnStartup(FALSE)
  58. {
  59. //LLUICtrlFactory::getInstance()->buildFloater(this, "floater_hardware_settings.xml");
  60. }
  61. LLFloaterHardwareSettings::~LLFloaterHardwareSettings()
  62. {
  63. }
  64. void LLFloaterHardwareSettings::initCallbacks(void) 
  65. {
  66. }
  67. // menu maintenance functions
  68. void LLFloaterHardwareSettings::refresh()
  69. {
  70. LLPanel::refresh();
  71. mUseVBO = gSavedSettings.getBOOL("RenderVBOEnable");
  72. mUseAniso = gSavedSettings.getBOOL("RenderAnisotropic");
  73. mFSAASamples = gSavedSettings.getU32("RenderFSAASamples");
  74. mGamma = gSavedSettings.getF32("RenderGamma");
  75. mVideoCardMem = gSavedSettings.getS32("TextureMemory");
  76. mFogRatio = gSavedSettings.getF32("RenderFogRatio");
  77. mProbeHardwareOnStartup = gSavedSettings.getBOOL("ProbeHardwareOnStartup");
  78. childSetValue("fsaa", (LLSD::Integer) mFSAASamples);
  79. refreshEnabledState();
  80. }
  81. void LLFloaterHardwareSettings::refreshEnabledState()
  82. {
  83. S32 min_tex_mem = LLViewerTextureList::getMinVideoRamSetting();
  84. S32 max_tex_mem = LLViewerTextureList::getMaxVideoRamSetting();
  85. getChild<LLSliderCtrl>("GraphicsCardTextureMemory")->setMinValue(min_tex_mem);
  86. getChild<LLSliderCtrl>("GraphicsCardTextureMemory")->setMaxValue(max_tex_mem);
  87. if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderVBOEnable") ||
  88. !gGLManager.mHasVertexBufferObject)
  89. {
  90. childSetEnabled("vbo", FALSE);
  91. }
  92. // if no windlight shaders, turn off nighttime brightness, gamma, and fog distance
  93. childSetEnabled("gamma", !gPipeline.canUseWindLightShaders());
  94. childSetEnabled("(brightness, lower is brighter)", !gPipeline.canUseWindLightShaders());
  95. childSetEnabled("fog", !gPipeline.canUseWindLightShaders());
  96. }
  97. //============================================================================
  98. BOOL LLFloaterHardwareSettings::postBuild()
  99. {
  100. childSetAction("OK", onBtnOK, this);
  101. refresh();
  102. center();
  103. // load it up
  104. initCallbacks();
  105. return TRUE;
  106. }
  107. void LLFloaterHardwareSettings::apply()
  108. {
  109. // Anisotropic rendering
  110. BOOL old_anisotropic = LLImageGL::sGlobalUseAnisotropic;
  111. LLImageGL::sGlobalUseAnisotropic = childGetValue("ani");
  112. U32 fsaa = (U32) childGetValue("fsaa").asInteger();
  113. U32 old_fsaa = gSavedSettings.getU32("RenderFSAASamples");
  114. BOOL logged_in = (LLStartUp::getStartupState() >= STATE_STARTED);
  115. if (old_fsaa != fsaa)
  116. {
  117. gSavedSettings.setU32("RenderFSAASamples", fsaa);
  118. LLWindow* window = gViewerWindow->getWindow();
  119. LLCoordScreen size;
  120. window->getSize(&size);
  121. gViewerWindow->changeDisplaySettings(window->getFullscreen(), 
  122. size,
  123. gSavedSettings.getBOOL("DisableVerticalSync"),
  124. logged_in);
  125. }
  126. else if (old_anisotropic != LLImageGL::sGlobalUseAnisotropic)
  127. {
  128. gViewerWindow->restartDisplay(logged_in);
  129. }
  130. refresh();
  131. }
  132. void LLFloaterHardwareSettings::cancel()
  133. {
  134. gSavedSettings.setBOOL("RenderVBOEnable", mUseVBO);
  135. gSavedSettings.setBOOL("RenderAnisotropic", mUseAniso);
  136. gSavedSettings.setU32("RenderFSAASamples", mFSAASamples);
  137. gSavedSettings.setF32("RenderGamma", mGamma);
  138. gSavedSettings.setS32("TextureMemory", mVideoCardMem);
  139. gSavedSettings.setF32("RenderFogRatio", mFogRatio);
  140. gSavedSettings.setBOOL("ProbeHardwareOnStartup", mProbeHardwareOnStartup );
  141. closeFloater();
  142. }
  143. // static 
  144. void LLFloaterHardwareSettings::onBtnOK( void* userdata )
  145. {
  146. LLFloaterHardwareSettings *fp =(LLFloaterHardwareSettings *)userdata;
  147. fp->apply();
  148. fp->closeFloater(false);
  149. }