diff options
| author | Dave Parks <davep@lindenlab.com> | 2010-10-21 16:50:16 -0500 | 
|---|---|---|
| committer | Dave Parks <davep@lindenlab.com> | 2010-10-21 16:50:16 -0500 | 
| commit | 6368f6f84958c8c3c2e48c9f47ec98c7e35308c7 (patch) | |
| tree | 34481a3170447ef2b1a2e29c7f7647d68e95a685 /indra/newview | |
| parent | 218d37d859dab49fd6810e47480ed6bc5b517270 (diff) | |
SH-175 Better handling of failure to load rigged attachment shaders.
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/llviewershadermgr.cpp | 274 | 
1 files changed, 137 insertions, 137 deletions
| 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 ) | 
