diff options
| author | Nyx (Neal Orman) <nyx@lindenlab.com> | 2010-10-22 13:06:44 -0400 | 
|---|---|---|
| committer | Nyx (Neal Orman) <nyx@lindenlab.com> | 2010-10-22 13:06:44 -0400 | 
| commit | 7863674626bcf16ad26f3bb8e77a6ca41998c36b (patch) | |
| tree | 7de70d2f90508cad873ffefdf59f92cee01504d2 | |
| parent | e39d6169994936d2b5b4b260e8acf55070e58402 (diff) | |
| parent | 6368f6f84958c8c3c2e48c9f47ec98c7e35308c7 (diff) | |
merging from internal branch
| -rw-r--r-- | indra/llrender/llimagegl.cpp | 12 | ||||
| -rw-r--r-- | indra/llrender/llimagegl.h | 1 | ||||
| -rw-r--r-- | indra/newview/llfloaterhardwaresettings.cpp | 24 | ||||
| -rw-r--r-- | indra/newview/llviewercontrol.cpp | 8 | ||||
| -rw-r--r-- | indra/newview/llviewershadermgr.cpp | 274 | 
5 files changed, 158 insertions, 161 deletions
| diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp index bd81e804d6..4ae01a59ff 100644 --- a/indra/llrender/llimagegl.cpp +++ b/indra/llrender/llimagegl.cpp @@ -368,6 +368,18 @@ void LLImageGL::restoreGL()  	}  } +//static  +void LLImageGL::dirtyTexOptions() +{ +	for (std::set<LLImageGL*>::iterator iter = sImageList.begin(); +		 iter != sImageList.end(); iter++) +	{ +		LLImageGL* glimage = *iter; +		glimage->mTexOptionsDirty = true; +		stop_glerror(); +	} +	 +}  //----------------------------------------------------------------------------  //for server side use only. diff --git a/indra/llrender/llimagegl.h b/indra/llrender/llimagegl.h index 87a835cdcc..6c980984c0 100644 --- a/indra/llrender/llimagegl.h +++ b/indra/llrender/llimagegl.h @@ -64,6 +64,7 @@ public:  	// Save off / restore GL textures  	static void destroyGL(BOOL save_state = TRUE);  	static void restoreGL(); +	static void dirtyTexOptions();  	// Sometimes called externally for textures not using LLImageGL (should go away...)	  	static S32 updateBoundTexMem(const S32 mem, const S32 ncomponents, S32 category) ; diff --git a/indra/newview/llfloaterhardwaresettings.cpp b/indra/newview/llfloaterhardwaresettings.cpp index 3cd3c74ee4..dc573e1433 100644 --- a/indra/newview/llfloaterhardwaresettings.cpp +++ b/indra/newview/llfloaterhardwaresettings.cpp @@ -129,30 +129,6 @@ BOOL LLFloaterHardwareSettings::postBuild()  void LLFloaterHardwareSettings::apply()  { -	// Anisotropic rendering -	BOOL old_anisotropic = LLImageGL::sGlobalUseAnisotropic; -	LLImageGL::sGlobalUseAnisotropic = getChild<LLUICtrl>("ani")->getValue(); - -	U32 fsaa = (U32) getChild<LLUICtrl>("fsaa")->getValue().asInteger(); -	U32 old_fsaa = gSavedSettings.getU32("RenderFSAASamples"); - -	BOOL logged_in = (LLStartUp::getStartupState() >= STATE_STARTED); - -	if (old_fsaa != fsaa) -	{ -		gSavedSettings.setU32("RenderFSAASamples", fsaa); -		LLWindow* window = gViewerWindow->getWindow(); -		LLCoordScreen size; -		window->getSize(&size); -		gViewerWindow->changeDisplaySettings(size, -											gSavedSettings.getBOOL("DisableVerticalSync"), -											logged_in); -	} -	else if (old_anisotropic != LLImageGL::sGlobalUseAnisotropic) -	{ -		gViewerWindow->restartDisplay(logged_in); -	} -  	refresh();  } diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index 416553ff08..131c712241 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -177,6 +177,13 @@ static bool handleReleaseGLBufferChanged(const LLSD& newvalue)  	return true;  } +static bool handleAnisotropicChanged(const LLSD& newvalue) +{ +	LLImageGL::sGlobalUseAnisotropic = newvalue.asBoolean(); +	LLImageGL::dirtyTexOptions(); +	return true; +} +  static bool handleVolumeLODChanged(const LLSD& newvalue)  {  	LLVOVolume::sLODFactor = (F32) newvalue.asReal(); @@ -549,6 +556,7 @@ void settings_setup_listeners()  	gSavedSettings.getControl("RenderSpecularResY")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));  	gSavedSettings.getControl("RenderSpecularExponent")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));  	gSavedSettings.getControl("RenderFSAASamples")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2)); +	gSavedSettings.getControl("RenderAnisotropic")->getSignal()->connect(boost::bind(&handleAnisotropicChanged, _2));  	gSavedSettings.getControl("RenderShadowResolutionScale")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));  	gSavedSettings.getControl("RenderGlow")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));  	gSavedSettings.getControl("RenderGlow")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2)); diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index 4b12745322..1161810c68 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -465,7 +465,6 @@ void LLViewerShaderMgr::setShaders()  			// Load all shaders to set max levels  			loadShadersEnvironment();  			loadShadersWater(); -			loadShadersObject();  			loadShadersWindLight();  			loadShadersEffects();  			loadShadersInterface(); @@ -473,14 +472,9 @@ void LLViewerShaderMgr::setShaders()  			// Load max avatar shaders to set the max level  			mVertexShaderLevel[SHADER_AVATAR] = 3;  			mMaxAvatarShaderLevel = 3; -			loadShadersAvatar(); -			 -#if 0 && LL_DARWIN // force avatar shaders off for mac -			mVertexShaderLevel[SHADER_AVATAR] = 0; -			sMaxAvatarShaderLevel = 0; -#else -			if (gSavedSettings.getBOOL("RenderAvatarVP")) -			{ +						 +			if (gSavedSettings.getBOOL("RenderAvatarVP") && loadShadersObject()) +			{ //hardware skinning is enabled and rigged attachment shaders loaded correctly  				BOOL avatar_cloth = gSavedSettings.getBOOL("RenderAvatarCloth");  				S32 avatar_class = 1; @@ -511,10 +505,14 @@ void LLViewerShaderMgr::setShaders()  				}  			}  			else -			{ +			{ //hardware skinning not possible, neither is deferred rendering  				mVertexShaderLevel[SHADER_AVATAR] = 0; +				mVertexShaderLevel[SHADER_DEFERRED] = 0; +				gSavedSettings.setBOOL("RenderDeferred", FALSE);  				gSavedSettings.setBOOL("RenderAvatarCloth", FALSE); +				gSavedSettings.setBOOL("RenderAvatarVP", FALSE);  				loadShadersAvatar(); // unloads +				loadShadersObject();  			}  			if (!loadShadersDeferred()) @@ -524,7 +522,6 @@ void LLViewerShaderMgr::setShaders()  				setShaders();  				return;  			} -#endif  		}  		else  		{ @@ -1320,7 +1317,7 @@ BOOL LLViewerShaderMgr::loadShadersObject()  		gSkinnedObjectFullbrightShinyWaterProgram.unload();  		gSkinnedObjectShinySimpleWaterProgram.unload(); -		return FALSE; +		return TRUE;  	}  	if (success) @@ -1446,138 +1443,141 @@ BOOL LLViewerShaderMgr::loadShadersObject()  		success = gObjectFullbrightShinyWaterProgram.createShader(NULL, &mShinyUniforms);  	} -	if (success) -	{ -		gSkinnedObjectSimpleProgram.mName = "Skinned Simple Shader"; -		gSkinnedObjectSimpleProgram.mFeatures.calculatesLighting = true; -		gSkinnedObjectSimpleProgram.mFeatures.calculatesAtmospherics = true; -		gSkinnedObjectSimpleProgram.mFeatures.hasGamma = true; -		gSkinnedObjectSimpleProgram.mFeatures.hasAtmospherics = true; -		gSkinnedObjectSimpleProgram.mFeatures.hasLighting = true; -		gSkinnedObjectSimpleProgram.mFeatures.hasObjectSkinning = true; -		gSkinnedObjectSimpleProgram.mShaderFiles.clear(); -		gSkinnedObjectSimpleProgram.mShaderFiles.push_back(make_pair("objects/simpleSkinnedV.glsl", GL_VERTEX_SHADER_ARB)); -		gSkinnedObjectSimpleProgram.mShaderFiles.push_back(make_pair("objects/simpleF.glsl", GL_FRAGMENT_SHADER_ARB)); -		gSkinnedObjectSimpleProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; -		success = gSkinnedObjectSimpleProgram.createShader(NULL, NULL); -	} +	if (mVertexShaderLevel[SHADER_AVATAR] > 0) +	{ //load hardware skinned attachment shaders +		if (success) +		{ +			gSkinnedObjectSimpleProgram.mName = "Skinned Simple Shader"; +			gSkinnedObjectSimpleProgram.mFeatures.calculatesLighting = true; +			gSkinnedObjectSimpleProgram.mFeatures.calculatesAtmospherics = true; +			gSkinnedObjectSimpleProgram.mFeatures.hasGamma = true; +			gSkinnedObjectSimpleProgram.mFeatures.hasAtmospherics = true; +			gSkinnedObjectSimpleProgram.mFeatures.hasLighting = true; +			gSkinnedObjectSimpleProgram.mFeatures.hasObjectSkinning = true; +			gSkinnedObjectSimpleProgram.mShaderFiles.clear(); +			gSkinnedObjectSimpleProgram.mShaderFiles.push_back(make_pair("objects/simpleSkinnedV.glsl", GL_VERTEX_SHADER_ARB)); +			gSkinnedObjectSimpleProgram.mShaderFiles.push_back(make_pair("objects/simpleF.glsl", GL_FRAGMENT_SHADER_ARB)); +			gSkinnedObjectSimpleProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; +			success = gSkinnedObjectSimpleProgram.createShader(NULL, NULL); +		} -	if (success) -	{ -		gSkinnedObjectFullbrightProgram.mName = "Skinned Fullbright Shader"; -		gSkinnedObjectFullbrightProgram.mFeatures.calculatesAtmospherics = true; -		gSkinnedObjectFullbrightProgram.mFeatures.hasGamma = true; -		gSkinnedObjectFullbrightProgram.mFeatures.hasTransport = true; -		gSkinnedObjectFullbrightProgram.mFeatures.isFullbright = true; -		gSkinnedObjectFullbrightProgram.mFeatures.hasObjectSkinning = true; -		gSkinnedObjectFullbrightProgram.mShaderFiles.clear(); -		gSkinnedObjectFullbrightProgram.mShaderFiles.push_back(make_pair("objects/fullbrightSkinnedV.glsl", GL_VERTEX_SHADER_ARB)); -		gSkinnedObjectFullbrightProgram.mShaderFiles.push_back(make_pair("objects/fullbrightF.glsl", GL_FRAGMENT_SHADER_ARB)); -		gSkinnedObjectFullbrightProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; -		success = gSkinnedObjectFullbrightProgram.createShader(NULL, NULL); -	} +		if (success) +		{ +			gSkinnedObjectFullbrightProgram.mName = "Skinned Fullbright Shader"; +			gSkinnedObjectFullbrightProgram.mFeatures.calculatesAtmospherics = true; +			gSkinnedObjectFullbrightProgram.mFeatures.hasGamma = true; +			gSkinnedObjectFullbrightProgram.mFeatures.hasTransport = true; +			gSkinnedObjectFullbrightProgram.mFeatures.isFullbright = true; +			gSkinnedObjectFullbrightProgram.mFeatures.hasObjectSkinning = true; +			gSkinnedObjectFullbrightProgram.mShaderFiles.clear(); +			gSkinnedObjectFullbrightProgram.mShaderFiles.push_back(make_pair("objects/fullbrightSkinnedV.glsl", GL_VERTEX_SHADER_ARB)); +			gSkinnedObjectFullbrightProgram.mShaderFiles.push_back(make_pair("objects/fullbrightF.glsl", GL_FRAGMENT_SHADER_ARB)); +			gSkinnedObjectFullbrightProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; +			success = gSkinnedObjectFullbrightProgram.createShader(NULL, NULL); +		} -	if (success) -	{ -		gSkinnedObjectFullbrightShinyProgram.mName = "Skinned Fullbright Shiny Shader"; -		gSkinnedObjectFullbrightShinyProgram.mFeatures.calculatesAtmospherics = true; -		gSkinnedObjectFullbrightShinyProgram.mFeatures.hasGamma = true; -		gSkinnedObjectFullbrightShinyProgram.mFeatures.hasTransport = true; -		gSkinnedObjectFullbrightShinyProgram.mFeatures.isShiny = true; -		gSkinnedObjectFullbrightShinyProgram.mFeatures.isFullbright = true; -		gSkinnedObjectFullbrightShinyProgram.mFeatures.hasObjectSkinning = true; -		gSkinnedObjectFullbrightShinyProgram.mShaderFiles.clear(); -		gSkinnedObjectFullbrightShinyProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinySkinnedV.glsl", GL_VERTEX_SHADER_ARB)); -		gSkinnedObjectFullbrightShinyProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinyF.glsl", GL_FRAGMENT_SHADER_ARB)); -		gSkinnedObjectFullbrightShinyProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; -		success = gSkinnedObjectFullbrightShinyProgram.createShader(NULL, &mShinyUniforms); -	} +		if (success) +		{ +			gSkinnedObjectFullbrightShinyProgram.mName = "Skinned Fullbright Shiny Shader"; +			gSkinnedObjectFullbrightShinyProgram.mFeatures.calculatesAtmospherics = true; +			gSkinnedObjectFullbrightShinyProgram.mFeatures.hasGamma = true; +			gSkinnedObjectFullbrightShinyProgram.mFeatures.hasTransport = true; +			gSkinnedObjectFullbrightShinyProgram.mFeatures.isShiny = true; +			gSkinnedObjectFullbrightShinyProgram.mFeatures.isFullbright = true; +			gSkinnedObjectFullbrightShinyProgram.mFeatures.hasObjectSkinning = true; +			gSkinnedObjectFullbrightShinyProgram.mShaderFiles.clear(); +			gSkinnedObjectFullbrightShinyProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinySkinnedV.glsl", GL_VERTEX_SHADER_ARB)); +			gSkinnedObjectFullbrightShinyProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinyF.glsl", GL_FRAGMENT_SHADER_ARB)); +			gSkinnedObjectFullbrightShinyProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; +			success = gSkinnedObjectFullbrightShinyProgram.createShader(NULL, &mShinyUniforms); +		} -	if (success) -	{ -		gSkinnedObjectShinySimpleProgram.mName = "Skinned Shiny Simple Shader"; -		gSkinnedObjectShinySimpleProgram.mFeatures.calculatesLighting = true; -		gSkinnedObjectShinySimpleProgram.mFeatures.calculatesAtmospherics = true; -		gSkinnedObjectShinySimpleProgram.mFeatures.hasGamma = true; -		gSkinnedObjectShinySimpleProgram.mFeatures.hasAtmospherics = true; -		gSkinnedObjectShinySimpleProgram.mFeatures.hasObjectSkinning = true; -		gSkinnedObjectShinySimpleProgram.mFeatures.isShiny = true; -		gSkinnedObjectShinySimpleProgram.mShaderFiles.clear(); -		gSkinnedObjectShinySimpleProgram.mShaderFiles.push_back(make_pair("objects/shinySimpleSkinnedV.glsl", GL_VERTEX_SHADER_ARB)); -		gSkinnedObjectShinySimpleProgram.mShaderFiles.push_back(make_pair("objects/shinyF.glsl", GL_FRAGMENT_SHADER_ARB)); -		gSkinnedObjectShinySimpleProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; -		success = gSkinnedObjectShinySimpleProgram.createShader(NULL, &mShinyUniforms); -	} +		if (success) +		{ +			gSkinnedObjectShinySimpleProgram.mName = "Skinned Shiny Simple Shader"; +			gSkinnedObjectShinySimpleProgram.mFeatures.calculatesLighting = true; +			gSkinnedObjectShinySimpleProgram.mFeatures.calculatesAtmospherics = true; +			gSkinnedObjectShinySimpleProgram.mFeatures.hasGamma = true; +			gSkinnedObjectShinySimpleProgram.mFeatures.hasAtmospherics = true; +			gSkinnedObjectShinySimpleProgram.mFeatures.hasObjectSkinning = true; +			gSkinnedObjectShinySimpleProgram.mFeatures.isShiny = true; +			gSkinnedObjectShinySimpleProgram.mShaderFiles.clear(); +			gSkinnedObjectShinySimpleProgram.mShaderFiles.push_back(make_pair("objects/shinySimpleSkinnedV.glsl", GL_VERTEX_SHADER_ARB)); +			gSkinnedObjectShinySimpleProgram.mShaderFiles.push_back(make_pair("objects/shinyF.glsl", GL_FRAGMENT_SHADER_ARB)); +			gSkinnedObjectShinySimpleProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; +			success = gSkinnedObjectShinySimpleProgram.createShader(NULL, &mShinyUniforms); +		} -	if (success) -	{ -		gSkinnedObjectSimpleWaterProgram.mName = "Skinned Simple Water Shader"; -		gSkinnedObjectSimpleWaterProgram.mFeatures.calculatesLighting = true; -		gSkinnedObjectSimpleWaterProgram.mFeatures.calculatesAtmospherics = true; -		gSkinnedObjectSimpleWaterProgram.mFeatures.hasGamma = true; -		gSkinnedObjectSimpleWaterProgram.mFeatures.hasAtmospherics = true; -		gSkinnedObjectSimpleWaterProgram.mFeatures.hasLighting = true; -		gSkinnedObjectSimpleWaterProgram.mFeatures.hasWaterFog = true; -		gSkinnedObjectSimpleWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER; -		gSkinnedObjectSimpleWaterProgram.mFeatures.hasObjectSkinning = true; -		gSkinnedObjectSimpleWaterProgram.mShaderFiles.clear(); -		gSkinnedObjectSimpleWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleSkinnedV.glsl", GL_VERTEX_SHADER_ARB)); -		gSkinnedObjectSimpleWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleWaterF.glsl", GL_FRAGMENT_SHADER_ARB)); -		gSkinnedObjectSimpleWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; -		success = gSkinnedObjectSimpleWaterProgram.createShader(NULL, NULL); -	} +		if (success) +		{ +			gSkinnedObjectSimpleWaterProgram.mName = "Skinned Simple Water Shader"; +			gSkinnedObjectSimpleWaterProgram.mFeatures.calculatesLighting = true; +			gSkinnedObjectSimpleWaterProgram.mFeatures.calculatesAtmospherics = true; +			gSkinnedObjectSimpleWaterProgram.mFeatures.hasGamma = true; +			gSkinnedObjectSimpleWaterProgram.mFeatures.hasAtmospherics = true; +			gSkinnedObjectSimpleWaterProgram.mFeatures.hasLighting = true; +			gSkinnedObjectSimpleWaterProgram.mFeatures.hasWaterFog = true; +			gSkinnedObjectSimpleWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER; +			gSkinnedObjectSimpleWaterProgram.mFeatures.hasObjectSkinning = true; +			gSkinnedObjectSimpleWaterProgram.mShaderFiles.clear(); +			gSkinnedObjectSimpleWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleSkinnedV.glsl", GL_VERTEX_SHADER_ARB)); +			gSkinnedObjectSimpleWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleWaterF.glsl", GL_FRAGMENT_SHADER_ARB)); +			gSkinnedObjectSimpleWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; +			success = gSkinnedObjectSimpleWaterProgram.createShader(NULL, NULL); +		} -	if (success) -	{ -		gSkinnedObjectFullbrightWaterProgram.mName = "Skinned Fullbright Water Shader"; -		gSkinnedObjectFullbrightWaterProgram.mFeatures.calculatesAtmospherics = true; -		gSkinnedObjectFullbrightWaterProgram.mFeatures.hasGamma = true; -		gSkinnedObjectFullbrightWaterProgram.mFeatures.hasTransport = true; -		gSkinnedObjectFullbrightWaterProgram.mFeatures.isFullbright = true; -		gSkinnedObjectFullbrightWaterProgram.mFeatures.hasObjectSkinning = true; -		gSkinnedObjectFullbrightWaterProgram.mFeatures.hasWaterFog = true; -		gSkinnedObjectFullbrightWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER; -		gSkinnedObjectFullbrightWaterProgram.mShaderFiles.clear(); -		gSkinnedObjectFullbrightWaterProgram.mShaderFiles.push_back(make_pair("objects/fullbrightSkinnedV.glsl", GL_VERTEX_SHADER_ARB)); -		gSkinnedObjectFullbrightWaterProgram.mShaderFiles.push_back(make_pair("objects/fullbrightWaterF.glsl", GL_FRAGMENT_SHADER_ARB)); -		gSkinnedObjectFullbrightWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; -		success = gSkinnedObjectFullbrightWaterProgram.createShader(NULL, NULL); -	} +		if (success) +		{ +			gSkinnedObjectFullbrightWaterProgram.mName = "Skinned Fullbright Water Shader"; +			gSkinnedObjectFullbrightWaterProgram.mFeatures.calculatesAtmospherics = true; +			gSkinnedObjectFullbrightWaterProgram.mFeatures.hasGamma = true; +			gSkinnedObjectFullbrightWaterProgram.mFeatures.hasTransport = true; +			gSkinnedObjectFullbrightWaterProgram.mFeatures.isFullbright = true; +			gSkinnedObjectFullbrightWaterProgram.mFeatures.hasObjectSkinning = true; +			gSkinnedObjectFullbrightWaterProgram.mFeatures.hasWaterFog = true; +			gSkinnedObjectFullbrightWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER; +			gSkinnedObjectFullbrightWaterProgram.mShaderFiles.clear(); +			gSkinnedObjectFullbrightWaterProgram.mShaderFiles.push_back(make_pair("objects/fullbrightSkinnedV.glsl", GL_VERTEX_SHADER_ARB)); +			gSkinnedObjectFullbrightWaterProgram.mShaderFiles.push_back(make_pair("objects/fullbrightWaterF.glsl", GL_FRAGMENT_SHADER_ARB)); +			gSkinnedObjectFullbrightWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; +			success = gSkinnedObjectFullbrightWaterProgram.createShader(NULL, NULL); +		} -	if (success) -	{ -		gSkinnedObjectFullbrightShinyWaterProgram.mName = "Skinned Fullbright Shiny Water Shader"; -		gSkinnedObjectFullbrightShinyWaterProgram.mFeatures.calculatesAtmospherics = true; -		gSkinnedObjectFullbrightShinyWaterProgram.mFeatures.hasGamma = true; -		gSkinnedObjectFullbrightShinyWaterProgram.mFeatures.hasTransport = true; -		gSkinnedObjectFullbrightShinyWaterProgram.mFeatures.isShiny = true; -		gSkinnedObjectFullbrightShinyWaterProgram.mFeatures.isFullbright = true; -		gSkinnedObjectFullbrightShinyWaterProgram.mFeatures.hasObjectSkinning = true; -		gSkinnedObjectFullbrightShinyWaterProgram.mFeatures.hasWaterFog = true; -		gSkinnedObjectFullbrightShinyWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER; -		gSkinnedObjectFullbrightShinyWaterProgram.mShaderFiles.clear(); -		gSkinnedObjectFullbrightShinyWaterProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinySkinnedV.glsl", GL_VERTEX_SHADER_ARB)); -		gSkinnedObjectFullbrightShinyWaterProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinyWaterF.glsl", GL_FRAGMENT_SHADER_ARB)); -		gSkinnedObjectFullbrightShinyWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; -		success = gSkinnedObjectFullbrightShinyWaterProgram.createShader(NULL, &mShinyUniforms); -	} +		if (success) +		{ +			gSkinnedObjectFullbrightShinyWaterProgram.mName = "Skinned Fullbright Shiny Water Shader"; +			gSkinnedObjectFullbrightShinyWaterProgram.mFeatures.calculatesAtmospherics = true; +			gSkinnedObjectFullbrightShinyWaterProgram.mFeatures.hasGamma = true; +			gSkinnedObjectFullbrightShinyWaterProgram.mFeatures.hasTransport = true; +			gSkinnedObjectFullbrightShinyWaterProgram.mFeatures.isShiny = true; +			gSkinnedObjectFullbrightShinyWaterProgram.mFeatures.isFullbright = true; +			gSkinnedObjectFullbrightShinyWaterProgram.mFeatures.hasObjectSkinning = true; +			gSkinnedObjectFullbrightShinyWaterProgram.mFeatures.hasWaterFog = true; +			gSkinnedObjectFullbrightShinyWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER; +			gSkinnedObjectFullbrightShinyWaterProgram.mShaderFiles.clear(); +			gSkinnedObjectFullbrightShinyWaterProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinySkinnedV.glsl", GL_VERTEX_SHADER_ARB)); +			gSkinnedObjectFullbrightShinyWaterProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinyWaterF.glsl", GL_FRAGMENT_SHADER_ARB)); +			gSkinnedObjectFullbrightShinyWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; +			success = gSkinnedObjectFullbrightShinyWaterProgram.createShader(NULL, &mShinyUniforms); +		} -	if (success) -	{ -		gSkinnedObjectShinySimpleWaterProgram.mName = "Skinned Shiny Simple Water Shader"; -		gSkinnedObjectShinySimpleWaterProgram.mFeatures.calculatesLighting = true; -		gSkinnedObjectShinySimpleWaterProgram.mFeatures.calculatesAtmospherics = true; -		gSkinnedObjectShinySimpleWaterProgram.mFeatures.hasGamma = true; -		gSkinnedObjectShinySimpleWaterProgram.mFeatures.hasAtmospherics = true; -		gSkinnedObjectShinySimpleWaterProgram.mFeatures.hasObjectSkinning = true; -		gSkinnedObjectShinySimpleWaterProgram.mFeatures.isShiny = true; -		gSkinnedObjectShinySimpleWaterProgram.mFeatures.hasWaterFog = true; -		gSkinnedObjectShinySimpleWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER; -		gSkinnedObjectShinySimpleWaterProgram.mShaderFiles.clear(); -		gSkinnedObjectShinySimpleWaterProgram.mShaderFiles.push_back(make_pair("objects/shinySimpleSkinnedV.glsl", GL_VERTEX_SHADER_ARB)); -		gSkinnedObjectShinySimpleWaterProgram.mShaderFiles.push_back(make_pair("objects/shinyWaterF.glsl", GL_FRAGMENT_SHADER_ARB)); -		gSkinnedObjectShinySimpleWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; -		success = gSkinnedObjectShinySimpleWaterProgram.createShader(NULL, &mShinyUniforms); +		if (success) +		{ +			gSkinnedObjectShinySimpleWaterProgram.mName = "Skinned Shiny Simple Water Shader"; +			gSkinnedObjectShinySimpleWaterProgram.mFeatures.calculatesLighting = true; +			gSkinnedObjectShinySimpleWaterProgram.mFeatures.calculatesAtmospherics = true; +			gSkinnedObjectShinySimpleWaterProgram.mFeatures.hasGamma = true; +			gSkinnedObjectShinySimpleWaterProgram.mFeatures.hasAtmospherics = true; +			gSkinnedObjectShinySimpleWaterProgram.mFeatures.hasObjectSkinning = true; +			gSkinnedObjectShinySimpleWaterProgram.mFeatures.isShiny = true; +			gSkinnedObjectShinySimpleWaterProgram.mFeatures.hasWaterFog = true; +			gSkinnedObjectShinySimpleWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER; +			gSkinnedObjectShinySimpleWaterProgram.mShaderFiles.clear(); +			gSkinnedObjectShinySimpleWaterProgram.mShaderFiles.push_back(make_pair("objects/shinySimpleSkinnedV.glsl", GL_VERTEX_SHADER_ARB)); +			gSkinnedObjectShinySimpleWaterProgram.mShaderFiles.push_back(make_pair("objects/shinyWaterF.glsl", GL_FRAGMENT_SHADER_ARB)); +			gSkinnedObjectShinySimpleWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; +			success = gSkinnedObjectShinySimpleWaterProgram.createShader(NULL, &mShinyUniforms); +		}  	}  	if( !success ) | 
