Browse Source

Merge pull request #78720 from clayjohn/GLES3-tex-init

Use a filter with mipmaps when initializing textures with mipmaps in GL Compatibility renderer
Yuri Sizov 2 years ago
parent
commit
1f9e540f14
1 changed files with 9 additions and 4 deletions
  1. 9 4
      drivers/gles3/storage/texture_storage.cpp

+ 9 - 4
drivers/gles3/storage/texture_storage.cpp

@@ -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();