mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-30 21:21:10 +00:00 
			
		
		
		
	Mention mipmap and memory usage in the texture editor preview
This is important to quickly determine if a texture is using unexpectedly high amounts of memory, or to troubleshoot why mipmap sampling modes have no effect on it. - Improve readability by increasing outline size and reducing font size to match the rest of the editor UI.
This commit is contained in:
		
							parent
							
								
									d91def0c7b
								
							
						
					
					
						commit
						87c989f98d
					
				
					 1 changed files with 46 additions and 6 deletions
				
			
		|  | @ -59,7 +59,7 @@ void TexturePreview::_notification(int p_what) { | |||
| } | ||||
| 
 | ||||
| void TexturePreview::_update_metadata_label_text() { | ||||
| 	Ref<Texture2D> texture = texture_display->get_texture(); | ||||
| 	const Ref<Texture2D> texture = texture_display->get_texture(); | ||||
| 
 | ||||
| 	String format; | ||||
| 	if (Object::cast_to<ImageTexture>(*texture)) { | ||||
|  | @ -70,7 +70,49 @@ void TexturePreview::_update_metadata_label_text() { | |||
| 		format = texture->get_class(); | ||||
| 	} | ||||
| 
 | ||||
| 	metadata_label->set_text(vformat(String::utf8("%s×%s %s"), itos(texture->get_width()), itos(texture->get_height()), format)); | ||||
| 	const Ref<Image> image = texture->get_image(); | ||||
| 	if (image.is_valid()) { | ||||
| 		const int mipmaps = image->get_mipmap_count(); | ||||
| 		// Avoid signed integer overflow that could occur with huge texture sizes by casting everything to uint64_t.
 | ||||
| 		uint64_t memory = uint64_t(image->get_width()) * uint64_t(image->get_height()) * uint64_t(Image::get_format_pixel_size(image->get_format())); | ||||
| 		// Handle VRAM-compressed formats that are stored with 4 bpp.
 | ||||
| 		memory >>= Image::get_format_pixel_rshift(image->get_format()); | ||||
| 
 | ||||
| 		float mipmaps_multiplier = 1.0; | ||||
| 		float mipmap_increase = 0.25; | ||||
| 		for (int i = 0; i < mipmaps; i++) { | ||||
| 			// Each mip adds 25% memory usage of the previous one.
 | ||||
| 			// With a complete mipmap chain, memory usage increases by ~33%.
 | ||||
| 			mipmaps_multiplier += mipmap_increase; | ||||
| 			mipmap_increase *= 0.25; | ||||
| 		} | ||||
| 		memory *= mipmaps_multiplier; | ||||
| 
 | ||||
| 		if (mipmaps >= 1) { | ||||
| 			metadata_label->set_text( | ||||
| 					vformat(String::utf8("%d×%d %s\n") + TTR("%s Mipmaps") + "\n" + TTR("Memory: %s"), | ||||
| 							texture->get_width(), | ||||
| 							texture->get_height(), | ||||
| 							format, | ||||
| 							mipmaps, | ||||
| 							String::humanize_size(memory))); | ||||
| 		} else { | ||||
| 			// "No Mipmaps" is easier to distinguish than "0 Mipmaps",
 | ||||
| 			// especially since 0, 6, and 8 look quite close with the default code font.
 | ||||
| 			metadata_label->set_text( | ||||
| 					vformat(String::utf8("%d×%d %s\n") + TTR("No Mipmaps") + "\n" + TTR("Memory: %s"), | ||||
| 							texture->get_width(), | ||||
| 							texture->get_height(), | ||||
| 							format, | ||||
| 							String::humanize_size(memory))); | ||||
| 		} | ||||
| 	} else { | ||||
| 		metadata_label->set_text( | ||||
| 				vformat(String::utf8("%d×%d %s"), | ||||
| 						texture->get_width(), | ||||
| 						texture->get_height(), | ||||
| 						format)); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| TexturePreview::TexturePreview(Ref<Texture2D> p_texture, bool p_show_metadata) { | ||||
|  | @ -97,11 +139,9 @@ TexturePreview::TexturePreview(Ref<Texture2D> p_texture, bool p_show_metadata) { | |||
| 		metadata_label->add_theme_color_override("font_color", Color::named("white")); | ||||
| 		metadata_label->add_theme_color_override("font_color_shadow", Color::named("black")); | ||||
| 
 | ||||
| 		metadata_label->add_theme_font_size_override("font_size", 16 * EDSCALE); | ||||
| 		metadata_label->add_theme_font_size_override("font_size", 14 * EDSCALE); | ||||
| 		metadata_label->add_theme_color_override("font_outline_color", Color::named("black")); | ||||
| 		metadata_label->add_theme_constant_override("outline_size", 2 * EDSCALE); | ||||
| 
 | ||||
| 		metadata_label->add_theme_constant_override("shadow_outline_size", 1); | ||||
| 		metadata_label->add_theme_constant_override("outline_size", 8 * EDSCALE); | ||||
| 		metadata_label->set_h_size_flags(Control::SIZE_SHRINK_END); | ||||
| 		metadata_label->set_v_size_flags(Control::SIZE_SHRINK_END); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Hugo Locurcio
						Hugo Locurcio