llfloaterhardwaresettings.cpp

Go to the documentation of this file.
00001 
00032 #include "llviewerprecompiledheaders.h"
00033 
00034 #include "llfloaterhardwaresettings.h"
00035 #include "llfloaterpreference.h"
00036 #include "llviewerwindow.h"
00037 #include "llviewercontrol.h"
00038 #include "llviewerimagelist.h"
00039 #include "llfeaturemanager.h"
00040 #include "llstartup.h"
00041 
00042 #include "llradiogroup.h"
00043 #include "lluictrlfactory.h"
00044 
00045 #include "llimagegl.h"
00046 #include "pipeline.h"
00047 
00048 LLFloaterHardwareSettings* LLFloaterHardwareSettings::sHardwareSettings = NULL;
00049 
00050 LLFloaterHardwareSettings::LLFloaterHardwareSettings() : LLFloater("Hardware Settings Floater")
00051 {
00052         LLUICtrlFactory::getInstance()->buildFloater(this, "floater_hardware_settings.xml");
00053         
00054         // load it up
00055         initCallbacks();
00056 }
00057 
00058 LLFloaterHardwareSettings::~LLFloaterHardwareSettings()
00059 {
00060 }
00061 
00062 void LLFloaterHardwareSettings::onClickHelp(void* data)
00063 {
00064         const char* xml_alert = "HardwareSettingsHelpButton";
00065         gViewerWindow->alertXml(xml_alert);
00066 }
00067 
00068 void LLFloaterHardwareSettings::initCallbacks(void) 
00069 {
00070 }
00071 
00072 // menu maintenance functions
00073 
00074 void LLFloaterHardwareSettings::refresh()
00075 {
00076         LLPanel::refresh();
00077 
00078         mUseVBO = gSavedSettings.getBOOL("RenderVBOEnable");
00079         mUseAniso = gSavedSettings.getBOOL("RenderAnisotropic");
00080         mFSAASamples = gSavedSettings.getU32("RenderFSAASamples");
00081         mGamma = gSavedSettings.getF32("RenderGamma");
00082         mVideoCardMem = gSavedSettings.getS32("TextureMemory");
00083         mFogRatio = gSavedSettings.getF32("RenderFogRatio");
00084         mProbeHardwareOnStartup = gSavedSettings.getBOOL("ProbeHardwareOnStartup");
00085 
00086         childSetValue("fsaa", (LLSD::Integer) mFSAASamples);
00087         refreshEnabledState();
00088 }
00089 
00090 void LLFloaterHardwareSettings::refreshEnabledState()
00091 {
00092         S32 min_tex_mem = LLViewerImageList::getMinVideoRamSetting();
00093         S32 max_tex_mem = LLViewerImageList::getMaxVideoRamSetting();
00094         childSetMinValue("GrapicsCardTextureMemory", min_tex_mem);
00095         childSetMaxValue("GrapicsCardTextureMemory", max_tex_mem);
00096 
00097         if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderVBOEnable") ||
00098                 !gGLManager.mHasVertexBufferObject)
00099         {
00100                 childSetEnabled("vbo", FALSE);
00101         }
00102 
00103         // if no windlight shaders, turn off nighttime brightness, gamma, and fog distance
00104         childSetEnabled("gamma", !gPipeline.canUseWindLightShaders());
00105         childSetEnabled("(brightness, lower is brighter)", !gPipeline.canUseWindLightShaders());
00106         childSetEnabled("fog", !gPipeline.canUseWindLightShaders());
00107 
00108 }
00109 
00110 // static instance of it
00111 LLFloaterHardwareSettings* LLFloaterHardwareSettings::instance()
00112 {
00113         if (!sHardwareSettings)
00114         {
00115                 sHardwareSettings = new LLFloaterHardwareSettings();
00116                 sHardwareSettings->close();
00117         }
00118         return sHardwareSettings;
00119 }
00120 void LLFloaterHardwareSettings::show()
00121 {
00122         LLFloaterHardwareSettings* hardSettings = instance();
00123         hardSettings->refresh();
00124         hardSettings->center();
00125 
00126         // comment in if you want the menu to rebuild each time
00127         //LLUICtrlFactory::getInstance()->buildFloater(hardSettings, "floater_hardware_settings.xml");
00128         //hardSettings->initCallbacks();
00129 
00130         hardSettings->open();
00131 }
00132 
00133 bool LLFloaterHardwareSettings::isOpen()
00134 {
00135         if (sHardwareSettings != NULL) 
00136         {
00137                 return true;
00138         }
00139         return false;
00140 }
00141 
00142 // virtual
00143 void LLFloaterHardwareSettings::onClose(bool app_quitting)
00144 {
00145         if (sHardwareSettings)
00146         {
00147                 sHardwareSettings->setVisible(FALSE);
00148         }
00149 }
00150 
00151 
00152 //============================================================================
00153 
00154 BOOL LLFloaterHardwareSettings::postBuild()
00155 {
00156         childSetAction("OK", onBtnOK, this);
00157 
00158         refresh();
00159 
00160         return TRUE;
00161 }
00162 
00163 
00164 void LLFloaterHardwareSettings::apply()
00165 {
00166         // Anisotropic rendering
00167         BOOL old_anisotropic = LLImageGL::sGlobalUseAnisotropic;
00168         LLImageGL::sGlobalUseAnisotropic = childGetValue("ani");
00169 
00170         U32 fsaa = (U32) childGetValue("fsaa").asInteger();
00171         U32 old_fsaa = gSavedSettings.getU32("RenderFSAASamples");
00172 
00173         BOOL logged_in = (LLStartUp::getStartupState() >= STATE_STARTED);
00174 
00175         if (old_fsaa != fsaa)
00176         {
00177                 gSavedSettings.setU32("RenderFSAASamples", fsaa);
00178                 LLWindow* window = gViewerWindow->getWindow();
00179                 LLCoordScreen size;
00180                 window->getSize(&size);
00181                 gViewerWindow->changeDisplaySettings(window->getFullscreen(), 
00182                                                                                                                 size,
00183                                                                                                                 gSavedSettings.getBOOL("DisableVerticalSync"),
00184                                                                                                                 logged_in);
00185         }
00186         else if (old_anisotropic != LLImageGL::sGlobalUseAnisotropic)
00187         {
00188                 gViewerWindow->restartDisplay(logged_in);
00189         }
00190 
00191         refresh();
00192 }
00193 
00194 
00195 void LLFloaterHardwareSettings::cancel()
00196 {
00197         gSavedSettings.setBOOL("RenderVBOEnable", mUseVBO);
00198         gSavedSettings.setBOOL("RenderAnisotropic", mUseAniso);
00199         gSavedSettings.setU32("RenderFSAASamples", mFSAASamples);
00200         gSavedSettings.setF32("RenderGamma", mGamma);
00201         gSavedSettings.setS32("TextureMemory", mVideoCardMem);
00202         gSavedSettings.setF32("RenderFogRatio", mFogRatio);
00203         gSavedSettings.setBOOL("ProbeHardwareOnStartup", mProbeHardwareOnStartup );
00204 
00205         close();
00206 }
00207 
00208 // static 
00209 void LLFloaterHardwareSettings::onBtnOK( void* userdata )
00210 {
00211         LLFloaterHardwareSettings *fp =(LLFloaterHardwareSettings *)userdata;
00212         fp->apply();
00213         fp->close(false);
00214 }
00215 

Generated on Fri May 16 08:33:27 2008 for SecondLife by  doxygen 1.5.5