diff options
Diffstat (limited to 'scene')
-rw-r--r-- | scene/resources/material.cpp | 11 | ||||
-rw-r--r-- | scene/resources/material.h | 6 |
2 files changed, 17 insertions, 0 deletions
diff --git a/scene/resources/material.cpp b/scene/resources/material.cpp index 3d6a10ffc7..a187692bcb 100644 --- a/scene/resources/material.cpp +++ b/scene/resources/material.cpp @@ -65,6 +65,12 @@ RID Material::get_rid() const { return material; } +void Material::_validate_property(PropertyInfo &property) const { + + if (!_can_do_next_pass() && property.name=="next_pass") { + property.usage=0; + } +} void Material::_bind_methods() { @@ -204,6 +210,11 @@ void ShaderMaterial::get_argument_options(const StringName &p_function, int p_id Resource::get_argument_options(p_function, p_idx, r_options); } +bool ShaderMaterial::_can_do_next_pass() const { + + return shader.is_valid() && shader->get_mode()==Shader::MODE_SPATIAL; +} + ShaderMaterial::ShaderMaterial() { } diff --git a/scene/resources/material.h b/scene/resources/material.h index 4e77ab1ed6..fdb11982a8 100644 --- a/scene/resources/material.h +++ b/scene/resources/material.h @@ -53,6 +53,9 @@ class Material : public Resource { protected: _FORCE_INLINE_ RID _get_material() const { return material; } static void _bind_methods(); + virtual bool _can_do_next_pass() const { return false; } + + void _validate_property(PropertyInfo &property) const; public: enum { @@ -84,6 +87,8 @@ protected: void get_argument_options(const StringName &p_function, int p_idx, List<String> *r_options) const; + virtual bool _can_do_next_pass() const; + public: void set_shader(const Ref<Shader> &p_shader); Ref<Shader> get_shader() const; @@ -394,6 +399,7 @@ private: protected: static void _bind_methods(); void _validate_property(PropertyInfo &property) const; + virtual bool _can_do_next_pass() const { return true; } public: void set_albedo(const Color &p_albedo); |