diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llrender/llshadermgr.cpp | 29 | ||||
| -rw-r--r-- | indra/newview/llviewershadermgr.cpp | 5 | 
2 files changed, 26 insertions, 8 deletions
| diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp index 3910cd779c..b4e7aaa9b4 100644 --- a/indra/llrender/llshadermgr.cpp +++ b/indra/llrender/llshadermgr.cpp @@ -542,6 +542,8 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade  			}  			text[count++] = strdup("\t}\n"); +			text[count++] = strdup("\treturn vec4(0,0,0,0);\n"); +			text[count++] = strdup("}\n");  		}  		else  		{ @@ -562,10 +564,10 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade  				std::string if_str = llformat("if (ti == %d) return texture2D(tex%d, texcoord);\n", i, i);  				text[count++] = strdup(if_str.c_str());  			} -		}			 -		text[count++] = strdup("\treturn vec4(0,0,0,0);\n"); -		text[count++] = strdup("}\n"); +			text[count++] = strdup("\treturn vec4(0,0,0,0);\n"); +			text[count++] = strdup("}\n"); +		}			  	}  	//copy file into memory @@ -610,11 +612,6 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade  		}  	} -	//free memory -	for (GLuint i = 0; i < count; i++) -	{ -		free(text[i]); -	}  	if (error == GL_NO_ERROR)  	{  		//check for errors @@ -628,6 +625,16 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade  				//an error occured, print log  				LL_WARNS("ShaderLoading") << "GLSL Compilation Error: (" << error << ") in " << filename << LL_ENDL;  				dumpObjectLog(ret); + +				std::stringstream ostr; +				//dump shader source for debugging +				for (GLuint i = 0; i < count; i++) +				{ +					ostr << i << ": " << text[i]; +				} + +				LL_WARNS("ShaderLoading") << "\n" << ostr.str() << llendl; +  				ret = 0;  			}  		} @@ -638,6 +645,12 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade  	}  	stop_glerror(); +	//free memory +	for (GLuint i = 0; i < count; i++) +	{ +		free(text[i]); +	} +  	//successfully loaded, save results  	if (ret)  	{ diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index 0e3a0ef507..592923ee07 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -722,6 +722,11 @@ BOOL LLViewerShaderMgr::loadBasicShaders()  	shaders.reserve(13);  	S32 ch = gGLManager.mNumTextureImageUnits-1; +	if (gGLManager.mGLVersion < 3.1f) +	{ //force to 1 texture index channel for old drivers +		ch = 1; +	} +  	std::vector<S32> index_channels;  	index_channels.push_back(-1);	 shaders.push_back( make_pair( "windlight/atmosphericsVarsF.glsl",		mVertexShaderLevel[SHADER_WINDLIGHT] ) );  	index_channels.push_back(-1);	 shaders.push_back( make_pair( "windlight/gammaF.glsl",					mVertexShaderLevel[SHADER_WINDLIGHT]) ); | 
