2
0
Эх сурвалжийг харах

hide next pass for material types that make it pointless, closes #10686

Juan Linietsky 8 жил өмнө
parent
commit
308a6f4f99

+ 11 - 0
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() {
 }
 

+ 6 - 0
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);