Currently rendering for QtQuick Text items is broken in plasmashell and other application. This is most likely due to use of renderMode: Text.NativeRendering. This needs to be fixed accordingly.
Description
Status | Assigned | Task | ||
---|---|---|---|---|
Resolved | bshah | T4940 Nexus 5X (bullhead) port | ||
Resolved | bshah | T4947 [bullhead] Fix issue with QtQuick Text items rendering |
For investigating this issue, I tried to breakdown plasmashell into small parts till it stops breaking, initial thought was it is IconItem which is breaking the text. However it was false alarm as I missed two parts which were visible before my testcase (Keyboard and Lockscreen)
So, I started dropping things from lockscreen and as a result, we have come across minimal test case which results in character in text items not showing up..
import QtQuick 2.0 Item { Text { id: label horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter text: "%" } Timer { interval: 2000 running: true repeat: true onTriggered: label.text = Date().toString() } }
However this testcase doesn't result in garbage in text item
To reproduce garbage,
import QtQuick 2.0 import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.components 2.0 as PlasmaComponents Item { PlasmaCore.FrameSvgItem { id: svg imagePath: "widgets/button" prefix: "pressed" width: parent.width/2 height: parent.height / 2 } Text { id: label horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter text: "%" } Timer { interval: 500 running: true repeat: true onTriggered: label.text = Date().toString() } }
Above minimal testcase was used..
Most likely both issues are related, but we don't know currently.
Below is debug output from qmlscene with environment variable QT_LOGGING_RULES="qt.scenegraph.*=true" which might be useful,
qt.scenegraph.info: texture atlas dimensions: 512x512 qt.scenegraph.info: R/G/B/A Buffers: 5 6 5 0 qt.scenegraph.info: Depth Buffer: 24 qt.scenegraph.info: Stencil Buffer: 8 qt.scenegraph.info: Samples: 0 qt.scenegraph.info: GL_VENDOR: Qualcomm qt.scenegraph.info: GL_RENDERER: Adreno (TM) 418 qt.scenegraph.info: GL_VERSION: OpenGL ES 2.0 (OpenGL ES 3.1 V@127.0 (GIT@I8366cd0437)) qt.scenegraph.info: GL_EXTENSIONS: GL_OES_packed_depth_stencil GL_KHR_debug GL_OES_depth_texture_cube_map GL_OES_texture_npot GL_OES_shader_image_atomic GL_EXT_buffer_storage GL_KHR_texture_compression_astc_ldr GL_OES_depth_texture GL_EXT_texture_filter_anisotropic GL_EXT_texture_format_BGRA8888 GL_EXT_shader_io_blocks GL_EXT_texture_border_clamp GL_EXT_texture_sRGB_R8 GL_OES_texture_float GL_EXT_sRGB GL_KHR_blend_equation_advanced_coherent GL_EXT_tessellation_shader GL_EXT_draw_buffers_indexed GL_EXT_multisampled_render_to_texture GL_OES_surfaceless_context GL_EXT_geometry_shader GL_OES_texture_half_float OES_EGL_image_external_essl3 GL_EXT_texture_norm16 GL_OES_texture_stencil8 GL_OES_texture_half_float_linear GL_EXT_color_buffer_half_float GL_OES_EGL_image_external GL_OES_texture_3D GL_EXT_sRGB_write_control GL_OES_rgb8_rgba8 GL_OVR_multiview_multisampled_render_to_texture GL_EXT_primitive_bounding_box GL_QCOM_alpha_test GL_OES_standard_derivatives GL_OES_sample_variables GL_EXT_disjoint_timer_query GL_OES_compressed_ETC1_RGB8_texture GL_EXT_texture_type_2_10_10_10_REV GL_OES_depth24 GL_EXT_texture_sRGB_decode GL_OVR_multiview GL_OES_element_index_uint GL_EXT_copy_image GL_EXT_discard_framebuffer GL_OES_texture_storage_multisample_2d_array GL_EXT_texture_cube_map_array GL_QCOM_tiled_rendering GL_ANDROID_extension_pack_es31a GL_OES_get_program_binary GL_OES_shader_multisample_interpolation GL_OES_texture_float_linear GL_OES_sample_shading GL_OES_vertex_half_float GL_EXT_texture_buffer GL_OES_EGL_sync GL_OES_EGL_image GL_EXT_debug_marker GL_EXT_debug_label GL_OES_vertex_array_object GL_EXT_robustness GL_OVR_multiview2 GL_AMD_compressed_ATC_texture GL_EXT_gpu_shader5 GL_EXT_YUV_target GL_OES_framebuffer_object GL_KHR_blend_equation_advanced GL_EXT_color_buffer_float GL_KHR_no_error qt.scenegraph.info: Max Texture Size: 16384 qt.scenegraph.info: Debug context: false qt.scenegraph.time.glyph: distancefield: 1 glyphs prepared in 0ms, rendering=0, upload=0 qt.scenegraph.time.compilation: shader compiled in 21ms
Latest image solves the issue of QtQuick text rendering.
Some drivers like Mali, and Adreno requires workaround enabled in the Qt to have proper glyphs of QtQuick text, Thanks to sletta on #qt-quick channel for hint. We have submitted patch to qt at : https://codereview.qt-project.org/#/c/185259/ and rebuilt qtbase on phone with that patch.