|
|
@@ -1829,6 +1829,7 @@ cg_analyze_shader(const ShaderCaps &caps) {
|
|
|
// }
|
|
|
// }
|
|
|
|
|
|
+ cg_release_resources();
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
@@ -2657,9 +2658,12 @@ make(const string &body, ShaderLanguage lang) {
|
|
|
#endif
|
|
|
|
|
|
ShaderFile sbody(body);
|
|
|
- ShaderTable::const_iterator i = _make_table.find(sbody);
|
|
|
- if (i != _make_table.end() && (lang == SL_none || lang == i->second->_language)) {
|
|
|
- return i->second;
|
|
|
+
|
|
|
+ if (cache_generated_shaders) {
|
|
|
+ ShaderTable::const_iterator i = _make_table.find(sbody);
|
|
|
+ if (i != _make_table.end() && (lang == SL_none || lang == i->second->_language)) {
|
|
|
+ return i->second;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
PT(Shader) shader = new Shader(lang);
|
|
|
@@ -2678,7 +2682,9 @@ make(const string &body, ShaderLanguage lang) {
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
- _make_table[sbody] = shader;
|
|
|
+ if (cache_generated_shaders) {
|
|
|
+ _make_table[sbody] = shader;
|
|
|
+ }
|
|
|
|
|
|
if (dump_generated_shaders) {
|
|
|
ostringstream fns;
|
|
|
@@ -2718,9 +2724,11 @@ make(ShaderLanguage lang, const string &vertex, const string &fragment,
|
|
|
|
|
|
ShaderFile sbody(vertex, fragment, geometry, tess_control, tess_evaluation);
|
|
|
|
|
|
- ShaderTable::const_iterator i = _make_table.find(sbody);
|
|
|
- if (i != _make_table.end() && (lang == SL_none || lang == i->second->_language)) {
|
|
|
- return i->second;
|
|
|
+ if (cache_generated_shaders) {
|
|
|
+ ShaderTable::const_iterator i = _make_table.find(sbody);
|
|
|
+ if (i != _make_table.end() && (lang == SL_none || lang == i->second->_language)) {
|
|
|
+ return i->second;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
PT(Shader) shader = new Shader(lang);
|
|
|
@@ -2737,8 +2745,10 @@ make(ShaderLanguage lang, const string &vertex, const string &fragment,
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
+ if (cache_generated_shaders) {
|
|
|
+ _make_table[sbody] = shader;
|
|
|
+ }
|
|
|
|
|
|
- _make_table[sbody] = shader;
|
|
|
return shader;
|
|
|
}
|
|
|
|
|
|
@@ -2759,16 +2769,22 @@ make_compute(ShaderLanguage lang, const string &body) {
|
|
|
sbody._separate = true;
|
|
|
sbody._compute = body;
|
|
|
|
|
|
- ShaderTable::const_iterator i = _make_table.find(sbody);
|
|
|
- if (i != _make_table.end() && (lang == SL_none || lang == i->second->_language)) {
|
|
|
- return i->second;
|
|
|
+
|
|
|
+ if (cache_generated_shaders) {
|
|
|
+ ShaderTable::const_iterator i = _make_table.find(sbody);
|
|
|
+ if (i != _make_table.end() && (lang == SL_none || lang == i->second->_language)) {
|
|
|
+ return i->second;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
PT(Shader) shader = new Shader(lang);
|
|
|
shader->_filename = ShaderFile("created-shader");
|
|
|
shader->_text = sbody;
|
|
|
|
|
|
- _make_table[sbody] = shader;
|
|
|
+ if (cache_generated_shaders) {
|
|
|
+ _make_table[sbody] = shader;
|
|
|
+ }
|
|
|
+
|
|
|
return shader;
|
|
|
}
|
|
|
|