summaryrefslogtreecommitdiffstats
path: root/scene/resources/texture.h
diff options
context:
space:
mode:
authorHendrik Brucker <hendrik.brucker@mail.de>2021-10-12 16:22:30 +0200
committerHendrik Brucker <hendrik.brucker@mail.de>2021-10-12 16:22:30 +0200
commitcd37af4e4c6adfc787f5a2f10a56f322329f3dbd (patch)
treef271d204a99ec49cb99b4391659c031f6fc17b17 /scene/resources/texture.h
parentdf376750ce7c861194c203225fd63462b7f29025 (diff)
downloadredot-engine-cd37af4e4c6adfc787f5a2f10a56f322329f3dbd.tar.gz
Add GradientTexture2D
Co-authored-by: Mariano Javier Suligoy <marianognu.easyrpg@gmail.com> Co-authored-by: Andrii Doroshenko <xrayez@gmail.com>
Diffstat (limited to 'scene/resources/texture.h')
-rw-r--r--scene/resources/texture.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/scene/resources/texture.h b/scene/resources/texture.h
index 862b9a47a6..51567124c6 100644
--- a/scene/resources/texture.h
+++ b/scene/resources/texture.h
@@ -714,6 +714,77 @@ public:
virtual ~GradientTexture();
};
+class GradientTexture2D : public Texture2D {
+ GDCLASS(GradientTexture2D, Texture2D);
+
+public:
+ enum Fill {
+ FILL_LINEAR,
+ FILL_RADIAL,
+ };
+ enum Repeat {
+ REPEAT_NONE,
+ REPEAT,
+ REPEAT_MIRROR,
+ };
+
+private:
+ Ref<Gradient> gradient;
+ mutable RID texture;
+
+ int width = 64;
+ int height = 64;
+
+ bool use_hdr = false;
+
+ Vector2 fill_from;
+ Vector2 fill_to = Vector2(1, 0);
+
+ Fill fill = FILL_LINEAR;
+ Repeat repeat = REPEAT_NONE;
+
+ float _get_gradient_offset_at(int x, int y) const;
+
+ bool update_pending = false;
+ void _queue_update();
+ void _update();
+
+protected:
+ static void _bind_methods();
+
+public:
+ void set_gradient(Ref<Gradient> p_gradient);
+ Ref<Gradient> get_gradient() const;
+
+ void set_width(int p_width);
+ virtual int get_width() const override;
+ void set_height(int p_height);
+ virtual int get_height() const override;
+
+ void set_use_hdr(bool p_enabled);
+ bool is_using_hdr() const;
+
+ void set_fill(Fill p_fill);
+ Fill get_fill() const;
+ void set_fill_from(Vector2 p_fill_from);
+ Vector2 get_fill_from() const;
+ void set_fill_to(Vector2 p_fill_to);
+ Vector2 get_fill_to() const;
+
+ void set_repeat(Repeat p_repeat);
+ Repeat get_repeat() const;
+
+ virtual RID get_rid() const override;
+ virtual bool has_alpha() const override { return true; }
+ virtual Ref<Image> get_image() const override;
+
+ GradientTexture2D();
+ virtual ~GradientTexture2D();
+};
+
+VARIANT_ENUM_CAST(GradientTexture2D::Fill);
+VARIANT_ENUM_CAST(GradientTexture2D::Repeat);
+
class ProxyTexture : public Texture2D {
GDCLASS(ProxyTexture, Texture2D);