diff --git a/code/nel/include/nel/3d/driver.h b/code/nel/include/nel/3d/driver.h index 39cafc2de..8e2eb8409 100644 --- a/code/nel/include/nel/3d/driver.h +++ b/code/nel/include/nel/3d/driver.h @@ -415,6 +415,16 @@ public: */ virtual void setAnisotropicFilter(sint filter) = 0; + /** + * Get current anisotropic filter value + */ + virtual uint getAnisotropicFilter() const = 0; + + /** + * Get maximum anisotropic filter value + */ + virtual uint getAnisotropicFilterMaximum() const = 0; + /** if !=1, force mostly all the textures (but TextureFonts lightmaps, interfaces etc..) * to be divided by Divisor (2, 4, 8...) * Default is 1. diff --git a/code/nel/include/nel/3d/driver_user.h b/code/nel/include/nel/3d/driver_user.h index f1e1fad84..761a03114 100644 --- a/code/nel/include/nel/3d/driver_user.h +++ b/code/nel/include/nel/3d/driver_user.h @@ -474,6 +474,8 @@ public: virtual TPolygonMode getPolygonMode (); virtual void forceDXTCCompression(bool dxtcComp); virtual void setAnisotropicFilter(sint filter); + virtual uint getAnisotropicFilter() const; + virtual uint getAnisotropicFilterMaximum() const; virtual void forceTextureResize(uint divisor); virtual bool setMonitorColorProperties (const CMonitorColorProperties &properties); // @} diff --git a/code/nel/include/nel/3d/u_driver.h b/code/nel/include/nel/3d/u_driver.h index dc2b02e56..f880c9f47 100644 --- a/code/nel/include/nel/3d/u_driver.h +++ b/code/nel/include/nel/3d/u_driver.h @@ -646,6 +646,16 @@ public: */ virtual void setAnisotropicFilter(sint filter)=0; + /** + * Get current anisotropic filter value + */ + virtual uint getAnisotropicFilter() const = 0; + + /** + * Get maximum anisotropic filter value + */ + virtual uint getAnisotropicFilterMaximum() const = 0; + /** if !=1, force mostly all the textures (but TextureFonts lightmaps, interfaces etc..) * to be divided by Divisor (2, 4, 8...) * Default is 1. diff --git a/code/nel/src/3d/driver.cpp b/code/nel/src/3d/driver.cpp index 791172700..f6fa074f0 100644 --- a/code/nel/src/3d/driver.cpp +++ b/code/nel/src/3d/driver.cpp @@ -32,7 +32,7 @@ namespace NL3D { // *************************************************************************** -const uint32 IDriver::InterfaceVersion = 0x6e; // gpu program interface +const uint32 IDriver::InterfaceVersion = 0x6f; // getters for anisotropic filter // *************************************************************************** IDriver::IDriver() : _SyncTexDrvInfos( "IDriver::_SyncTexDrvInfos" ) diff --git a/code/nel/src/3d/driver/direct3d/driver_direct3d.cpp b/code/nel/src/3d/driver/direct3d/driver_direct3d.cpp index 5ffaceda6..fb310bd7d 100644 --- a/code/nel/src/3d/driver/direct3d/driver_direct3d.cpp +++ b/code/nel/src/3d/driver/direct3d/driver_direct3d.cpp @@ -2103,6 +2103,24 @@ void CDriverD3D::setAnisotropicFilter(sint filter) // *************************************************************************** +uint CDriverD3D::getAnisotropicFilter() const +{ + H_AUTO_D3D(CDriverD3D_getAnisotropicFilter); + + return _AnisotropicFilter; +} + +// *************************************************************************** + +uint CDriverD3D::getAnisotropicFilterMaximum() const +{ + H_AUTO_D3D(CDriverD3D_getAnisotropicFilterMaximum); + + return _MaxAnisotropy; +} + +// *************************************************************************** + void CDriverD3D::forceTextureResize(uint divisor) { H_AUTO_D3D(CDriverD3D_forceTextureResize); diff --git a/code/nel/src/3d/driver/direct3d/driver_direct3d.h b/code/nel/src/3d/driver/direct3d/driver_direct3d.h index 039b6f3ed..830694a42 100644 --- a/code/nel/src/3d/driver/direct3d/driver_direct3d.h +++ b/code/nel/src/3d/driver/direct3d/driver_direct3d.h @@ -879,6 +879,8 @@ public: virtual void disableHardwareTextureShader(); virtual void forceDXTCCompression(bool dxtcComp); virtual void setAnisotropicFilter(sint filter); + virtual uint getAnisotropicFilter() const; + virtual uint getAnisotropicFilterMaximum() const; virtual void forceTextureResize(uint divisor); // Driver information diff --git a/code/nel/src/3d/driver/opengl/driver_opengl.h b/code/nel/src/3d/driver/opengl/driver_opengl.h index 1a7ca6825..6affa6929 100644 --- a/code/nel/src/3d/driver/opengl/driver_opengl.h +++ b/code/nel/src/3d/driver/opengl/driver_opengl.h @@ -381,6 +381,8 @@ public: virtual void forceDXTCCompression(bool dxtcComp); virtual void setAnisotropicFilter(sint filter); + virtual uint getAnisotropicFilter() const; + virtual uint getAnisotropicFilterMaximum() const; virtual void forceTextureResize(uint divisor); diff --git a/code/nel/src/3d/driver/opengl/driver_opengl_texture.cpp b/code/nel/src/3d/driver/opengl/driver_opengl_texture.cpp index 7b49e20a0..a46f7ef12 100644 --- a/code/nel/src/3d/driver/opengl/driver_opengl_texture.cpp +++ b/code/nel/src/3d/driver/opengl/driver_opengl_texture.cpp @@ -2128,6 +2128,22 @@ void CDriverGL::setAnisotropicFilter(sint filtering) } } +// *************************************************************************** +uint CDriverGL::getAnisotropicFilter() const +{ + H_AUTO_OGL(CDriverGL_getAnisotropicFilter); + + return (uint)_AnisotropicFilter; +} + +// *************************************************************************** +uint CDriverGL::getAnisotropicFilterMaximum() const +{ + H_AUTO_OGL(CDriverGL_getAnisotropicFilterMaximum); + + return (uint)_Extensions.EXTTextureFilterAnisotropicMaximum; +} + // *************************************************************************** void CDriverGL::forceTextureResize(uint divisor) { diff --git a/code/nel/src/3d/driver_user.cpp b/code/nel/src/3d/driver_user.cpp index 017a2b6dc..457197d70 100644 --- a/code/nel/src/3d/driver_user.cpp +++ b/code/nel/src/3d/driver_user.cpp @@ -1481,6 +1481,20 @@ void CDriverUser::setAnisotropicFilter(sint filter) _Driver->setAnisotropicFilter(filter); } +uint CDriverUser::getAnisotropicFilter() const +{ + NL3D_HAUTO_UI_DRIVER; + + return _Driver->getAnisotropicFilter(); +} + +uint CDriverUser::getAnisotropicFilterMaximum() const +{ + NL3D_HAUTO_UI_DRIVER; + + return _Driver->getAnisotropicFilterMaximum(); +} + void CDriverUser::forceTextureResize(uint divisor) { NL3D_HAUTO_UI_DRIVER; diff --git a/code/nel/src/gui/group_html.cpp b/code/nel/src/gui/group_html.cpp index 7d451d561..24610f7eb 100644 --- a/code/nel/src/gui/group_html.cpp +++ b/code/nel/src/gui/group_html.cpp @@ -2087,14 +2087,14 @@ namespace NLGUI clearContext(); MultiCurl = curl_multi_init(); +#ifdef CURLMOPT_MAX_HOST_CONNECTIONS if (MultiCurl) { -#ifdef CURLMOPT_MAX_HOST_CONNECTIONS // added in libcurl 7.30.0 curl_multi_setopt(MultiCurl, CURLMOPT_MAX_HOST_CONNECTIONS, options.curlMaxConnections); -#endif curl_multi_setopt(MultiCurl, CURLMOPT_PIPELINING, 1); } +#endif RunningCurls = 0; _CurlWWW = NULL; diff --git a/code/ryzom/client/data/gamedev/interfaces_v3/game_config.xml b/code/ryzom/client/data/gamedev/interfaces_v3/game_config.xml index c2b62cebd..bd0952277 100644 --- a/code/ryzom/client/data/gamedev/interfaces_v3/game_config.xml +++ b/code/ryzom/client/data/gamedev/interfaces_v3/game_config.xml @@ -183,7 +183,7 @@ posref="BL BL" scale="true" y="4" - w="86" + w="110" h="2" texture="W_line_hor2.tga" /> @@ -429,6 +429,9 @@ + @@ -916,7 +919,7 @@ - + + + + + + + + deleteTextureFile(LoadingBitmap); LoadingBitmap = NULL; - LoadingBitmapFilename = ""; + LoadingBitmapFilename.clear(); LoadingMaterial.setTexture (0, NULL); } if (LoadingBitmapFull && Driver) diff --git a/code/ryzom/client/src/interface_v3/action_handler_game.cpp b/code/ryzom/client/src/interface_v3/action_handler_game.cpp index 8457185e7..bff77eb7f 100644 --- a/code/ryzom/client/src/interface_v3/action_handler_game.cpp +++ b/code/ryzom/client/src/interface_v3/action_handler_game.cpp @@ -2933,6 +2933,10 @@ static vector VideoModes; #define GAME_CONFIG_TEXTURE_MODE_COMBO "ui:interface:game_config:content:general:texture_mode:combo" #define GAME_CONFIG_TEXTURE_MODE_DB "UI:TEMP:TEXTURE_MODE" +// Anisotropic Filtering controls +#define GAME_CONFIG_ANISOTROPIC_COMBO "ui:interface:game_config:content:fx:anisotropic_gr:anisotropic" +#define GAME_CONFIG_ANISOTROPIC_DB "UI:TEMP:ANISOTROPIC" + // The 3 possible modes editable (NB: do not allow client.cfg HDEntityTexture==1 and DivideTextureSizeBy2=2 enum TTextureMode {LowTextureMode= 0, NormalTextureMode= 1, HighTextureMode= 2}; @@ -3034,7 +3038,7 @@ public: // **** Init Texture Size Modes // init the combo box, according to Texture Installed or not - pCB= dynamic_cast(CWidgetManager::getInstance()->getElementFromId( GAME_CONFIG_TEXTURE_MODE_COMBO )); + pCB = dynamic_cast(CWidgetManager::getInstance()->getElementFromId( GAME_CONFIG_TEXTURE_MODE_COMBO )); if( pCB ) { pCB->resetTexts(); @@ -3044,12 +3048,44 @@ public: pCB->addText(CI18N::get("uigcHighTextureMode")); } + // Anisotropic Filtering + pCB = dynamic_cast(CWidgetManager::getInstance()->getElementFromId(GAME_CONFIG_ANISOTROPIC_COMBO)); + + sint nAnisotropic = 0; + + if (pCB) + { + uint maxAnisotropic = Driver->getAnisotropicFilterMaximum(); + + pCB->resetTexts(); + pCB->addText(CI18N::get("uigcFxAnisotropicFilterNone")); + + uint anisotropic = 2; + uint i = 1; + + while (anisotropic <= maxAnisotropic) + { + pCB->addText(ucstring(NLMISC::toString("%ux", anisotropic))); + + if (ClientCfg.AnisotropicFilter == anisotropic) + nAnisotropic = i; + + anisotropic <<= 1; + ++i; + } + } + + // -1 is important to indicate we set this value in edit mode + NLGUI::CDBManager::getInstance()->getDbProp( GAME_CONFIG_ANISOTROPIC_DB )->setValue32(-1); + NLGUI::CDBManager::getInstance()->getDbProp( GAME_CONFIG_ANISOTROPIC_DB )->setValue32(nAnisotropic); + // VR_CONFIG pBut = dynamic_cast(CWidgetManager::getInstance()->getElementFromId(GAME_CONFIG_VR_ENABLE_BUTTON)); if (pBut) { pBut->setPushed(ClientCfg.VREnable); } + updateVRDevicesComboUI(ClientCfg.VREnable); // init the mode in DB @@ -3060,6 +3096,7 @@ public: texMode= HighTextureMode; else texMode= NormalTextureMode; + // -1 is important to indicate we set this value in edit mode NLGUI::CDBManager::getInstance()->getDbProp( GAME_CONFIG_TEXTURE_MODE_DB )->setValue32(-1); NLGUI::CDBManager::getInstance()->getDbProp( GAME_CONFIG_TEXTURE_MODE_DB )->setValue32(texMode); @@ -3479,13 +3516,41 @@ class CHandlerGameConfigApply : public IActionHandler } } + // **** Apply Anisotropic Filtering + sint nAnisotropic = NLGUI::CDBManager::getInstance()->getDbProp( GAME_CONFIG_ANISOTROPIC_DB )->getValue32(); + + if (nAnisotropic >= 0) + { + uint anisotropic = 0; + + // compute the real anisotropic value + if (nAnisotropic > 0) + { + anisotropic = 1; + + for(size_t i = 0; i < nAnisotropic; ++i) + { + anisotropic <<= 1; + } + } + + + if (ClientCfg.AnisotropicFilter != anisotropic) + { + ClientCfg.AnisotropicFilter = anisotropic; + ClientCfg.writeInt("AnisotropicFilter", anisotropic); + requestReboot = true; + } + } + + // *** Apply the Screen AR // since already set in the config file, need only to bkup the current version CHandlerGameConfigInit::BkupScreenAspectRatio= ClientCfg.ScreenAspectRatio; // *** Apply the language code // only if not in "work" language mode (else strange requestReboot) - if(ClientCfg.LanguageCode!="wk") + if (ClientCfg.LanguageCode!="wk") { sint newOne = NLGUI::CDBManager::getInstance()->getDbProp( GAME_CONFIG_LANGUAGE )->getValue32(); //string newVal = (newOne==2)?"de":(newOne==1)?"fr":"en"; @@ -3595,6 +3660,33 @@ class CHandlerGameConfigChangeScreenRatioMode : public IActionHandler REGISTER_ACTION_HANDLER (CHandlerGameConfigChangeScreenRatioMode, "game_config_change_screen_ratio_mode"); +// *************************************************************************** +class CHandlerGameConfigChangeAnisotropic : public IActionHandler +{ + virtual void execute (CCtrlBase * /* pCaller */, const string &/* Params */) + { + if (CInterfaceLink::isUpdatingAllLinks()) return; // don't want to trash the value in client.cfg at init, due to 'updateAllLinks' being called + + CInterfaceManager *pIM = CInterfaceManager::getInstance(); + + // get values of anisotropic filtering + sint oldAnisotropic = NLGUI::CDBManager::getInstance()->getDbProp(GAME_CONFIG_ANISOTROPIC_DB)->getOldValue32(); + sint anisotropic = NLGUI::CDBManager::getInstance()->getDbProp(GAME_CONFIG_ANISOTROPIC_DB)->getValue32(); + + // dirt the apply button of the DDX. + // don't do it at init! + if(oldAnisotropic != anisotropic && oldAnisotropic != -1 && anisotropic != -1) + { + CDDXManager *pDM = CDDXManager::getInstance(); + CInterfaceDDX *pDDX = pDM->get(GAME_CONFIG_DDX); + if(pDDX) + pDDX->validateApplyButton(); + } + } +}; +REGISTER_ACTION_HANDLER (CHandlerGameConfigChangeAnisotropic, "game_config_change_anisotropic"); + + // *************************************************************************** class CHandlerGameConfigChangeScreenRatioCustom : public IActionHandler { diff --git a/code/ryzom/client/src/main_loop.h b/code/ryzom/client/src/main_loop.h index 93e4db36d..79ebc69fa 100644 --- a/code/ryzom/client/src/main_loop.h +++ b/code/ryzom/client/src/main_loop.h @@ -59,30 +59,9 @@ void displayDebugUIUnderMouse(); void inGamePatchUncompleteWarning(); -// active/desactive bloom config interface +// enable/disable bloom config interface void initBloomConfigUI(); #endif // CL_MAIN_LOOP_H /* End of main_loop.h */ - - - - - - - - - - - - - - - - - - - - -