diff options
| author | Juan Linietsky | 2014-12-21 11:42:44 -0300 |
|---|---|---|
| committer | Juan Linietsky | 2014-12-21 11:42:44 -0300 |
| commit | f7f197c40941ffaf03fcddeb20536dec8074ca00 (patch) | |
| tree | 7a69483162bb873813f6152176b815d189af4edd /scene/resources/shader.cpp | |
| parent | 9783f6fc969947fdbf666950ab3da21ac462c57e (diff) | |
| download | godot-f7f197c40941ffaf03fcddeb20536dec8074ca00.tar.gz godot-f7f197c40941ffaf03fcddeb20536dec8074ca00.tar.zst godot-f7f197c40941ffaf03fcddeb20536dec8074ca00.zip | |
Diffstat (limited to 'scene/resources/shader.cpp')
| -rw-r--r-- | scene/resources/shader.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/scene/resources/shader.cpp b/scene/resources/shader.cpp index 6d65da378..cc6bed314 100644 --- a/scene/resources/shader.cpp +++ b/scene/resources/shader.cpp @@ -120,6 +120,13 @@ Dictionary Shader::_get_code() { c["vertex_ofs"]=0; c["light"]=ls; c["light_ofs"]=0; + Array arr; + for(const Map<StringName,Ref<Texture> >::Element *E=default_textures.front();E;E=E->next()) { + arr.push_back(E->key()); + arr.push_back(E->get()); + } + if (arr.size()) + c["default_tex"]=arr; return c; } @@ -132,8 +139,41 @@ void Shader::_set_code(const Dictionary& p_string) { light=p_string["light"]; set_code(p_string["vertex"],p_string["fragment"],light); + if (p_string.has("default_tex")) { + Array arr=p_string["default_tex"]; + if ((arr.size()&1)==0) { + for(int i=0;i<arr.size();i+=2) + set_default_texture_param(arr[i],arr[i+1]); + } + } +} + +void Shader::set_default_texture_param(const StringName& p_param,const Ref<Texture>& p_texture) { + + if (p_texture.is_valid()) + default_textures[p_param]=p_texture; + else + default_textures.erase(p_param); +} + +Ref<Texture> Shader::get_default_texture_param(const StringName& p_param) const{ + + if (default_textures.has(p_param)) + return default_textures[p_param]; + else + return Ref<Texture>(); } +void Shader::get_default_texture_param_list(List<StringName>* r_textures) const{ + + for(const Map<StringName,Ref<Texture> >::Element *E=default_textures.front();E;E=E->next()) { + + r_textures->push_back(E->key()); + } + +} + + void Shader::_bind_methods() { ObjectTypeDB::bind_method(_MD("set_mode","mode"),&Shader::set_mode); @@ -144,6 +184,9 @@ void Shader::_bind_methods() { ObjectTypeDB::bind_method(_MD("get_fragment_code"),&Shader::get_fragment_code); ObjectTypeDB::bind_method(_MD("get_light_code"),&Shader::get_light_code); + ObjectTypeDB::bind_method(_MD("set_default_texture_param","param","texture:Texture"),&Shader::set_default_texture_param); + ObjectTypeDB::bind_method(_MD("get_default_texture_param:Texture","param"),&Shader::get_default_texture_param); + ObjectTypeDB::bind_method(_MD("has_param","name"),&Shader::has_param); ObjectTypeDB::bind_method(_MD("_set_code","code"),&Shader::_set_code); |
