Implement placeholder assets
* Placeholder textures * Placeholder meshes * Placeholder material This PR is the first step towards implementing https://github.com/godotengine/godot-proposals/issues/2756 It adds an asset type that uses no resources, which can be used to replace the existing ones on export for using on the upcoming server export.
This commit is contained in:
parent
d01e4124eb
commit
b02c7387c7
9
doc/classes/PlaceholderCubemap.xml
Normal file
9
doc/classes/PlaceholderCubemap.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="PlaceholderCubemap" inherits="PlaceholderTextureLayered" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
</class>
|
9
doc/classes/PlaceholderCubemapArray.xml
Normal file
9
doc/classes/PlaceholderCubemapArray.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="PlaceholderCubemapArray" inherits="PlaceholderTextureLayered" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
</class>
|
9
doc/classes/PlaceholderMaterial.xml
Normal file
9
doc/classes/PlaceholderMaterial.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="PlaceholderMaterial" inherits="Material" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
</class>
|
13
doc/classes/PlaceholderMesh.xml
Normal file
13
doc/classes/PlaceholderMesh.xml
Normal file
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="PlaceholderMesh" inherits="Mesh" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<members>
|
||||
<member name="aabb" type="AABB" setter="set_aabb" getter="get_aabb" default="AABB(0, 0, 0, 0, 0, 0)">
|
||||
</member>
|
||||
</members>
|
||||
</class>
|
13
doc/classes/PlaceholderTexture2D.xml
Normal file
13
doc/classes/PlaceholderTexture2D.xml
Normal file
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="PlaceholderTexture2D" inherits="Texture2D" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<members>
|
||||
<member name="size" type="Vector2" setter="set_size" getter="get_size" default="Vector2(1, 1)">
|
||||
</member>
|
||||
</members>
|
||||
</class>
|
9
doc/classes/PlaceholderTexture2DArray.xml
Normal file
9
doc/classes/PlaceholderTexture2DArray.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="PlaceholderTexture2DArray" inherits="PlaceholderTextureLayered" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
</class>
|
13
doc/classes/PlaceholderTexture3D.xml
Normal file
13
doc/classes/PlaceholderTexture3D.xml
Normal file
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="PlaceholderTexture3D" inherits="Texture3D" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<members>
|
||||
<member name="size" type="Vector3i" setter="set_size" getter="get_size" default="Vector3i(1, 1, 1)">
|
||||
</member>
|
||||
</members>
|
||||
</class>
|
15
doc/classes/PlaceholderTextureLayered.xml
Normal file
15
doc/classes/PlaceholderTextureLayered.xml
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="PlaceholderTextureLayered" inherits="TextureLayered" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<members>
|
||||
<member name="layers" type="int" setter="set_layers" getter="get_layers" default="1">
|
||||
</member>
|
||||
<member name="size" type="Vector2i" setter="set_size" getter="get_size" default="Vector2i(1, 1)">
|
||||
</member>
|
||||
</members>
|
||||
</class>
|
@ -752,6 +752,7 @@ void register_scene_types() {
|
||||
|
||||
GDREGISTER_VIRTUAL_CLASS(Mesh);
|
||||
GDREGISTER_CLASS(ArrayMesh);
|
||||
GDREGISTER_CLASS(PlaceholderMesh);
|
||||
GDREGISTER_CLASS(ImmediateMesh);
|
||||
GDREGISTER_CLASS(MultiMesh);
|
||||
GDREGISTER_CLASS(SurfaceTool);
|
||||
@ -773,6 +774,7 @@ void register_scene_types() {
|
||||
GDREGISTER_ABSTRACT_CLASS(BaseMaterial3D);
|
||||
GDREGISTER_CLASS(StandardMaterial3D);
|
||||
GDREGISTER_CLASS(ORMMaterial3D);
|
||||
GDREGISTER_CLASS(PlaceholderMaterial);
|
||||
SceneTree::add_idle_callback(BaseMaterial3D::flush_changes);
|
||||
BaseMaterial3D::init_shaders();
|
||||
|
||||
@ -837,6 +839,12 @@ void register_scene_types() {
|
||||
GDREGISTER_CLASS(CompressedCubemap);
|
||||
GDREGISTER_CLASS(CompressedCubemapArray);
|
||||
GDREGISTER_CLASS(CompressedTexture2DArray);
|
||||
GDREGISTER_CLASS(PlaceholderTexture2D);
|
||||
GDREGISTER_CLASS(PlaceholderTexture3D);
|
||||
GDREGISTER_ABSTRACT_CLASS(PlaceholderTextureLayered);
|
||||
GDREGISTER_CLASS(PlaceholderTexture2DArray);
|
||||
GDREGISTER_CLASS(PlaceholderCubemap);
|
||||
GDREGISTER_CLASS(PlaceholderCubemapArray);
|
||||
|
||||
GDREGISTER_CLASS(Animation);
|
||||
GDREGISTER_CLASS(AnimationLibrary);
|
||||
|
@ -3010,4 +3010,7 @@ bool StandardMaterial3D::_set(const StringName &p_name, const Variant &p_value)
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif // DISABLE_DEPRECATED
|
||||
|
||||
///////////////////////
|
||||
|
@ -797,6 +797,13 @@ public:
|
||||
BaseMaterial3D(true) {}
|
||||
};
|
||||
|
||||
class PlaceholderMaterial : public Material {
|
||||
GDCLASS(PlaceholderMaterial, Material)
|
||||
public:
|
||||
virtual RID get_shader_rid() const override { return RID(); }
|
||||
virtual Shader::Mode get_shader_mode() const override { return Shader::MODE_CANVAS_ITEM; }
|
||||
};
|
||||
|
||||
//////////////////////
|
||||
|
||||
#endif
|
||||
|
@ -2092,3 +2092,17 @@ ArrayMesh::~ArrayMesh() {
|
||||
RenderingServer::get_singleton()->free(mesh);
|
||||
}
|
||||
}
|
||||
///////////////
|
||||
|
||||
void PlaceholderMesh::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_aabb", "aabb"), &PlaceholderMesh::set_aabb);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::AABB, "aabb", PROPERTY_HINT_NONE, ""), "set_aabb", "get_aabb");
|
||||
}
|
||||
|
||||
PlaceholderMesh::PlaceholderMesh() {
|
||||
rid = RS::get_singleton()->mesh_create();
|
||||
}
|
||||
|
||||
PlaceholderMesh::~PlaceholderMesh() {
|
||||
RS::get_singleton()->free(rid);
|
||||
}
|
||||
|
@ -328,4 +328,38 @@ VARIANT_ENUM_CAST(Mesh::ArrayCustomFormat);
|
||||
VARIANT_ENUM_CAST(Mesh::PrimitiveType);
|
||||
VARIANT_ENUM_CAST(Mesh::BlendShapeMode);
|
||||
|
||||
class PlaceholderMesh : public Mesh {
|
||||
GDCLASS(PlaceholderMesh, Mesh);
|
||||
|
||||
RID rid;
|
||||
AABB aabb;
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
||||
public:
|
||||
virtual int get_surface_count() const override { return 0; }
|
||||
virtual int surface_get_array_len(int p_idx) const override { return 0; }
|
||||
virtual int surface_get_array_index_len(int p_idx) const override { return 0; }
|
||||
virtual Array surface_get_arrays(int p_surface) const override { return Array(); }
|
||||
virtual Array surface_get_blend_shape_arrays(int p_surface) const override { return Array(); }
|
||||
virtual Dictionary surface_get_lods(int p_surface) const override { return Dictionary(); }
|
||||
virtual uint32_t surface_get_format(int p_idx) const override { return 0; }
|
||||
virtual PrimitiveType surface_get_primitive_type(int p_idx) const override { return PRIMITIVE_TRIANGLES; }
|
||||
virtual void surface_set_material(int p_idx, const Ref<Material> &p_material) override {}
|
||||
virtual Ref<Material> surface_get_material(int p_idx) const override { return Ref<Material>(); }
|
||||
virtual int get_blend_shape_count() const override { return 0; }
|
||||
virtual StringName get_blend_shape_name(int p_index) const override { return StringName(); }
|
||||
virtual void set_blend_shape_name(int p_index, const StringName &p_name) override {}
|
||||
virtual RID get_rid() const override { return rid; }
|
||||
virtual AABB get_aabb() const override { return aabb; }
|
||||
void set_aabb(const AABB &p_aabb) { aabb = p_aabb; }
|
||||
|
||||
virtual int get_builtin_bind_pose_count() const override { return 0; }
|
||||
virtual Transform3D get_builtin_bind_pose(int p_index) const override { return Transform3D(); }
|
||||
|
||||
PlaceholderMesh();
|
||||
~PlaceholderMesh();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -3395,3 +3395,148 @@ CameraTexture::~CameraTexture() {
|
||||
RenderingServer::get_singleton()->free(_texture);
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////
|
||||
|
||||
void PlaceholderTexture2D::set_size(Size2 p_size) {
|
||||
size = p_size;
|
||||
}
|
||||
|
||||
int PlaceholderTexture2D::get_width() const {
|
||||
return size.width;
|
||||
}
|
||||
|
||||
int PlaceholderTexture2D::get_height() const {
|
||||
return size.height;
|
||||
}
|
||||
|
||||
bool PlaceholderTexture2D::has_alpha() const {
|
||||
return false;
|
||||
}
|
||||
|
||||
Ref<Image> PlaceholderTexture2D::get_image() const {
|
||||
return Ref<Image>();
|
||||
}
|
||||
|
||||
RID PlaceholderTexture2D::get_rid() const {
|
||||
return rid;
|
||||
}
|
||||
|
||||
void PlaceholderTexture2D::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_size", "size"), &PlaceholderTexture2D::set_size);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "size"), "set_size", "get_size");
|
||||
}
|
||||
|
||||
PlaceholderTexture2D::PlaceholderTexture2D() {
|
||||
rid = RS::get_singleton()->texture_2d_placeholder_create();
|
||||
}
|
||||
|
||||
PlaceholderTexture2D::~PlaceholderTexture2D() {
|
||||
RS::get_singleton()->free(rid);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////
|
||||
|
||||
void PlaceholderTexture3D::set_size(const Vector3i &p_size) {
|
||||
size = p_size;
|
||||
}
|
||||
|
||||
Vector3i PlaceholderTexture3D::get_size() const {
|
||||
return size;
|
||||
}
|
||||
|
||||
Image::Format PlaceholderTexture3D::get_format() const {
|
||||
return Image::FORMAT_RGB8;
|
||||
}
|
||||
|
||||
int PlaceholderTexture3D::get_width() const {
|
||||
return size.x;
|
||||
}
|
||||
|
||||
int PlaceholderTexture3D::get_height() const {
|
||||
return size.y;
|
||||
}
|
||||
|
||||
int PlaceholderTexture3D::get_depth() const {
|
||||
return size.z;
|
||||
}
|
||||
|
||||
bool PlaceholderTexture3D::has_mipmaps() const {
|
||||
return false;
|
||||
}
|
||||
|
||||
Vector<Ref<Image>> PlaceholderTexture3D::get_data() const {
|
||||
return Vector<Ref<Image>>();
|
||||
}
|
||||
|
||||
void PlaceholderTexture3D::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_size", "size"), &PlaceholderTexture3D::set_size);
|
||||
ClassDB::bind_method(D_METHOD("get_size"), &PlaceholderTexture3D::get_size);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3I, "size"), "set_size", "get_size");
|
||||
}
|
||||
|
||||
PlaceholderTexture3D::PlaceholderTexture3D() {
|
||||
rid = RS::get_singleton()->texture_3d_placeholder_create();
|
||||
}
|
||||
PlaceholderTexture3D::~PlaceholderTexture3D() {
|
||||
RS::get_singleton()->free(rid);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
void PlaceholderTextureLayered::set_size(const Size2i &p_size) {
|
||||
size = p_size;
|
||||
}
|
||||
|
||||
Size2i PlaceholderTextureLayered::get_size() const {
|
||||
return size;
|
||||
}
|
||||
|
||||
void PlaceholderTextureLayered::set_layers(int p_layers) {
|
||||
layers = p_layers;
|
||||
}
|
||||
|
||||
Image::Format PlaceholderTextureLayered::get_format() const {
|
||||
return Image::FORMAT_RGB8;
|
||||
}
|
||||
|
||||
TextureLayered::LayeredType PlaceholderTextureLayered::get_layered_type() const {
|
||||
return layered_type;
|
||||
}
|
||||
|
||||
int PlaceholderTextureLayered::get_width() const {
|
||||
return size.x;
|
||||
}
|
||||
|
||||
int PlaceholderTextureLayered::get_height() const {
|
||||
return size.y;
|
||||
}
|
||||
|
||||
int PlaceholderTextureLayered::get_layers() const {
|
||||
return layers;
|
||||
}
|
||||
|
||||
bool PlaceholderTextureLayered::has_mipmaps() const {
|
||||
return false;
|
||||
}
|
||||
|
||||
Ref<Image> PlaceholderTextureLayered::get_layer_data(int p_layer) const {
|
||||
return Ref<Image>();
|
||||
}
|
||||
|
||||
void PlaceholderTextureLayered::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_size", "size"), &PlaceholderTextureLayered::set_size);
|
||||
ClassDB::bind_method(D_METHOD("get_size"), &PlaceholderTextureLayered::get_size);
|
||||
ClassDB::bind_method(D_METHOD("set_layers", "layers"), &PlaceholderTextureLayered::set_layers);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "size"), "set_size", "get_size");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "layers", PROPERTY_HINT_RANGE, "1,4096"), "set_layers", "get_layers");
|
||||
}
|
||||
|
||||
PlaceholderTextureLayered::PlaceholderTextureLayered(LayeredType p_type) {
|
||||
layered_type = p_type;
|
||||
rid = RS::get_singleton()->texture_2d_layered_placeholder_create(RS::TextureLayeredType(layered_type));
|
||||
}
|
||||
PlaceholderTextureLayered::~PlaceholderTextureLayered() {
|
||||
RS::get_singleton()->free(rid);
|
||||
}
|
||||
|
@ -1011,4 +1011,98 @@ public:
|
||||
~CameraTexture();
|
||||
};
|
||||
|
||||
class PlaceholderTexture2D : public Texture2D {
|
||||
GDCLASS(PlaceholderTexture2D, Texture2D)
|
||||
|
||||
RID rid;
|
||||
Size2 size = Size2(1, 1);
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
||||
public:
|
||||
void set_size(Size2 p_size);
|
||||
|
||||
virtual int get_width() const override;
|
||||
virtual int get_height() const override;
|
||||
virtual RID get_rid() const override;
|
||||
virtual bool has_alpha() const override;
|
||||
|
||||
virtual Ref<Image> get_image() const override;
|
||||
|
||||
PlaceholderTexture2D();
|
||||
~PlaceholderTexture2D();
|
||||
};
|
||||
|
||||
class PlaceholderTexture3D : public Texture3D {
|
||||
GDCLASS(PlaceholderTexture3D, Texture3D)
|
||||
|
||||
RID rid;
|
||||
Vector3i size = Vector3i(1, 1, 1);
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
||||
public:
|
||||
void set_size(const Vector3i &p_size);
|
||||
Vector3i get_size() const;
|
||||
virtual Image::Format get_format() const override;
|
||||
virtual int get_width() const override;
|
||||
virtual int get_height() const override;
|
||||
virtual int get_depth() const override;
|
||||
virtual bool has_mipmaps() const override;
|
||||
virtual Vector<Ref<Image>> get_data() const override;
|
||||
|
||||
PlaceholderTexture3D();
|
||||
~PlaceholderTexture3D();
|
||||
};
|
||||
|
||||
class PlaceholderTextureLayered : public TextureLayered {
|
||||
GDCLASS(PlaceholderTextureLayered, TextureLayered)
|
||||
|
||||
RID rid;
|
||||
Size2i size = Size2i(1, 1);
|
||||
int layers = 1;
|
||||
LayeredType layered_type = LAYERED_TYPE_2D_ARRAY;
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
||||
public:
|
||||
void set_size(const Size2i &p_size);
|
||||
Size2i get_size() const;
|
||||
void set_layers(int p_layers);
|
||||
virtual Image::Format get_format() const override;
|
||||
virtual LayeredType get_layered_type() const override;
|
||||
virtual int get_width() const override;
|
||||
virtual int get_height() const override;
|
||||
virtual int get_layers() const override;
|
||||
virtual bool has_mipmaps() const override;
|
||||
virtual Ref<Image> get_layer_data(int p_layer) const override;
|
||||
|
||||
PlaceholderTextureLayered(LayeredType p_type);
|
||||
~PlaceholderTextureLayered();
|
||||
};
|
||||
|
||||
class PlaceholderTexture2DArray : public PlaceholderTextureLayered {
|
||||
GDCLASS(PlaceholderTexture2DArray, PlaceholderTextureLayered)
|
||||
public:
|
||||
PlaceholderTexture2DArray() :
|
||||
PlaceholderTextureLayered(LAYERED_TYPE_2D_ARRAY) {}
|
||||
};
|
||||
|
||||
class PlaceholderCubemap : public PlaceholderTextureLayered {
|
||||
GDCLASS(PlaceholderCubemap, PlaceholderTextureLayered)
|
||||
public:
|
||||
PlaceholderCubemap() :
|
||||
PlaceholderTextureLayered(LAYERED_TYPE_CUBEMAP) {}
|
||||
};
|
||||
|
||||
class PlaceholderCubemapArray : public PlaceholderTextureLayered {
|
||||
GDCLASS(PlaceholderCubemapArray, PlaceholderTextureLayered)
|
||||
public:
|
||||
PlaceholderCubemapArray() :
|
||||
PlaceholderTextureLayered(LAYERED_TYPE_CUBEMAP_ARRAY) {}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user