Bug 457562 - The layer thumbnail shows the erased section.
Summary: The layer thumbnail shows the erased section.
Status: RESOLVED DUPLICATE of bug 459273
Alias: None
Product: krita
Classification: Applications
Component: Filter Layers (show other bugs)
Version: nightly build (please specify the git hash!)
Platform: Other Other
: NOR normal
Target Milestone: ---
Assignee: Krita Bugs
URL:
Keywords:
: 428259 (view as bug list)
Depends on:
Blocks:
 
Reported: 2022-08-06 19:02 UTC by Eranthis stellata Maxim
Modified: 2022-09-19 13:50 UTC (History)
4 users (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments
Erase some content. (218.88 KB, image/gif)
2022-08-06 19:02 UTC, Eranthis stellata Maxim
Details
Use the eraser directly. (56.40 KB, image/gif)
2022-08-06 19:05 UTC, Eranthis stellata Maxim
Details
bug (2.56 MB, video/mp4)
2022-08-07 05:30 UTC, thetwo
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Eranthis stellata Maxim 2022-08-06 19:02:51 UTC
Created attachment 151150 [details]
Erase some content.

SUMMARY
5.2.0-prealpha (git 9901f95)
The layer thumbnail shows the erased section.
I think only the paint content (the opaque part) should be shown.
This saves space, and the parts that have been erased should not still take up the space of the layer thumbnail.

STEPS TO REPRODUCE
1. Draw an area.
2. Erase most of this area.

OBSERVED RESULT
The layer thumbnail contains the portion that has been erased.

EXPECTED RESULT
Layer thumbnails only show what's left over.

SOFTWARE/OS VERSIONS
Krita

 Version: 5.2.0-prealpha (git 9901f95)
 Installation type: installer / portable package
 Hidpi: true

Qt

  Version (compiled): 5.12.12
  Version (loaded): 5.12.12

OS Information

  Build ABI: x86_64-little_endian-llp64
  Build CPU: x86_64
  CPU: x86_64
  Kernel Type: winnt
  Kernel Version: 10.0.19042
  Pretty Productname: Windows 10 (10.0)
  Product Type: windows
  Product Version: 10

Locale

  Languages: zh_CN, en_US
  C locale: C
  QLocale current: zh
  QLocale system: zh
  QTextCodec for locale: UTF-8
  Process ACP: 65001 (UTF-8)
  System locale default ACP: 936   (ANSI/OEM - 简体中文 GBK)

OpenGL Info
 
  Vendor:  "Google Inc. (NVIDIA)" 
  Renderer:  "ANGLE (NVIDIA, NVIDIA GeForce GTX 970 Direct3D11 vs_5_0 ps_5_0, D3D11-30.0.15.1179)" 
  Version:  "OpenGL ES 3.0.0 (ANGLE 2.1.0 git hash: f2280c0c5f93+krita_qt5.12.12)" 
  Shading language:  "OpenGL ES GLSL ES 3.00 (ANGLE 2.1.0 git hash: f2280c0c5f93+krita_qt5.12.12)" 
  Requested format:  QSurfaceFormat(version 3.0, options QFlags<QSurfaceFormat::FormatOption>(DeprecatedFunctions), depthBufferSize 24, redBufferSize 8, greenBufferSize 8, blueBufferSize 8, alphaBufferSize 8, stencilBufferSize 8, samples -1, swapBehavior QSurfaceFormat::DoubleBuffer, swapInterval 0, colorSpace QSurfaceFormat::DefaultColorSpace, profile  QSurfaceFormat::CompatibilityProfile) 
  Current format:  QSurfaceFormat(version 3.0, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSize 24, redBufferSize 8, greenBufferSize 8, blueBufferSize 8, alphaBufferSize 8, stencilBufferSize 8, samples 0, swapBehavior QSurfaceFormat::DefaultSwapBehavior, swapInterval 0, colorSpace QSurfaceFormat::DefaultColorSpace, profile  QSurfaceFormat::NoProfile) 
     Version: 3.0
     Supports deprecated functions false 
     is OpenGL ES: true 
  supportsBufferMapping: true 
  supportsBufferInvalidation: false 
  forceDisableTextureBuffers: true 
  Extensions: 
     "GL_CHROMIUM_copy_compressed_texture" 
     "GL_ANGLE_framebuffer_blit" 
     "GL_EXT_blend_minmax" 
     "GL_EXT_draw_elements_base_vertex" 
     "GL_NV_fence" 
     "GL_EXT_disjoint_timer_query" 
     "GL_NV_pack_subimage" 
     "GL_OES_texture_stencil8" 
     "GL_OES_compressed_EAC_R11_signed_texture" 
     "GL_OES_compressed_ETC2_punchthroughA_RGBA8_texture" 
     "GL_EXT_clip_control" 
     "GL_EXT_texture_compression_bptc" 
     "GL_OES_surfaceless_context" 
     "GL_ANGLE_get_tex_level_parameter" 
     "GL_EXT_texture_storage" 
     "GL_EXT_texture_type_2_10_10_10_REV" 
     "GL_OES_depth32" 
     "GL_OES_element_index_uint" 
     "GL_WEBGL_video_texture" 
     "GL_EXT_occlusion_query_boolean" 
     "GL_ANGLE_translated_shader_source" 
     "GL_OES_compressed_EAC_RG11_signed_texture" 
     "GL_OES_compressed_ETC2_RGBA8_texture" 
     "GL_ANGLE_instanced_arrays" 
     "GL_ANGLE_lossy_etc_decode" 
     "GL_ANGLE_framebuffer_multisample" 
     "GL_OES_get_program_binary" 
     "GL_ANGLE_texture_compression_dxt3" 
     "GL_ANGLE_multiview_multisample" 
     "GL_OES_draw_elements_base_vertex" 
     "GL_OES_compressed_ETC2_sRGB8_alpha8_texture" 
     "GL_CHROMIUM_bind_uniform_location" 
     "GL_OES_EGL_image" 
     "GL_OES_vertex_array_object" 
     "GL_CHROMIUM_copy_texture" 
     "GL_EXT_texture_norm16" 
     "GL_OES_compressed_EAC_RG11_unsigned_texture" 
     "GL_OES_draw_buffers_indexed" 
     "GL_EXT_draw_buffers" 
     "GL_NV_pixel_buffer_object" 
     "GL_OVR_multiview" 
     "GL_EXT_debug_label" 
     "GL_EXT_unpack_subimage" 
     "GL_KHR_parallel_shader_compile" 
     "GL_ANGLE_memory_size" 
     "GL_ANGLE_texture_multisample" 
     "GL_OES_EGL_image_external_essl3" 
     "GL_OES_compressed_ETC2_punchthroughA_sRGB8_alpha_texture" 
     "GL_OES_packed_depth_stencil" 
     "GL_OES_texture_float" 
     "GL_KHR_debug" 
     "GL_CHROMIUM_lose_context" 
     "GL_EXT_debug_marker" 
     "GL_ANGLE_pack_reverse_row_order" 
     "GL_ANGLE_texture_usage" 
     "GL_CHROMIUM_sync_query" 
     "GL_ANGLE_copy_texture_3d" 
     "GL_OES_fbo_render_mipmap" 
     "GL_OES_texture_npot" 
     "GL_EXT_robustness" 
     "GL_EXT_draw_buffers_indexed" 
     "GL_EXT_texture_filter_anisotropic" 
     "GL_NV_EGL_stream_consumer_external" 
     "GL_NV_framebuffer_blit" 
     "GL_ANGLE_program_cache_control" 
     "GL_ANGLE_base_vertex_base_instance_shader_builtin" 
     "GL_EXT_map_buffer_range" 
     "GL_OES_compressed_EAC_R11_unsigned_texture" 
     "GL_OES_compressed_ETC2_RGB8_texture" 
     "GL_OVR_multiview2" 
     "GL_OES_rgb8_rgba8" 
     "GL_ANGLE_client_arrays" 
     "GL_EXT_texture_rg" 
     "GL_EXT_discard_framebuffer" 
     "GL_OES_depth24" 
     "" 
     "GL_EXT_texture_format_BGRA8888" 
     "GL_ANGLE_robust_client_memory" 
     "GL_OES_compressed_ETC2_sRGB8_texture" 
     "GL_AMD_performance_monitor" 
     "GL_EXT_blend_func_extended" 
     "GL_EXT_multi_draw_indirect" 
     "GL_EXT_multisampled_render_to_texture" 
     "GL_EXT_texture_compression_dxt1" 
     "GL_OES_texture_float_linear" 
     "GL_OES_texture_half_float_linear" 
     "GL_EXT_texture_compression_s3tc_srgb" 
     "GL_EXT_color_buffer_half_float" 
     "GL_OES_standard_derivatives" 
     "GL_ANGLE_request_extension" 
     "GL_EXT_frag_depth" 
     "GL_EXT_instanced_arrays" 
     "GL_EXT_EGL_image_external_wrap_modes" 
     "GL_ANGLE_texture_compression_dxt5" 
     "GL_EXT_float_blend" 
     "GL_OES_texture_half_float" 
     "GL_CHROMIUM_bind_generates_resource" 
     "GL_EXT_texture_compression_rgtc" 
     "GL_OES_EGL_image_external" 
     "GL_EXT_sRGB" 
     "GL_EXT_color_buffer_float" 
     "GL_EXT_shader_texture_lod" 
     "GL_OES_mapbuffer" 
     "GL_EXT_read_format_bgra" 
     "GL_OES_texture_border_clamp" 
     "GL_ANGLE_get_serialized_context_string" 
     "GL_ANGLE_depth_texture" 
     "GL_ANGLE_multi_draw" 
     "GL_ANGLE_base_vertex_base_instance" 
     "GL_ANGLE_provoking_vertex" 

QPA OpenGL Detection Info 
  supportsDesktopGL: true 
  supportsAngleD3D11: true 
  isQtPreferAngle: true 

useBufferInvalidation (config option): false


Hardware Information

  GPU Acceleration: auto
  Memory: 32693 Mb
  Number of Cores: 16
  Swap Location: C:/Users/xi/AppData/Local/Temp
  Built for: sse2
  Base instruction set: sse2
  Supported instruction sets: fma3+avx2 avx2 fma3+avx avx fma4 fma3+sse4.2 sse4.2 sse4.1 ssse3 sse3 sse2 

Current Settings

  Current Swap Location: C:/Users/xi/AppData/Local/Temp
  Current Swap Location writable: true
  Undo Enabled: true
  Undo Stack Limit: 200
  Use OpenGL: true
  Use OpenGL Texture Buffer: true
  Disable Vector Optimizations: false
  Disable AVX Optimizations: false
  Canvas State: OPENGL_SUCCESS
  Autosave Interval: 420
  Use Backup Files: true
  Number of Backups Kept: 1
  Backup File Suffix: ~
  Backup Location: Same Folder as the File
  Backup Location writable: false
  Use Win8 Pointer Input: false
  Use RightMiddleTabletButton Workaround: false
  Levels of Detail Enabled: false
  Use Zip64: false


Display Information
Number of screens: 2
	Screen: 0
		Name: \\.\DISPLAY1
		Depth: 32
		Scale: 1
		Physical DPI117.596
		Logical DPI96
		Physical Size: 553, 311
		Position: 0, 0
		Resolution in pixels: 2560x1440
		Manufacturer: 
		Model: 
		Refresh Rate: 59
	Screen: 1
		Name: \\.\DISPLAY2
		Depth: 32
		Scale: 1
		Physical DPI141.951
		Logical DPI96
		Physical Size: 344, 193
		Position: 638, 1440
		Resolution in pixels: 1920x1080
		Manufacturer: 
		Model: 
		Refresh Rate: 60


---------------------
================================================================================
SESSION: 07 Aug 2022 02:57:22 +0800. Executing D:\P F\krita-nightly-x64-5.2.0-prealpha-9901f954f3\bin\krita.exe

Krita Version: 5.2.0-prealpha (git 9901f95), Qt version compiled: 5.12.12, loaded: 5.12.12. Process ID: 9600
-- -- -- -- -- -- -- --
07 Aug 2022 02:57:22 +0800: Style: fusion. Available styles: windowsvista, Windows, Fusion
07 Aug 2022 02:57:23 +0800: Creating database from scratch (database didn't exist, new schema version: 0.0.17).
07 Aug 2022 02:57:36 +0800: Non-store package - creating updater
07 Aug 2022 02:59:12 +0800: CLOSING SESSION
================================================================================
SESSION: 07 Aug 2022 02:59:17 +0800. Executing D:\P F\krita-nightly-x64-5.2.0-prealpha-9901f954f3\bin\krita.exe

Krita Version: 5.2.0-prealpha (git 9901f95), Qt version compiled: 5.12.12, loaded: 5.12.12. Process ID: 5568
-- -- -- -- -- -- -- --
07 Aug 2022 02:59:17 +0800: Style: fusion. Available styles: windowsvista, Windows, Fusion
07 Aug 2022 02:59:18 +0800: Database is up to date. Version: 0.0.17, created by Krita 5.2.0-prealpha, at 周日 8月 7 02:57:23 2022
07 Aug 2022 02:59:20 +0800: Non-store package - creating updater
07 Aug 2022 02:59:37 +0800: Created image "未命名", 2480 * 3508 pixels, 300 dpi. Color model: 8 位整数/通道 RGB/透明度 (sRGB-elle-V2-srgbtrc.icc). Layers: 2

---------------------
Comment 1 Eranthis stellata Maxim 2022-08-06 19:05:15 UTC
Created attachment 151151 [details]
Use the eraser directly.

Erasing directly on an empty layer will also change the layer thumbnail.
Comment 2 thetwo 2022-08-07 05:30:34 UTC
Created attachment 151158 [details]
bug

I recorded a video. It seems that "transparent pixels" not only affect the layer thumbnails, but also occupy a certain amount of memory.
If I accidentally click outside the canvas with an eraser, it will also make the file larger and make it impossible for people to know.
Comment 3 Halla Rempt 2022-09-05 09:02:42 UTC
Yes -- erased pixels are not deleted, but black 100% transparent pixels. They take space. If you erase you are actually painting using the Erase blending mode. 

The only solution here is to manually trim the layer using the crop tool. Calculating the boundaries of only the visible pixels is pretty expensive, so that's not done automatically.

I'm not sure whether we should actually spend more time on this: we already tried to make a background process that would delete tiles with  only transparent pixels on them but that led to race conditions and crashes. Is this important enough to spend seveal weeks on?
Comment 4 Eranthis stellata Maxim 2022-09-05 09:29:47 UTC
(In reply to Halla Rempt from comment #3)
> Yes -- erased pixels are not deleted, but black 100% transparent pixels.
> They take space. If you erase you are actually painting using the Erase
> blending mode. 
> 
> The only solution here is to manually trim the layer using the crop tool.
> Calculating the boundaries of only the visible pixels is pretty expensive,
> so that's not done automatically.
> 
> I'm not sure whether we should actually spend more time on this: we already
> tried to make a background process that would delete tiles with  only
> transparent pixels on them but that led to race conditions and crashes. Is
> this important enough to spend seveal weeks on?

Sorry, I don't know about that.
Aside from looking weird and taking up a little space on the thumbnail display, the actual impact isn't that big.
I don't think it's time to spend a developer's precious few weeks on this.
So please ignore this little problem.
Please deal with more important things. XD
Comment 5 Halla Rempt 2022-09-05 09:39:01 UTC
Thanks for the reply :-)
Comment 6 Dmitry Kazakov 2022-09-16 11:59:33 UTC
Just a few notes about the technical size of the feature:

1) We update thumbnail preview every 500ms, including during the stroke.
2) Exact bounds calculation might be slow (slower than thumbnail calculation), so, in theory it can interfere with the stroke responsiveness
3) Exact bounds has a cache which is reset only at the end of the stroke. Therefore no thumbnail updates will be issued by then.

So idea solution would be to refactor the thumbnail generation code not to request thumbnail updates during the stroke, but do that only at the end of every stroke. That way it would be safe to update thumbs with exact bounds only.
Comment 7 Dmitry Kazakov 2022-09-19 12:25:20 UTC

*** This bug has been marked as a duplicate of bug 459273 ***
Comment 8 Halla Rempt 2022-09-19 13:50:36 UTC
*** Bug 428259 has been marked as a duplicate of this bug. ***