Use a filter with mipmaps when initializing textures with mipmaps in GL Compatibility renderer

This works around a driver bug in some older devices and should be harmless on any spec-compliant device
This commit is contained in:
clayjohn 2023-06-26 10:45:24 -07:00
parent 030c1a950e
commit 7c37a32897
1 changed files with 9 additions and 4 deletions

View File

@ -1249,10 +1249,6 @@ void TextureStorage::_texture_set_data(RID p_texture, const Ref<Image> &p_image,
glActiveTexture(GL_TEXTURE0); glActiveTexture(GL_TEXTURE0);
glBindTexture(texture->target, texture->tex_id); glBindTexture(texture->target, texture->tex_id);
// set filtering and repeat state to default
texture->gl_set_filter(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST);
texture->gl_set_repeat(RS::CANVAS_ITEM_TEXTURE_REPEAT_ENABLED);
#ifndef WEB_ENABLED #ifndef WEB_ENABLED
switch (texture->format) { switch (texture->format) {
#ifdef GLES_OVER_GL #ifdef GLES_OVER_GL
@ -1294,6 +1290,15 @@ void TextureStorage::_texture_set_data(RID p_texture, const Ref<Image> &p_image,
int mipmaps = img->has_mipmaps() ? img->get_mipmap_count() + 1 : 1; int mipmaps = img->has_mipmaps() ? img->get_mipmap_count() + 1 : 1;
// Set filtering and repeat state to default.
if (mipmaps > 1) {
texture->gl_set_filter(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS);
} else {
texture->gl_set_filter(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST);
}
texture->gl_set_repeat(RS::CANVAS_ITEM_TEXTURE_REPEAT_ENABLED);
int w = img->get_width(); int w = img->get_width();
int h = img->get_height(); int h = img->get_height();