Merge pull request #79874 from clayjohn/PlaceholderTexture-rid
Lazily allocate RIDs for PlaceholderTextures to avoid allocating GPU resources unless used
This commit is contained in:
commit
8965e24dde
|
@ -51,6 +51,9 @@ Ref<Image> PlaceholderTexture2D::get_image() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
RID PlaceholderTexture2D::get_rid() const {
|
RID PlaceholderTexture2D::get_rid() const {
|
||||||
|
if (rid.is_null()) {
|
||||||
|
rid = RenderingServer::get_singleton()->texture_2d_placeholder_create();
|
||||||
|
}
|
||||||
return rid;
|
return rid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,13 +64,14 @@ void PlaceholderTexture2D::_bind_methods() {
|
||||||
}
|
}
|
||||||
|
|
||||||
PlaceholderTexture2D::PlaceholderTexture2D() {
|
PlaceholderTexture2D::PlaceholderTexture2D() {
|
||||||
rid = RS::get_singleton()->texture_2d_placeholder_create();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PlaceholderTexture2D::~PlaceholderTexture2D() {
|
PlaceholderTexture2D::~PlaceholderTexture2D() {
|
||||||
ERR_FAIL_NULL(RenderingServer::get_singleton());
|
ERR_FAIL_NULL(RenderingServer::get_singleton());
|
||||||
|
if (rid.is_valid()) {
|
||||||
RS::get_singleton()->free(rid);
|
RS::get_singleton()->free(rid);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////
|
///////////////////////////////////////////////
|
||||||
|
|
||||||
|
@ -103,6 +107,13 @@ Vector<Ref<Image>> PlaceholderTexture3D::get_data() const {
|
||||||
return Vector<Ref<Image>>();
|
return Vector<Ref<Image>>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RID PlaceholderTexture3D::get_rid() const {
|
||||||
|
if (rid.is_null()) {
|
||||||
|
rid = RenderingServer::get_singleton()->texture_3d_placeholder_create();
|
||||||
|
}
|
||||||
|
return rid;
|
||||||
|
}
|
||||||
|
|
||||||
void PlaceholderTexture3D::_bind_methods() {
|
void PlaceholderTexture3D::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("set_size", "size"), &PlaceholderTexture3D::set_size);
|
ClassDB::bind_method(D_METHOD("set_size", "size"), &PlaceholderTexture3D::set_size);
|
||||||
ClassDB::bind_method(D_METHOD("get_size"), &PlaceholderTexture3D::get_size);
|
ClassDB::bind_method(D_METHOD("get_size"), &PlaceholderTexture3D::get_size);
|
||||||
|
@ -110,12 +121,13 @@ void PlaceholderTexture3D::_bind_methods() {
|
||||||
}
|
}
|
||||||
|
|
||||||
PlaceholderTexture3D::PlaceholderTexture3D() {
|
PlaceholderTexture3D::PlaceholderTexture3D() {
|
||||||
rid = RS::get_singleton()->texture_3d_placeholder_create();
|
|
||||||
}
|
}
|
||||||
PlaceholderTexture3D::~PlaceholderTexture3D() {
|
PlaceholderTexture3D::~PlaceholderTexture3D() {
|
||||||
ERR_FAIL_NULL(RenderingServer::get_singleton());
|
ERR_FAIL_NULL(RenderingServer::get_singleton());
|
||||||
|
if (rid.is_valid()) {
|
||||||
RS::get_singleton()->free(rid);
|
RS::get_singleton()->free(rid);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////////
|
/////////////////////////////////////////////////
|
||||||
|
|
||||||
|
@ -159,6 +171,13 @@ Ref<Image> PlaceholderTextureLayered::get_layer_data(int p_layer) const {
|
||||||
return Ref<Image>();
|
return Ref<Image>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RID PlaceholderTextureLayered::get_rid() const {
|
||||||
|
if (rid.is_null()) {
|
||||||
|
rid = RS::get_singleton()->texture_2d_layered_placeholder_create(RS::TextureLayeredType(layered_type));
|
||||||
|
}
|
||||||
|
return rid;
|
||||||
|
}
|
||||||
|
|
||||||
void PlaceholderTextureLayered::_bind_methods() {
|
void PlaceholderTextureLayered::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("set_size", "size"), &PlaceholderTextureLayered::set_size);
|
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("get_size"), &PlaceholderTextureLayered::get_size);
|
||||||
|
@ -169,9 +188,10 @@ void PlaceholderTextureLayered::_bind_methods() {
|
||||||
|
|
||||||
PlaceholderTextureLayered::PlaceholderTextureLayered(LayeredType p_type) {
|
PlaceholderTextureLayered::PlaceholderTextureLayered(LayeredType p_type) {
|
||||||
layered_type = p_type;
|
layered_type = p_type;
|
||||||
rid = RS::get_singleton()->texture_2d_layered_placeholder_create(RS::TextureLayeredType(layered_type));
|
|
||||||
}
|
}
|
||||||
PlaceholderTextureLayered::~PlaceholderTextureLayered() {
|
PlaceholderTextureLayered::~PlaceholderTextureLayered() {
|
||||||
ERR_FAIL_NULL(RenderingServer::get_singleton());
|
ERR_FAIL_NULL(RenderingServer::get_singleton());
|
||||||
|
if (rid.is_valid()) {
|
||||||
RS::get_singleton()->free(rid);
|
RS::get_singleton()->free(rid);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
class PlaceholderTexture2D : public Texture2D {
|
class PlaceholderTexture2D : public Texture2D {
|
||||||
GDCLASS(PlaceholderTexture2D, Texture2D)
|
GDCLASS(PlaceholderTexture2D, Texture2D)
|
||||||
|
|
||||||
RID rid;
|
mutable RID rid;
|
||||||
Size2 size = Size2(1, 1);
|
Size2 size = Size2(1, 1);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -59,7 +59,7 @@ public:
|
||||||
class PlaceholderTexture3D : public Texture3D {
|
class PlaceholderTexture3D : public Texture3D {
|
||||||
GDCLASS(PlaceholderTexture3D, Texture3D)
|
GDCLASS(PlaceholderTexture3D, Texture3D)
|
||||||
|
|
||||||
RID rid;
|
mutable RID rid;
|
||||||
Vector3i size = Vector3i(1, 1, 1);
|
Vector3i size = Vector3i(1, 1, 1);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -74,6 +74,7 @@ public:
|
||||||
virtual int get_depth() const override;
|
virtual int get_depth() const override;
|
||||||
virtual bool has_mipmaps() const override;
|
virtual bool has_mipmaps() const override;
|
||||||
virtual Vector<Ref<Image>> get_data() const override;
|
virtual Vector<Ref<Image>> get_data() const override;
|
||||||
|
virtual RID get_rid() const override;
|
||||||
|
|
||||||
PlaceholderTexture3D();
|
PlaceholderTexture3D();
|
||||||
~PlaceholderTexture3D();
|
~PlaceholderTexture3D();
|
||||||
|
@ -82,7 +83,7 @@ public:
|
||||||
class PlaceholderTextureLayered : public TextureLayered {
|
class PlaceholderTextureLayered : public TextureLayered {
|
||||||
GDCLASS(PlaceholderTextureLayered, TextureLayered)
|
GDCLASS(PlaceholderTextureLayered, TextureLayered)
|
||||||
|
|
||||||
RID rid;
|
mutable RID rid;
|
||||||
Size2i size = Size2i(1, 1);
|
Size2i size = Size2i(1, 1);
|
||||||
int layers = 1;
|
int layers = 1;
|
||||||
LayeredType layered_type = LAYERED_TYPE_2D_ARRAY;
|
LayeredType layered_type = LAYERED_TYPE_2D_ARRAY;
|
||||||
|
@ -101,6 +102,7 @@ public:
|
||||||
virtual int get_layers() const override;
|
virtual int get_layers() const override;
|
||||||
virtual bool has_mipmaps() const override;
|
virtual bool has_mipmaps() const override;
|
||||||
virtual Ref<Image> get_layer_data(int p_layer) const override;
|
virtual Ref<Image> get_layer_data(int p_layer) const override;
|
||||||
|
virtual RID get_rid() const override;
|
||||||
|
|
||||||
PlaceholderTextureLayered(LayeredType p_type);
|
PlaceholderTextureLayered(LayeredType p_type);
|
||||||
~PlaceholderTextureLayered();
|
~PlaceholderTextureLayered();
|
||||||
|
|
Loading…
Reference in New Issue