[bullhead] Fix issue with QtQuick Text items rendering
Closed, ResolvedPublic

Description

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.

bshah created this task.Dec 21 2016, 6:51 AM
bshah moved this task from Todo to Review on the Plasma: Mobile board.Dec 23 2016, 11:19 AM

Hopefully fixed with this.. Will close when is fixed for real.

bshah added a comment.Dec 23 2016, 1:01 PM

Okay, at least this fixes some, but not all

bshah closed this task as Resolved.Dec 30 2016, 11:31 AM
bshah reopened this task as Open.Jan 25 2017, 11:08 AM

Not fixed completely.

Regarding the amount of visible text: More like almost completely unfixed ;)

bshah added a comment.Feb 1 2017, 2:16 PM

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
bshah moved this task from Review to Todo on the Plasma: Mobile board.Feb 6 2017, 6:03 PM
bshah added a comment.Feb 10 2017, 9:03 PM

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.

bshah closed this task as Resolved.Feb 10 2017, 9:03 PM