summaryrefslogtreecommitdiffstats
path: root/servers/rendering/renderer_rd/storage_rd/material_storage.h
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2023-09-22 22:04:22 +0200
committerRémi Verschelde <rverschelde@gmail.com>2023-09-22 22:04:22 +0200
commit525c72ec6d759cf83d06f6e9a14a49463b39e9ac (patch)
tree6f0d251e43835793cd0c0b10b9cb146bf3fe4f67 /servers/rendering/renderer_rd/storage_rd/material_storage.h
parentbafcd32f15e3ad65049cd61003855cfd01a7ef65 (diff)
parent9b91750fb1cecea72fbd8ee155d3ad22754917c1 (diff)
downloadredot-engine-525c72ec6d759cf83d06f6e9a14a49463b39e9ac.tar.gz
Merge pull request #81350 from DarioSamo/mipmap-bias
Fix mipmap bias behavior by refactoring how samplers are created by Material Storage.
Diffstat (limited to 'servers/rendering/renderer_rd/storage_rd/material_storage.h')
-rw-r--r--servers/rendering/renderer_rd/storage_rd/material_storage.h34
1 files changed, 23 insertions, 11 deletions
diff --git a/servers/rendering/renderer_rd/storage_rd/material_storage.h b/servers/rendering/renderer_rd/storage_rd/material_storage.h
index ae97f43a3c..403fd286b4 100644
--- a/servers/rendering/renderer_rd/storage_rd/material_storage.h
+++ b/servers/rendering/renderer_rd/storage_rd/material_storage.h
@@ -105,13 +105,27 @@ public:
Vector<RID> texture_cache;
};
+ struct Samplers {
+ RID rids[RS::CANVAS_ITEM_TEXTURE_FILTER_MAX][RS::CANVAS_ITEM_TEXTURE_REPEAT_MAX];
+ float mipmap_bias = 0.0f;
+ bool use_nearest_mipmap_filter = false;
+ int anisotropic_filtering_level = 2;
+
+ _FORCE_INLINE_ RID get_sampler(RS::CanvasItemTextureFilter p_filter, RS::CanvasItemTextureRepeat p_repeat) const {
+ return rids[p_filter][p_repeat];
+ }
+
+ Vector<RD::Uniform> get_uniforms(int p_first_index) const;
+ bool is_valid() const;
+ bool is_null() const;
+ };
+
private:
static MaterialStorage *singleton;
/* Samplers */
- RID default_rd_samplers[RS::CANVAS_ITEM_TEXTURE_FILTER_MAX][RS::CANVAS_ITEM_TEXTURE_REPEAT_MAX];
- RID custom_rd_samplers[RS::CANVAS_ITEM_TEXTURE_FILTER_MAX][RS::CANVAS_ITEM_TEXTURE_REPEAT_MAX];
+ Samplers default_samplers;
/* Buffers */
@@ -335,18 +349,16 @@ public:
/* Samplers */
+ Samplers samplers_rd_allocate(float p_mipmap_bias = 0.0f) const;
+ void samplers_rd_free(Samplers &p_samplers) const;
+
_FORCE_INLINE_ RID sampler_rd_get_default(RS::CanvasItemTextureFilter p_filter, RS::CanvasItemTextureRepeat p_repeat) {
- return default_rd_samplers[p_filter][p_repeat];
+ return default_samplers.get_sampler(p_filter, p_repeat);
}
- _FORCE_INLINE_ RID sampler_rd_get_custom(RS::CanvasItemTextureFilter p_filter, RS::CanvasItemTextureRepeat p_repeat) {
- return custom_rd_samplers[p_filter][p_repeat];
- }
-
- void sampler_rd_configure_custom(float mipmap_bias);
- Vector<RD::Uniform> get_default_sampler_uniforms(int first_index);
-
- // void sampler_rd_set_default(float p_mipmap_bias);
+ _FORCE_INLINE_ const Samplers &samplers_rd_get_default() const {
+ return default_samplers;
+ }
/* Buffers */