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
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
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
00104 childSetEnabled("gamma", !gPipeline.canUseWindLightShaders());
00105 childSetEnabled("(brightness, lower is brighter)", !gPipeline.canUseWindLightShaders());
00106 childSetEnabled("fog", !gPipeline.canUseWindLightShaders());
00107
00108 }
00109
00110
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
00127
00128
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
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
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
00209 void LLFloaterHardwareSettings::onBtnOK( void* userdata )
00210 {
00211 LLFloaterHardwareSettings *fp =(LLFloaterHardwareSettings *)userdata;
00212 fp->apply();
00213 fp->close(false);
00214 }
00215