diff options
Diffstat (limited to 'servers/rendering/renderer_rd/storage_rd/texture_storage.h')
-rw-r--r-- | servers/rendering/renderer_rd/storage_rd/texture_storage.h | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/servers/rendering/renderer_rd/storage_rd/texture_storage.h b/servers/rendering/renderer_rd/storage_rd/texture_storage.h index 9de4ff7b6b..8aecc78f07 100644 --- a/servers/rendering/renderer_rd/storage_rd/texture_storage.h +++ b/servers/rendering/renderer_rd/storage_rd/texture_storage.h @@ -76,6 +76,21 @@ public: TYPE_3D }; + struct CanvasTextureInfo { + RID diffuse; + RID normal; + RID specular; + RID sampler; + Size2i size; + Color specular_color; + + bool use_normal = false; + bool use_specular = false; + + _FORCE_INLINE_ bool is_valid() const { return diffuse.is_valid(); } + _FORCE_INLINE_ bool is_null() const { return diffuse.is_null(); } + }; + private: friend class LightStorage; friend class MaterialStorage; @@ -86,6 +101,12 @@ private: /* Canvas Texture API */ + struct CanvasTextureCache { + RID diffuse = RID(); + RID normal = RID(); + RID specular = RID(); + }; + class CanvasTexture { public: RID diffuse; @@ -96,14 +117,14 @@ private: RS::CanvasItemTextureFilter texture_filter = RS::CANVAS_ITEM_TEXTURE_FILTER_DEFAULT; RS::CanvasItemTextureRepeat texture_repeat = RS::CANVAS_ITEM_TEXTURE_REPEAT_DEFAULT; - RID uniform_sets[RS::CANVAS_ITEM_TEXTURE_FILTER_MAX][RS::CANVAS_ITEM_TEXTURE_REPEAT_MAX][2]; + CanvasTextureCache info_cache[2]; Size2i size_cache = Size2i(1, 1); bool use_normal_cache = false; bool use_specular_cache = false; bool cleared_cache = true; - void clear_sets(); + void clear_cache(); ~CanvasTexture(); }; @@ -477,7 +498,7 @@ public: virtual void canvas_texture_set_texture_filter(RID p_item, RS::CanvasItemTextureFilter p_filter) override; virtual void canvas_texture_set_texture_repeat(RID p_item, RS::CanvasItemTextureRepeat p_repeat) override; - bool canvas_texture_get_uniform_set(RID p_texture, RS::CanvasItemTextureFilter p_base_filter, RS::CanvasItemTextureRepeat p_base_repeat, RID p_base_shader, int p_base_set, bool p_use_srgb, RID &r_uniform_set, Size2i &r_size, Color &r_specular_shininess, bool &r_use_normal, bool &r_use_specular, bool p_texture_is_data); + CanvasTextureInfo canvas_texture_get_info(RID p_texture, RS::CanvasItemTextureFilter p_base_filter, RS::CanvasItemTextureRepeat p_base_repeat, bool p_use_srgb, bool p_texture_is_data); /* Texture API */ |