summaryrefslogtreecommitdiff
path: root/scene/resources
diff options
context:
space:
mode:
authorJuan Linietsky <reduzio@gmail.com>2017-09-05 20:40:50 -0300
committerJuan Linietsky <reduzio@gmail.com>2017-09-05 20:40:50 -0300
commit308a6f4f99a5204682a2612d097e5c066f88196f (patch)
tree5ca07300816c5e85b28fc1d03dcc9a428c54d8d3 /scene/resources
parentf5c5d07f9c5c387293a6df543fd5a428800e48f9 (diff)
hide next pass for material types that make it pointless, closes #10686
Diffstat (limited to 'scene/resources')
-rw-r--r--scene/resources/material.cpp11
-rw-r--r--scene/resources/material.h6
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);