mirror of
https://github.com/godotengine/godot.git
synced 2024-11-22 12:12:28 +00:00
Added Texture2DArray support to visual shaders
This commit is contained in:
parent
ac2c143420
commit
cb9cbf840d
26
doc/classes/VisualShaderNodeSample3D.xml
Normal file
26
doc/classes/VisualShaderNodeSample3D.xml
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<class name="VisualShaderNodeSample3D" inherits="VisualShaderNode" version="4.0">
|
||||||
|
<brief_description>
|
||||||
|
A base node for nodes which samples 3D textures in the visual shader graph.
|
||||||
|
</brief_description>
|
||||||
|
<description>
|
||||||
|
A virtual class, use the descendants instead.
|
||||||
|
</description>
|
||||||
|
<tutorials>
|
||||||
|
</tutorials>
|
||||||
|
<methods>
|
||||||
|
</methods>
|
||||||
|
<members>
|
||||||
|
<member name="source" type="int" setter="set_source" getter="get_source" enum="VisualShaderNodeSample3D.Source" default="0">
|
||||||
|
An input source type.
|
||||||
|
</member>
|
||||||
|
</members>
|
||||||
|
<constants>
|
||||||
|
<constant name="SOURCE_TEXTURE" value="0" enum="Source">
|
||||||
|
Creates internal uniform and provides a way to assign it within node.
|
||||||
|
</constant>
|
||||||
|
<constant name="SOURCE_PORT" value="1" enum="Source">
|
||||||
|
Use the uniform texture from sampler port.
|
||||||
|
</constant>
|
||||||
|
</constants>
|
||||||
|
</class>
|
20
doc/classes/VisualShaderNodeTexture2DArray.xml
Normal file
20
doc/classes/VisualShaderNodeTexture2DArray.xml
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<class name="VisualShaderNodeTexture2DArray" inherits="VisualShaderNodeSample3D" version="4.0">
|
||||||
|
<brief_description>
|
||||||
|
A 2D texture uniform array to be used within the visual shader graph.
|
||||||
|
</brief_description>
|
||||||
|
<description>
|
||||||
|
Translated to [code]uniform sampler2DArray[/code] in the shader language.
|
||||||
|
</description>
|
||||||
|
<tutorials>
|
||||||
|
</tutorials>
|
||||||
|
<methods>
|
||||||
|
</methods>
|
||||||
|
<members>
|
||||||
|
<member name="texture_array" type="Texture2DArray" setter="set_texture_array" getter="get_texture_array">
|
||||||
|
A source texture array. Used if [member VisualShaderNodeSample3D.source] is set to [constant VisualShaderNodeSample3D.SOURCE_TEXTURE].
|
||||||
|
</member>
|
||||||
|
</members>
|
||||||
|
<constants>
|
||||||
|
</constants>
|
||||||
|
</class>
|
@ -2750,8 +2750,10 @@ VisualShaderEditor::VisualShaderEditor() {
|
|||||||
texture_node_option_idx = add_options.size();
|
texture_node_option_idx = add_options.size();
|
||||||
add_options.push_back(AddOption("Texture2D", "Textures", "Functions", "VisualShaderNodeTexture", TTR("Perform the texture lookup."), -1, -1));
|
add_options.push_back(AddOption("Texture2D", "Textures", "Functions", "VisualShaderNodeTexture", TTR("Perform the texture lookup."), -1, -1));
|
||||||
add_options.push_back(AddOption("CubeMapUniform", "Textures", "Variables", "VisualShaderNodeCubemapUniform", TTR("Cubic texture uniform lookup."), -1, -1));
|
add_options.push_back(AddOption("CubeMapUniform", "Textures", "Variables", "VisualShaderNodeCubemapUniform", TTR("Cubic texture uniform lookup."), -1, -1));
|
||||||
|
add_options.push_back(AddOption("Texture2DArray", "Textures", "Functions", "VisualShaderNodeTexture2DArray", TTR("Perform the 2D-array texture lookup."), -1, -1, -1, -1, -1));
|
||||||
add_options.push_back(AddOption("TextureUniform", "Textures", "Variables", "VisualShaderNodeTextureUniform", TTR("2D texture uniform lookup."), -1, -1));
|
add_options.push_back(AddOption("TextureUniform", "Textures", "Variables", "VisualShaderNodeTextureUniform", TTR("2D texture uniform lookup."), -1, -1));
|
||||||
add_options.push_back(AddOption("TextureUniformTriplanar", "Textures", "Variables", "VisualShaderNodeTextureUniformTriplanar", TTR("2D texture uniform lookup with triplanar."), -1, -1, VisualShader::TYPE_FRAGMENT | VisualShader::TYPE_LIGHT, Shader::MODE_SPATIAL));
|
add_options.push_back(AddOption("TextureUniformTriplanar", "Textures", "Variables", "VisualShaderNodeTextureUniformTriplanar", TTR("2D texture uniform lookup with triplanar."), -1, -1, VisualShader::TYPE_FRAGMENT | VisualShader::TYPE_LIGHT, Shader::MODE_SPATIAL));
|
||||||
|
add_options.push_back(AddOption("Texture2DArrayUniform", "Textures", "Variables", "VisualShaderNodeTexture2DArrayUniform", TTR("2D array of textures uniform lookup."), -1, -1, -1, -1, -1));
|
||||||
|
|
||||||
// TRANSFORM
|
// TRANSFORM
|
||||||
|
|
||||||
|
@ -541,6 +541,8 @@ void register_scene_types() {
|
|||||||
ClassDB::register_class<VisualShaderNodeVectorDecompose>();
|
ClassDB::register_class<VisualShaderNodeVectorDecompose>();
|
||||||
ClassDB::register_class<VisualShaderNodeTransformDecompose>();
|
ClassDB::register_class<VisualShaderNodeTransformDecompose>();
|
||||||
ClassDB::register_class<VisualShaderNodeTexture>();
|
ClassDB::register_class<VisualShaderNodeTexture>();
|
||||||
|
ClassDB::register_virtual_class<VisualShaderNodeSample3D>();
|
||||||
|
ClassDB::register_class<VisualShaderNodeTexture2DArray>();
|
||||||
ClassDB::register_class<VisualShaderNodeCubemap>();
|
ClassDB::register_class<VisualShaderNodeCubemap>();
|
||||||
ClassDB::register_virtual_class<VisualShaderNodeUniform>();
|
ClassDB::register_virtual_class<VisualShaderNodeUniform>();
|
||||||
ClassDB::register_class<VisualShaderNodeFloatUniform>();
|
ClassDB::register_class<VisualShaderNodeFloatUniform>();
|
||||||
@ -551,6 +553,7 @@ void register_scene_types() {
|
|||||||
ClassDB::register_class<VisualShaderNodeTransformUniform>();
|
ClassDB::register_class<VisualShaderNodeTransformUniform>();
|
||||||
ClassDB::register_class<VisualShaderNodeTextureUniform>();
|
ClassDB::register_class<VisualShaderNodeTextureUniform>();
|
||||||
ClassDB::register_class<VisualShaderNodeTextureUniformTriplanar>();
|
ClassDB::register_class<VisualShaderNodeTextureUniformTriplanar>();
|
||||||
|
ClassDB::register_class<VisualShaderNodeTexture2DArrayUniform>();
|
||||||
ClassDB::register_class<VisualShaderNodeCubemapUniform>();
|
ClassDB::register_class<VisualShaderNodeCubemapUniform>();
|
||||||
ClassDB::register_class<VisualShaderNodeIf>();
|
ClassDB::register_class<VisualShaderNodeIf>();
|
||||||
ClassDB::register_class<VisualShaderNodeSwitch>();
|
ClassDB::register_class<VisualShaderNodeSwitch>();
|
||||||
|
@ -781,6 +781,183 @@ VisualShaderNodeTexture::VisualShaderNodeTexture() {
|
|||||||
source = SOURCE_TEXTURE;
|
source = SOURCE_TEXTURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////// Sample3D
|
||||||
|
|
||||||
|
int VisualShaderNodeSample3D::get_input_port_count() const {
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
VisualShaderNodeSample3D::PortType VisualShaderNodeSample3D::get_input_port_type(int p_port) const {
|
||||||
|
switch (p_port) {
|
||||||
|
case 0:
|
||||||
|
return PORT_TYPE_VECTOR;
|
||||||
|
case 1:
|
||||||
|
return PORT_TYPE_SCALAR;
|
||||||
|
case 2:
|
||||||
|
return PORT_TYPE_SAMPLER;
|
||||||
|
default:
|
||||||
|
return PORT_TYPE_SCALAR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String VisualShaderNodeSample3D::get_input_port_name(int p_port) const {
|
||||||
|
switch (p_port) {
|
||||||
|
case 0:
|
||||||
|
return "uvw";
|
||||||
|
case 1:
|
||||||
|
return "lod";
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int VisualShaderNodeSample3D::get_output_port_count() const {
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
VisualShaderNodeSample3D::PortType VisualShaderNodeSample3D::get_output_port_type(int p_port) const {
|
||||||
|
return p_port == 0 ? PORT_TYPE_VECTOR : PORT_TYPE_SCALAR;
|
||||||
|
}
|
||||||
|
|
||||||
|
String VisualShaderNodeSample3D::get_output_port_name(int p_port) const {
|
||||||
|
return p_port == 0 ? "rgb" : "alpha";
|
||||||
|
}
|
||||||
|
|
||||||
|
String VisualShaderNodeSample3D::get_input_port_default_hint(int p_port) const {
|
||||||
|
if (p_port == 0) {
|
||||||
|
return "vec3(UV.xy, 0.0)";
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
String VisualShaderNodeSample3D::generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview) const {
|
||||||
|
String code;
|
||||||
|
if (source == SOURCE_TEXTURE || source == SOURCE_PORT) {
|
||||||
|
String id;
|
||||||
|
code += "\t{\n";
|
||||||
|
if (source == SOURCE_TEXTURE) {
|
||||||
|
id = make_unique_id(p_type, p_id, "tex3d");
|
||||||
|
} else {
|
||||||
|
id = p_input_vars[2];
|
||||||
|
}
|
||||||
|
if (id != String()) {
|
||||||
|
if (p_input_vars[0] == String()) { // Use UV by default.
|
||||||
|
if (p_input_vars[1] == String()) {
|
||||||
|
code += "\t\tvec4 " + id + "_tex_read = texture(" + id + ", vec3(UV.xy, 0.0));\n";
|
||||||
|
} else {
|
||||||
|
code += "\t\tvec4 " + id + "_tex_read = textureLod(" + id + ", vec3(UV.xy, 0.0), " + p_input_vars[1] + ");\n";
|
||||||
|
}
|
||||||
|
} else if (p_input_vars[1] == String()) {
|
||||||
|
//no lod
|
||||||
|
code += "\t\tvec4 " + id + "_tex_read = texture(" + id + ", " + p_input_vars[0] + ");\n";
|
||||||
|
} else {
|
||||||
|
code += "\t\tvec4 " + id + "_tex_read = textureLod(" + id + ", " + p_input_vars[0] + ", " + p_input_vars[1] + ");\n";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
code += "\t\tvec4 " + id + "_tex_read = vec4(0.0);\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
code += "\t\t" + p_output_vars[0] + " = " + id + "_tex_read.rgb;\n";
|
||||||
|
code += "\t\t" + p_output_vars[1] + " = " + id + "_tex_read.a;\n";
|
||||||
|
code += "\t}\n";
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
code += "\t" + p_output_vars[0] + " = vec3(0.0);\n";
|
||||||
|
code += "\t" + p_output_vars[1] + " = 1.0;\n";
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
void VisualShaderNodeSample3D::set_source(Source p_source) {
|
||||||
|
source = p_source;
|
||||||
|
emit_changed();
|
||||||
|
emit_signal("editor_refresh_request");
|
||||||
|
}
|
||||||
|
|
||||||
|
VisualShaderNodeSample3D::Source VisualShaderNodeSample3D::get_source() const {
|
||||||
|
return source;
|
||||||
|
}
|
||||||
|
|
||||||
|
void VisualShaderNodeSample3D::_bind_methods() {
|
||||||
|
ClassDB::bind_method(D_METHOD("set_source", "value"), &VisualShaderNodeSample3D::set_source);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_source"), &VisualShaderNodeSample3D::get_source);
|
||||||
|
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "source", PROPERTY_HINT_ENUM, "Texture,SamplerPort"), "set_source", "get_source");
|
||||||
|
|
||||||
|
BIND_ENUM_CONSTANT(SOURCE_TEXTURE);
|
||||||
|
BIND_ENUM_CONSTANT(SOURCE_PORT);
|
||||||
|
}
|
||||||
|
|
||||||
|
String VisualShaderNodeSample3D::get_warning(Shader::Mode p_mode, VisualShader::Type p_type) const {
|
||||||
|
if (source == SOURCE_TEXTURE) {
|
||||||
|
return String(); // all good
|
||||||
|
}
|
||||||
|
if (source == SOURCE_PORT) {
|
||||||
|
return String(); // all good
|
||||||
|
}
|
||||||
|
return TTR("Invalid source for shader.");
|
||||||
|
}
|
||||||
|
|
||||||
|
VisualShaderNodeSample3D::VisualShaderNodeSample3D() {
|
||||||
|
source = SOURCE_TEXTURE;
|
||||||
|
simple_decl = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////// Texture2DArray
|
||||||
|
|
||||||
|
String VisualShaderNodeTexture2DArray::get_caption() const {
|
||||||
|
return "Texture2DArray";
|
||||||
|
}
|
||||||
|
|
||||||
|
String VisualShaderNodeTexture2DArray::get_input_port_name(int p_port) const {
|
||||||
|
if (p_port == 2) {
|
||||||
|
return "sampler2DArray";
|
||||||
|
}
|
||||||
|
return VisualShaderNodeSample3D::get_input_port_name(p_port);
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector<VisualShader::DefaultTextureParam> VisualShaderNodeTexture2DArray::get_default_texture_parameters(VisualShader::Type p_type, int p_id) const {
|
||||||
|
VisualShader::DefaultTextureParam dtp;
|
||||||
|
dtp.name = make_unique_id(p_type, p_id, "tex3d");
|
||||||
|
dtp.param = texture;
|
||||||
|
Vector<VisualShader::DefaultTextureParam> ret;
|
||||||
|
ret.push_back(dtp);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
String VisualShaderNodeTexture2DArray::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const {
|
||||||
|
if (source == SOURCE_TEXTURE) {
|
||||||
|
return "uniform sampler2DArray " + make_unique_id(p_type, p_id, "tex3d") + ";\n";
|
||||||
|
}
|
||||||
|
return String();
|
||||||
|
}
|
||||||
|
|
||||||
|
void VisualShaderNodeTexture2DArray::set_texture_array(Ref<Texture2DArray> p_value) {
|
||||||
|
texture = p_value;
|
||||||
|
emit_changed();
|
||||||
|
}
|
||||||
|
|
||||||
|
Ref<Texture2DArray> VisualShaderNodeTexture2DArray::get_texture_array() const {
|
||||||
|
return texture;
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector<StringName> VisualShaderNodeTexture2DArray::get_editable_properties() const {
|
||||||
|
Vector<StringName> props;
|
||||||
|
props.push_back("source");
|
||||||
|
if (source == SOURCE_TEXTURE) {
|
||||||
|
props.push_back("texture_array");
|
||||||
|
}
|
||||||
|
return props;
|
||||||
|
}
|
||||||
|
|
||||||
|
void VisualShaderNodeTexture2DArray::_bind_methods() {
|
||||||
|
ClassDB::bind_method(D_METHOD("set_texture_array", "value"), &VisualShaderNodeTexture2DArray::set_texture_array);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_texture_array"), &VisualShaderNodeTexture2DArray::get_texture_array);
|
||||||
|
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture_array", PROPERTY_HINT_RESOURCE_TYPE, "Texture2DArray"), "set_texture_array", "get_texture_array");
|
||||||
|
}
|
||||||
|
|
||||||
|
VisualShaderNodeTexture2DArray::VisualShaderNodeTexture2DArray() {
|
||||||
|
}
|
||||||
////////////// Cubemap
|
////////////// Cubemap
|
||||||
|
|
||||||
String VisualShaderNodeCubemap::get_caption() const {
|
String VisualShaderNodeCubemap::get_caption() const {
|
||||||
@ -3926,6 +4103,74 @@ String VisualShaderNodeTextureUniformTriplanar::get_input_port_default_hint(int
|
|||||||
VisualShaderNodeTextureUniformTriplanar::VisualShaderNodeTextureUniformTriplanar() {
|
VisualShaderNodeTextureUniformTriplanar::VisualShaderNodeTextureUniformTriplanar() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////// Texture2DArray Uniform
|
||||||
|
|
||||||
|
String VisualShaderNodeTexture2DArrayUniform::get_caption() const {
|
||||||
|
return "Texture2DArrayUniform";
|
||||||
|
}
|
||||||
|
|
||||||
|
int VisualShaderNodeTexture2DArrayUniform::get_output_port_count() const {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
VisualShaderNodeTexture2DArrayUniform::PortType VisualShaderNodeTexture2DArrayUniform::get_output_port_type(int p_port) const {
|
||||||
|
return PORT_TYPE_SAMPLER;
|
||||||
|
}
|
||||||
|
|
||||||
|
String VisualShaderNodeTexture2DArrayUniform::get_output_port_name(int p_port) const {
|
||||||
|
return "sampler2DArray";
|
||||||
|
}
|
||||||
|
|
||||||
|
int VisualShaderNodeTexture2DArrayUniform::get_input_port_count() const {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
VisualShaderNodeTexture2DArrayUniform::PortType VisualShaderNodeTexture2DArrayUniform::get_input_port_type(int p_port) const {
|
||||||
|
return PORT_TYPE_SCALAR;
|
||||||
|
}
|
||||||
|
|
||||||
|
String VisualShaderNodeTexture2DArrayUniform::get_input_port_name(int p_port) const {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
String VisualShaderNodeTexture2DArrayUniform::get_input_port_default_hint(int p_port) const {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
String VisualShaderNodeTexture2DArrayUniform::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const {
|
||||||
|
String code = _get_qual_str() + "uniform sampler2DArray " + get_uniform_name();
|
||||||
|
|
||||||
|
switch (texture_type) {
|
||||||
|
case TYPE_DATA:
|
||||||
|
if (color_default == COLOR_DEFAULT_BLACK)
|
||||||
|
code += " : hint_black;\n";
|
||||||
|
else
|
||||||
|
code += ";\n";
|
||||||
|
break;
|
||||||
|
case TYPE_COLOR:
|
||||||
|
if (color_default == COLOR_DEFAULT_BLACK)
|
||||||
|
code += " : hint_black_albedo;\n";
|
||||||
|
else
|
||||||
|
code += " : hint_albedo;\n";
|
||||||
|
break;
|
||||||
|
case TYPE_NORMALMAP:
|
||||||
|
code += " : hint_normal;\n";
|
||||||
|
break;
|
||||||
|
case TYPE_ANISO:
|
||||||
|
code += " : hint_aniso;\n";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
String VisualShaderNodeTexture2DArrayUniform::generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview) const {
|
||||||
|
return String();
|
||||||
|
}
|
||||||
|
|
||||||
|
VisualShaderNodeTexture2DArrayUniform::VisualShaderNodeTexture2DArrayUniform() {
|
||||||
|
}
|
||||||
|
|
||||||
////////////// Cubemap Uniform
|
////////////// Cubemap Uniform
|
||||||
|
|
||||||
String VisualShaderNodeCubemapUniform::get_caption() const {
|
String VisualShaderNodeCubemapUniform::get_caption() const {
|
||||||
|
@ -236,7 +236,7 @@ public:
|
|||||||
enum TextureType {
|
enum TextureType {
|
||||||
TYPE_DATA,
|
TYPE_DATA,
|
||||||
TYPE_COLOR,
|
TYPE_COLOR,
|
||||||
TYPE_NORMALMAP
|
TYPE_NORMALMAP,
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -284,6 +284,68 @@ VARIANT_ENUM_CAST(VisualShaderNodeTexture::Source)
|
|||||||
|
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
|
|
||||||
|
class VisualShaderNodeSample3D : public VisualShaderNode {
|
||||||
|
GDCLASS(VisualShaderNodeSample3D, VisualShaderNode);
|
||||||
|
|
||||||
|
public:
|
||||||
|
enum Source {
|
||||||
|
SOURCE_TEXTURE,
|
||||||
|
SOURCE_PORT,
|
||||||
|
};
|
||||||
|
|
||||||
|
protected:
|
||||||
|
Source source;
|
||||||
|
|
||||||
|
static void _bind_methods();
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual String get_caption() const = 0;
|
||||||
|
|
||||||
|
virtual int get_input_port_count() const;
|
||||||
|
virtual PortType get_input_port_type(int p_port) const;
|
||||||
|
virtual String get_input_port_name(int p_port) const;
|
||||||
|
virtual String get_input_port_default_hint(int p_port) const;
|
||||||
|
|
||||||
|
virtual int get_output_port_count() const;
|
||||||
|
virtual PortType get_output_port_type(int p_port) const;
|
||||||
|
virtual String get_output_port_name(int p_port) const;
|
||||||
|
|
||||||
|
virtual String generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const = 0;
|
||||||
|
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const; //if no output is connected, the output var passed will be empty. if no input is connected and input is NIL, the input var passed will be empty
|
||||||
|
|
||||||
|
void set_source(Source p_source);
|
||||||
|
Source get_source() const;
|
||||||
|
|
||||||
|
virtual String get_warning(Shader::Mode p_mode, VisualShader::Type p_type) const;
|
||||||
|
|
||||||
|
VisualShaderNodeSample3D();
|
||||||
|
};
|
||||||
|
|
||||||
|
VARIANT_ENUM_CAST(VisualShaderNodeSample3D::Source)
|
||||||
|
|
||||||
|
class VisualShaderNodeTexture2DArray : public VisualShaderNodeSample3D {
|
||||||
|
GDCLASS(VisualShaderNodeTexture2DArray, VisualShaderNodeSample3D);
|
||||||
|
Ref<Texture2DArray> texture;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods();
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual String get_caption() const;
|
||||||
|
|
||||||
|
virtual String get_input_port_name(int p_port) const;
|
||||||
|
|
||||||
|
virtual Vector<VisualShader::DefaultTextureParam> get_default_texture_parameters(VisualShader::Type p_type, int p_id) const;
|
||||||
|
virtual String generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const;
|
||||||
|
|
||||||
|
void set_texture_array(Ref<Texture2DArray> p_value);
|
||||||
|
Ref<Texture2DArray> get_texture_array() const;
|
||||||
|
|
||||||
|
virtual Vector<StringName> get_editable_properties() const;
|
||||||
|
|
||||||
|
VisualShaderNodeTexture2DArray();
|
||||||
|
};
|
||||||
|
|
||||||
class VisualShaderNodeCubemap : public VisualShaderNode {
|
class VisualShaderNodeCubemap : public VisualShaderNode {
|
||||||
GDCLASS(VisualShaderNodeCubemap, VisualShaderNode);
|
GDCLASS(VisualShaderNodeCubemap, VisualShaderNode);
|
||||||
Ref<Cubemap> cube_map;
|
Ref<Cubemap> cube_map;
|
||||||
@ -1695,6 +1757,29 @@ public:
|
|||||||
|
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
|
|
||||||
|
class VisualShaderNodeTexture2DArrayUniform : public VisualShaderNodeTextureUniform {
|
||||||
|
GDCLASS(VisualShaderNodeTexture2DArrayUniform, VisualShaderNodeTextureUniform);
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual String get_caption() const;
|
||||||
|
|
||||||
|
virtual int get_input_port_count() const;
|
||||||
|
virtual PortType get_input_port_type(int p_port) const;
|
||||||
|
virtual String get_input_port_name(int p_port) const;
|
||||||
|
|
||||||
|
virtual int get_output_port_count() const;
|
||||||
|
virtual PortType get_output_port_type(int p_port) const;
|
||||||
|
virtual String get_output_port_name(int p_port) const;
|
||||||
|
|
||||||
|
virtual String get_input_port_default_hint(int p_port) const;
|
||||||
|
virtual String generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const;
|
||||||
|
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const; //if no output is connected, the output var passed will be empty. if no input is connected and input is NIL, the input var passed will be empty
|
||||||
|
|
||||||
|
VisualShaderNodeTexture2DArrayUniform();
|
||||||
|
};
|
||||||
|
|
||||||
|
///////////////////////////////////////
|
||||||
|
|
||||||
class VisualShaderNodeCubemapUniform : public VisualShaderNodeTextureUniform {
|
class VisualShaderNodeCubemapUniform : public VisualShaderNodeTextureUniform {
|
||||||
GDCLASS(VisualShaderNodeCubemapUniform, VisualShaderNodeTextureUniform);
|
GDCLASS(VisualShaderNodeCubemapUniform, VisualShaderNodeTextureUniform);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user