X11: No display config with transparency
fxdave opened this issue · 11 comments
My setup supports transparency, so I don't understand why glutin doesn't find a config that supports it:
let config_template = glutin::config::ConfigTemplateBuilder::new()
.prefer_hardware_accelerated(None)
.with_depth_size(0)
.with_stencil_size(0)
.compatible_with_native_window(raw_window_handle)
.build();
let config = gl_display
.find_configs(config_template)
.unwrap()
.take_while(|config| !matches!(config.supports_transparency(), None | Some(true)))
.last()
.unwrap();
if let Some(false) = config.supports_transparency() {
println!("This GL config doesn't support transparency.")
}
Somehow I always get a config with transparency support of Some(false)
.
How can I acquire a config with transparency?
It looks like, despite it is Some(false), it is transparent
Could you describe what your setup is?
I'd still like to know why it's Some(false)
...
I'm using BSPWM on an optimus laptop.
However, nvidia is now turned off and I only use Intel iHD driver for Intel(R) Gen Graphics - 23.1.0
I get this from sudo X :2 -configure
. I tried to find a way to dump the current config. It seems that's the closest way to dump.
Section "ServerLayout"
Identifier "X.org Configured"
Screen 0 "Screen0" 0 0
Screen 1 "Screen1" RightOf "Screen0"
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
EndSection
Section "Files"
ModulePath "/usr/lib/xorg/modules"
FontPath "/usr/share/fonts/misc"
FontPath "/usr/share/fonts/TTF"
FontPath "/usr/share/fonts/OTF"
FontPath "/usr/share/fonts/Type1"
FontPath "/usr/share/fonts/100dpi"
FontPath "/usr/share/fonts/75dpi"
EndSection
Section "Module"
Load "glx"
EndSection
Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
EndSection
Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/input/mice"
Option "ZAxisMapping" "4 5 6 7"
EndSection
Section "Monitor"
Identifier "Monitor0"
VendorName "Monitor Vendor"
ModelName "Monitor Model"
EndSection
Section "Monitor"
Identifier "Monitor1"
VendorName "Monitor Vendor"
ModelName "Monitor Model"
EndSection
Section "Device"
Identifier "Card0"
Driver "nvidia"
BusID "PCI:1:0:0"
EndSection
Section "Device"
### Available Driver options are:-
### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
### <string>: "String", <freq>: "<f> Hz/kHz/MHz",
### <percent>: "<f>%"
### [arg]: arg optional
#Option "SWcursor" # [<bool>]
#Option "kmsdev" # <str>
#Option "ShadowFB" # [<bool>]
#Option "AccelMethod" # <str>
#Option "PageFlip" # [<bool>]
#Option "ZaphodHeads" # <str>
#Option "DoubleShadow" # [<bool>]
#Option "Atomic" # [<bool>]
#Option "VariableRefresh" # [<bool>]
#Option "UseGammaLUT" # [<bool>]
#Option "AsyncFlipSecondaries" # [<bool>]
Identifier "Card1"
Driver "modesetting"
BusID "PCI:0:2:0"
EndSection
Section "Screen"
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
SubSection "Display"
Viewport 0 0
Depth 1
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 4
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 8
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 15
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 16
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 24
EndSubSection
EndSection
Section "Screen"
Identifier "Screen1"
Device "Card1"
Monitor "Monitor1"
SubSection "Display"
Viewport 0 0
Depth 1
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 4
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 8
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 15
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 16
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 24
EndSubSection
EndSection
glxinfo:
name of display: :0
display: :0 screen: 0
direct rendering: Yes
server glx vendor string: SGI
server glx version string: 1.4
server glx extensions:
GLX_ARB_context_flush_control, GLX_ARB_create_context,
GLX_ARB_create_context_no_error, GLX_ARB_create_context_profile,
GLX_ARB_create_context_robustness, GLX_ARB_fbconfig_float,
GLX_ARB_framebuffer_sRGB, GLX_ARB_multisample,
GLX_EXT_create_context_es2_profile, GLX_EXT_create_context_es_profile,
GLX_EXT_fbconfig_packed_float, GLX_EXT_framebuffer_sRGB,
GLX_EXT_get_drawable_type, GLX_EXT_libglvnd, GLX_EXT_no_config_context,
GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info, GLX_EXT_visual_rating,
GLX_INTEL_swap_event, GLX_MESA_copy_sub_buffer, GLX_OML_swap_method,
GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer,
GLX_SGIX_visual_select_group, GLX_SGI_make_current_read,
GLX_SGI_swap_control
client glx vendor string: Mesa Project and SGI
client glx version string: 1.4
client glx extensions:
GLX_ARB_context_flush_control, GLX_ARB_create_context,
GLX_ARB_create_context_no_error, GLX_ARB_create_context_profile,
GLX_ARB_create_context_robustness, GLX_ARB_fbconfig_float,
GLX_ARB_framebuffer_sRGB, GLX_ARB_get_proc_address, GLX_ARB_multisample,
GLX_ATI_pixel_format_float, GLX_EXT_buffer_age,
GLX_EXT_create_context_es2_profile, GLX_EXT_create_context_es_profile,
GLX_EXT_fbconfig_packed_float, GLX_EXT_framebuffer_sRGB,
GLX_EXT_import_context, GLX_EXT_no_config_context, GLX_EXT_swap_control,
GLX_EXT_swap_control_tear, GLX_EXT_texture_from_pixmap,
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_INTEL_swap_event,
GLX_MESA_copy_sub_buffer, GLX_MESA_query_renderer, GLX_MESA_swap_control,
GLX_NV_float_buffer, GLX_OML_swap_method, GLX_OML_sync_control,
GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer,
GLX_SGIX_visual_select_group, GLX_SGI_make_current_read,
GLX_SGI_swap_control, GLX_SGI_video_sync
GLX version: 1.4
GLX extensions:
GLX_ARB_context_flush_control, GLX_ARB_create_context,
GLX_ARB_create_context_no_error, GLX_ARB_create_context_profile,
GLX_ARB_create_context_robustness, GLX_ARB_fbconfig_float,
GLX_ARB_framebuffer_sRGB, GLX_ARB_get_proc_address, GLX_ARB_multisample,
GLX_EXT_buffer_age, GLX_EXT_create_context_es2_profile,
GLX_EXT_create_context_es_profile, GLX_EXT_fbconfig_packed_float,
GLX_EXT_framebuffer_sRGB, GLX_EXT_no_config_context, GLX_EXT_swap_control,
GLX_EXT_swap_control_tear, GLX_EXT_texture_from_pixmap,
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_INTEL_swap_event,
GLX_MESA_copy_sub_buffer, GLX_MESA_query_renderer, GLX_MESA_swap_control,
GLX_OML_swap_method, GLX_OML_sync_control, GLX_SGIS_multisample,
GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, GLX_SGIX_visual_select_group,
GLX_SGI_make_current_read, GLX_SGI_swap_control, GLX_SGI_video_sync
Extended renderer info (GLX_MESA_query_renderer):
Vendor: Intel (0x8086)
Device: Mesa Intel(R) UHD Graphics (CML GT2) (0x9bc4)
Version: 23.1.2
Accelerated: yes
Video memory: 15743MB
Unified memory: yes
Preferred profile: core (0x1)
Max core profile version: 4.6
Max compat profile version: 4.6
Max GLES1 profile version: 1.1
Max GLES[23] profile version: 3.2
OpenGL vendor string: Intel
OpenGL renderer string: Mesa Intel(R) UHD Graphics (CML GT2)
OpenGL core profile version string: 4.6 (Core Profile) Mesa 23.1.2
OpenGL core profile shading language version string: 4.60
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
GL_3DFX_texture_compression_FXT1, GL_AMD_conservative_depth,
GL_AMD_depth_clamp_separate, GL_AMD_draw_buffers_blend,
GL_AMD_gpu_shader_int64, GL_AMD_multi_draw_indirect,
GL_AMD_performance_monitor, GL_AMD_pinned_memory,
GL_AMD_query_buffer_object, GL_AMD_seamless_cubemap_per_texture,
GL_AMD_shader_stencil_export, GL_AMD_shader_trinary_minmax,
GL_AMD_texture_texture4, GL_AMD_vertex_shader_layer,
GL_AMD_vertex_shader_viewport_index, GL_ANGLE_texture_compression_dxt3,
GL_ANGLE_texture_compression_dxt5, GL_ARB_ES2_compatibility,
GL_ARB_ES3_1_compatibility, GL_ARB_ES3_2_compatibility,
GL_ARB_ES3_compatibility, GL_ARB_arrays_of_arrays, GL_ARB_base_instance,
GL_ARB_blend_func_extended, GL_ARB_buffer_storage,
GL_ARB_clear_buffer_object, GL_ARB_clear_texture, GL_ARB_clip_control,
GL_ARB_compressed_texture_pixel_storage, GL_ARB_compute_shader,
GL_ARB_compute_variable_group_size, GL_ARB_conditional_render_inverted,
GL_ARB_conservative_depth, GL_ARB_copy_buffer, GL_ARB_copy_image,
GL_ARB_cull_distance, GL_ARB_debug_output, GL_ARB_depth_buffer_float,
GL_ARB_depth_clamp, GL_ARB_derivative_control, GL_ARB_direct_state_access,
GL_ARB_draw_buffers, GL_ARB_draw_buffers_blend,
GL_ARB_draw_elements_base_vertex, GL_ARB_draw_indirect,
GL_ARB_draw_instanced, GL_ARB_enhanced_layouts,
GL_ARB_explicit_attrib_location, GL_ARB_explicit_uniform_location,
GL_ARB_fragment_coord_conventions, GL_ARB_fragment_layer_viewport,
GL_ARB_fragment_shader, GL_ARB_fragment_shader_interlock,
GL_ARB_framebuffer_no_attachments, GL_ARB_framebuffer_object,
GL_ARB_framebuffer_sRGB, GL_ARB_get_program_binary,
GL_ARB_get_texture_sub_image, GL_ARB_gl_spirv, GL_ARB_gpu_shader5,
GL_ARB_gpu_shader_fp64, GL_ARB_gpu_shader_int64, GL_ARB_half_float_pixel,
GL_ARB_half_float_vertex, GL_ARB_indirect_parameters,
GL_ARB_instanced_arrays, GL_ARB_internalformat_query,
GL_ARB_internalformat_query2, GL_ARB_invalidate_subdata,
GL_ARB_map_buffer_alignment, GL_ARB_map_buffer_range, GL_ARB_multi_bind,
GL_ARB_multi_draw_indirect, GL_ARB_occlusion_query2,
GL_ARB_parallel_shader_compile, GL_ARB_pipeline_statistics_query,
GL_ARB_pixel_buffer_object, GL_ARB_point_sprite,
GL_ARB_polygon_offset_clamp, GL_ARB_post_depth_coverage,
GL_ARB_program_interface_query, GL_ARB_provoking_vertex,
GL_ARB_query_buffer_object, GL_ARB_robust_buffer_access_behavior,
GL_ARB_robustness, GL_ARB_sample_shading, GL_ARB_sampler_objects,
GL_ARB_seamless_cube_map, GL_ARB_seamless_cubemap_per_texture,
GL_ARB_separate_shader_objects, GL_ARB_shader_atomic_counter_ops,
GL_ARB_shader_atomic_counters, GL_ARB_shader_ballot,
GL_ARB_shader_bit_encoding, GL_ARB_shader_clock,
GL_ARB_shader_draw_parameters, GL_ARB_shader_group_vote,
GL_ARB_shader_image_load_store, GL_ARB_shader_image_size,
GL_ARB_shader_objects, GL_ARB_shader_precision,
GL_ARB_shader_stencil_export, GL_ARB_shader_storage_buffer_object,
GL_ARB_shader_subroutine, GL_ARB_shader_texture_image_samples,
GL_ARB_shader_texture_lod, GL_ARB_shader_viewport_layer_array,
GL_ARB_shading_language_420pack, GL_ARB_shading_language_include,
GL_ARB_shading_language_packing, GL_ARB_spirv_extensions,
GL_ARB_stencil_texturing, GL_ARB_sync, GL_ARB_tessellation_shader,
GL_ARB_texture_barrier, GL_ARB_texture_buffer_object,
GL_ARB_texture_buffer_object_rgb32, GL_ARB_texture_buffer_range,
GL_ARB_texture_compression_bptc, GL_ARB_texture_compression_rgtc,
GL_ARB_texture_cube_map_array, GL_ARB_texture_filter_anisotropic,
GL_ARB_texture_float, GL_ARB_texture_gather,
GL_ARB_texture_mirror_clamp_to_edge, GL_ARB_texture_multisample,
GL_ARB_texture_non_power_of_two, GL_ARB_texture_query_levels,
GL_ARB_texture_query_lod, GL_ARB_texture_rectangle, GL_ARB_texture_rg,
GL_ARB_texture_rgb10_a2ui, GL_ARB_texture_stencil8,
GL_ARB_texture_storage, GL_ARB_texture_storage_multisample,
GL_ARB_texture_swizzle, GL_ARB_texture_view, GL_ARB_timer_query,
GL_ARB_transform_feedback2, GL_ARB_transform_feedback3,
GL_ARB_transform_feedback_instanced,
GL_ARB_transform_feedback_overflow_query, GL_ARB_uniform_buffer_object,
GL_ARB_vertex_array_bgra, GL_ARB_vertex_array_object,
GL_ARB_vertex_attrib_64bit, GL_ARB_vertex_attrib_binding,
GL_ARB_vertex_buffer_object, GL_ARB_vertex_shader,
GL_ARB_vertex_type_10f_11f_11f_rev, GL_ARB_vertex_type_2_10_10_10_rev,
GL_ARB_viewport_array, GL_ATI_blend_equation_separate,
GL_ATI_texture_float, GL_EXT_EGL_image_storage, GL_EXT_EGL_sync,
GL_EXT_abgr, GL_EXT_blend_equation_separate, GL_EXT_debug_label,
GL_EXT_demote_to_helper_invocation, GL_EXT_draw_buffers2,
GL_EXT_draw_instanced, GL_EXT_framebuffer_blit,
GL_EXT_framebuffer_multisample, GL_EXT_framebuffer_multisample_blit_scaled,
GL_EXT_framebuffer_object, GL_EXT_framebuffer_sRGB, GL_EXT_memory_object,
GL_EXT_memory_object_fd, GL_EXT_packed_depth_stencil, GL_EXT_packed_float,
GL_EXT_pixel_buffer_object, GL_EXT_polygon_offset_clamp,
GL_EXT_provoking_vertex, GL_EXT_semaphore, GL_EXT_semaphore_fd,
GL_EXT_shader_framebuffer_fetch,
GL_EXT_shader_framebuffer_fetch_non_coherent, GL_EXT_shader_integer_mix,
GL_EXT_shader_samples_identical, GL_EXT_texture_array,
GL_EXT_texture_compression_dxt1, GL_EXT_texture_compression_rgtc,
GL_EXT_texture_compression_s3tc, GL_EXT_texture_filter_anisotropic,
GL_EXT_texture_integer, GL_EXT_texture_sRGB, GL_EXT_texture_sRGB_R8,
GL_EXT_texture_sRGB_decode, GL_EXT_texture_shadow_lod,
GL_EXT_texture_shared_exponent, GL_EXT_texture_snorm,
GL_EXT_texture_swizzle, GL_EXT_timer_query, GL_EXT_transform_feedback,
GL_EXT_vertex_array_bgra, GL_EXT_vertex_attrib_64bit,
GL_IBM_multimode_draw_arrays, GL_INTEL_blackhole_render,
GL_INTEL_conservative_rasterization, GL_INTEL_performance_query,
GL_INTEL_shader_atomic_float_minmax, GL_INTEL_shader_integer_functions2,
GL_KHR_blend_equation_advanced, GL_KHR_blend_equation_advanced_coherent,
GL_KHR_context_flush_control, GL_KHR_debug, GL_KHR_no_error,
GL_KHR_parallel_shader_compile, GL_KHR_robust_buffer_access_behavior,
GL_KHR_robustness, GL_KHR_texture_compression_astc_ldr,
GL_KHR_texture_compression_astc_sliced_3d, GL_MESA_framebuffer_flip_y,
GL_MESA_pack_invert, GL_MESA_shader_integer_functions,
GL_MESA_texture_signed_rgba, GL_NV_alpha_to_coverage_dither_control,
GL_NV_compute_shader_derivatives, GL_NV_conditional_render,
GL_NV_copy_image, GL_NV_depth_clamp, GL_NV_fragment_shader_interlock,
GL_NV_packed_depth_stencil, GL_NV_texture_barrier, GL_OES_EGL_image,
GL_S3_s3tc
OpenGL version string: 4.6 (Compatibility Profile) Mesa 23.1.2
OpenGL shading language version string: 4.60
OpenGL context flags: (none)
OpenGL profile mask: compatibility profile
OpenGL extensions:
GL_3DFX_texture_compression_FXT1, GL_AMD_conservative_depth,
GL_AMD_depth_clamp_separate, GL_AMD_draw_buffers_blend,
GL_AMD_multi_draw_indirect, GL_AMD_performance_monitor,
GL_AMD_pinned_memory, GL_AMD_query_buffer_object,
GL_AMD_seamless_cubemap_per_texture, GL_AMD_shader_stencil_export,
GL_AMD_shader_trinary_minmax, GL_AMD_texture_texture4,
GL_AMD_vertex_shader_layer, GL_AMD_vertex_shader_viewport_index,
GL_ANGLE_texture_compression_dxt3, GL_ANGLE_texture_compression_dxt5,
GL_APPLE_packed_pixels, GL_ARB_ES2_compatibility,
GL_ARB_ES3_1_compatibility, GL_ARB_ES3_2_compatibility,
GL_ARB_ES3_compatibility, GL_ARB_arrays_of_arrays, GL_ARB_base_instance,
GL_ARB_blend_func_extended, GL_ARB_buffer_storage,
GL_ARB_clear_buffer_object, GL_ARB_clear_texture, GL_ARB_clip_control,
GL_ARB_color_buffer_float, GL_ARB_compatibility,
GL_ARB_compressed_texture_pixel_storage, GL_ARB_compute_shader,
GL_ARB_compute_variable_group_size, GL_ARB_conditional_render_inverted,
GL_ARB_conservative_depth, GL_ARB_copy_buffer, GL_ARB_copy_image,
GL_ARB_cull_distance, GL_ARB_debug_output, GL_ARB_depth_buffer_float,
GL_ARB_depth_clamp, GL_ARB_depth_texture, GL_ARB_derivative_control,
GL_ARB_direct_state_access, GL_ARB_draw_buffers,
GL_ARB_draw_buffers_blend, GL_ARB_draw_elements_base_vertex,
GL_ARB_draw_indirect, GL_ARB_draw_instanced, GL_ARB_enhanced_layouts,
GL_ARB_explicit_attrib_location, GL_ARB_explicit_uniform_location,
GL_ARB_fragment_coord_conventions, GL_ARB_fragment_layer_viewport,
GL_ARB_fragment_program, GL_ARB_fragment_program_shadow,
GL_ARB_fragment_shader, GL_ARB_fragment_shader_interlock,
GL_ARB_framebuffer_no_attachments, GL_ARB_framebuffer_object,
GL_ARB_framebuffer_sRGB, GL_ARB_get_program_binary,
GL_ARB_get_texture_sub_image, GL_ARB_gl_spirv, GL_ARB_gpu_shader5,
GL_ARB_gpu_shader_fp64, GL_ARB_gpu_shader_int64, GL_ARB_half_float_pixel,
GL_ARB_half_float_vertex, GL_ARB_indirect_parameters,
GL_ARB_instanced_arrays, GL_ARB_internalformat_query,
GL_ARB_internalformat_query2, GL_ARB_invalidate_subdata,
GL_ARB_map_buffer_alignment, GL_ARB_map_buffer_range, GL_ARB_multi_bind,
GL_ARB_multi_draw_indirect, GL_ARB_multisample, GL_ARB_multitexture,
GL_ARB_occlusion_query, GL_ARB_occlusion_query2,
GL_ARB_parallel_shader_compile, GL_ARB_pipeline_statistics_query,
GL_ARB_pixel_buffer_object, GL_ARB_point_parameters, GL_ARB_point_sprite,
GL_ARB_polygon_offset_clamp, GL_ARB_post_depth_coverage,
GL_ARB_program_interface_query, GL_ARB_provoking_vertex,
GL_ARB_query_buffer_object, GL_ARB_robust_buffer_access_behavior,
GL_ARB_robustness, GL_ARB_sample_shading, GL_ARB_sampler_objects,
GL_ARB_seamless_cube_map, GL_ARB_seamless_cubemap_per_texture,
GL_ARB_separate_shader_objects, GL_ARB_shader_atomic_counter_ops,
GL_ARB_shader_atomic_counters, GL_ARB_shader_ballot,
GL_ARB_shader_bit_encoding, GL_ARB_shader_clock,
GL_ARB_shader_draw_parameters, GL_ARB_shader_group_vote,
GL_ARB_shader_image_load_store, GL_ARB_shader_image_size,
GL_ARB_shader_objects, GL_ARB_shader_precision,
GL_ARB_shader_stencil_export, GL_ARB_shader_storage_buffer_object,
GL_ARB_shader_subroutine, GL_ARB_shader_texture_image_samples,
GL_ARB_shader_texture_lod, GL_ARB_shader_viewport_layer_array,
GL_ARB_shading_language_100, GL_ARB_shading_language_420pack,
GL_ARB_shading_language_include, GL_ARB_shading_language_packing,
GL_ARB_shadow, GL_ARB_spirv_extensions, GL_ARB_stencil_texturing,
GL_ARB_sync, GL_ARB_tessellation_shader, GL_ARB_texture_barrier,
GL_ARB_texture_border_clamp, GL_ARB_texture_buffer_object,
GL_ARB_texture_buffer_object_rgb32, GL_ARB_texture_buffer_range,
GL_ARB_texture_compression, GL_ARB_texture_compression_bptc,
GL_ARB_texture_compression_rgtc, GL_ARB_texture_cube_map,
GL_ARB_texture_cube_map_array, GL_ARB_texture_env_add,
GL_ARB_texture_env_combine, GL_ARB_texture_env_crossbar,
GL_ARB_texture_env_dot3, GL_ARB_texture_filter_anisotropic,
GL_ARB_texture_float, GL_ARB_texture_gather,
GL_ARB_texture_mirror_clamp_to_edge, GL_ARB_texture_mirrored_repeat,
GL_ARB_texture_multisample, GL_ARB_texture_non_power_of_two,
GL_ARB_texture_query_levels, GL_ARB_texture_query_lod,
GL_ARB_texture_rectangle, GL_ARB_texture_rg, GL_ARB_texture_rgb10_a2ui,
GL_ARB_texture_stencil8, GL_ARB_texture_storage,
GL_ARB_texture_storage_multisample, GL_ARB_texture_swizzle,
GL_ARB_texture_view, GL_ARB_timer_query, GL_ARB_transform_feedback2,
GL_ARB_transform_feedback3, GL_ARB_transform_feedback_instanced,
GL_ARB_transform_feedback_overflow_query, GL_ARB_transpose_matrix,
GL_ARB_uniform_buffer_object, GL_ARB_vertex_array_bgra,
GL_ARB_vertex_array_object, GL_ARB_vertex_attrib_64bit,
GL_ARB_vertex_attrib_binding, GL_ARB_vertex_buffer_object,
GL_ARB_vertex_program, GL_ARB_vertex_shader,
GL_ARB_vertex_type_10f_11f_11f_rev, GL_ARB_vertex_type_2_10_10_10_rev,
GL_ARB_viewport_array, GL_ARB_window_pos, GL_ATI_blend_equation_separate,
GL_ATI_draw_buffers, GL_ATI_fragment_shader, GL_ATI_separate_stencil,
GL_ATI_texture_compression_3dc, GL_ATI_texture_env_combine3,
GL_ATI_texture_float, GL_EXT_EGL_image_storage, GL_EXT_EGL_sync,
GL_EXT_abgr, GL_EXT_bgra, GL_EXT_blend_color,
GL_EXT_blend_equation_separate, GL_EXT_blend_func_separate,
GL_EXT_blend_minmax, GL_EXT_blend_subtract, GL_EXT_compiled_vertex_array,
GL_EXT_copy_texture, GL_EXT_debug_label,
GL_EXT_demote_to_helper_invocation, GL_EXT_direct_state_access,
GL_EXT_draw_buffers2, GL_EXT_draw_instanced, GL_EXT_draw_range_elements,
GL_EXT_fog_coord, GL_EXT_framebuffer_blit, GL_EXT_framebuffer_multisample,
GL_EXT_framebuffer_multisample_blit_scaled, GL_EXT_framebuffer_object,
GL_EXT_framebuffer_sRGB, GL_EXT_gpu_program_parameters,
GL_EXT_gpu_shader4, GL_EXT_memory_object, GL_EXT_memory_object_fd,
GL_EXT_multi_draw_arrays, GL_EXT_packed_depth_stencil,
GL_EXT_packed_float, GL_EXT_packed_pixels, GL_EXT_pixel_buffer_object,
GL_EXT_point_parameters, GL_EXT_polygon_offset_clamp,
GL_EXT_provoking_vertex, GL_EXT_rescale_normal, GL_EXT_secondary_color,
GL_EXT_semaphore, GL_EXT_semaphore_fd, GL_EXT_separate_specular_color,
GL_EXT_shader_framebuffer_fetch,
GL_EXT_shader_framebuffer_fetch_non_coherent, GL_EXT_shader_integer_mix,
GL_EXT_shader_samples_identical, GL_EXT_shadow_funcs,
GL_EXT_stencil_two_side, GL_EXT_stencil_wrap, GL_EXT_subtexture,
GL_EXT_texture, GL_EXT_texture3D, GL_EXT_texture_array,
GL_EXT_texture_buffer_object, GL_EXT_texture_compression_dxt1,
GL_EXT_texture_compression_latc, GL_EXT_texture_compression_rgtc,
GL_EXT_texture_compression_s3tc, GL_EXT_texture_cube_map,
GL_EXT_texture_edge_clamp, GL_EXT_texture_env_add,
GL_EXT_texture_env_combine, GL_EXT_texture_env_dot3,
GL_EXT_texture_filter_anisotropic, GL_EXT_texture_integer,
GL_EXT_texture_lod_bias, GL_EXT_texture_object, GL_EXT_texture_rectangle,
GL_EXT_texture_sRGB, GL_EXT_texture_sRGB_R8, GL_EXT_texture_sRGB_decode,
GL_EXT_texture_shadow_lod, GL_EXT_texture_shared_exponent,
GL_EXT_texture_snorm, GL_EXT_texture_swizzle, GL_EXT_timer_query,
GL_EXT_transform_feedback, GL_EXT_vertex_array, GL_EXT_vertex_array_bgra,
GL_EXT_vertex_attrib_64bit, GL_IBM_multimode_draw_arrays,
GL_IBM_rasterpos_clip, GL_IBM_texture_mirrored_repeat,
GL_INGR_blend_func_separate, GL_INTEL_blackhole_render,
GL_INTEL_performance_query, GL_INTEL_shader_atomic_float_minmax,
GL_INTEL_shader_integer_functions2, GL_KHR_blend_equation_advanced,
GL_KHR_blend_equation_advanced_coherent, GL_KHR_context_flush_control,
GL_KHR_debug, GL_KHR_no_error, GL_KHR_parallel_shader_compile,
GL_KHR_robust_buffer_access_behavior, GL_KHR_robustness,
GL_KHR_texture_compression_astc_ldr,
GL_KHR_texture_compression_astc_sliced_3d, GL_MESA_framebuffer_flip_y,
GL_MESA_pack_invert, GL_MESA_shader_integer_functions,
GL_MESA_texture_signed_rgba, GL_MESA_window_pos,
GL_NV_ES1_1_compatibility, GL_NV_alpha_to_coverage_dither_control,
GL_NV_blend_square, GL_NV_compute_shader_derivatives,
GL_NV_conditional_render, GL_NV_copy_depth_to_color, GL_NV_copy_image,
GL_NV_depth_clamp, GL_NV_fog_distance, GL_NV_fragment_shader_interlock,
GL_NV_half_float, GL_NV_light_max_exponent, GL_NV_packed_depth_stencil,
GL_NV_primitive_restart, GL_NV_texgen_reflection, GL_NV_texture_barrier,
GL_NV_texture_env_combine4, GL_NV_texture_rectangle, GL_OES_EGL_image,
GL_OES_read_format, GL_S3_s3tc, GL_SGIS_generate_mipmap,
GL_SGIS_texture_border_clamp, GL_SGIS_texture_edge_clamp,
GL_SGIS_texture_lod, GL_SUN_multi_draw_arrays
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 23.1.2
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
OpenGL ES profile extensions:
GL_AMD_performance_monitor, GL_ANDROID_extension_pack_es31a,
GL_ANGLE_pack_reverse_row_order, GL_ANGLE_texture_compression_dxt3,
GL_ANGLE_texture_compression_dxt5, GL_APPLE_texture_max_level,
GL_EXT_EGL_image_storage, GL_EXT_base_instance,
GL_EXT_blend_func_extended, GL_EXT_blend_minmax, GL_EXT_buffer_storage,
GL_EXT_clear_texture, GL_EXT_clip_control, GL_EXT_clip_cull_distance,
GL_EXT_color_buffer_float, GL_EXT_color_buffer_half_float,
GL_EXT_compressed_ETC1_RGB8_sub_texture, GL_EXT_copy_image,
GL_EXT_debug_label, GL_EXT_demote_to_helper_invocation,
GL_EXT_depth_clamp, GL_EXT_discard_framebuffer,
GL_EXT_disjoint_timer_query, GL_EXT_draw_buffers,
GL_EXT_draw_buffers_indexed, GL_EXT_draw_elements_base_vertex,
GL_EXT_draw_instanced, GL_EXT_float_blend, GL_EXT_frag_depth,
GL_EXT_geometry_point_size, GL_EXT_geometry_shader, GL_EXT_gpu_shader5,
GL_EXT_instanced_arrays, GL_EXT_map_buffer_range, GL_EXT_memory_object,
GL_EXT_memory_object_fd, GL_EXT_multi_draw_arrays,
GL_EXT_occlusion_query_boolean, GL_EXT_polygon_offset_clamp,
GL_EXT_primitive_bounding_box, GL_EXT_read_format_bgra,
GL_EXT_render_snorm, GL_EXT_robustness, GL_EXT_sRGB_write_control,
GL_EXT_semaphore, GL_EXT_semaphore_fd, GL_EXT_separate_shader_objects,
GL_EXT_shader_framebuffer_fetch,
GL_EXT_shader_framebuffer_fetch_non_coherent, GL_EXT_shader_group_vote,
GL_EXT_shader_implicit_conversions, GL_EXT_shader_integer_mix,
GL_EXT_shader_io_blocks, GL_EXT_shader_samples_identical,
GL_EXT_tessellation_point_size, GL_EXT_tessellation_shader,
GL_EXT_texture_border_clamp, GL_EXT_texture_buffer,
GL_EXT_texture_compression_bptc, GL_EXT_texture_compression_dxt1,
GL_EXT_texture_compression_rgtc, GL_EXT_texture_compression_s3tc,
GL_EXT_texture_compression_s3tc_srgb, GL_EXT_texture_cube_map_array,
GL_EXT_texture_filter_anisotropic, GL_EXT_texture_format_BGRA8888,
GL_EXT_texture_mirror_clamp_to_edge, GL_EXT_texture_norm16,
GL_EXT_texture_query_lod, GL_EXT_texture_rg, GL_EXT_texture_sRGB_R8,
GL_EXT_texture_sRGB_decode, GL_EXT_texture_shadow_lod,
GL_EXT_texture_type_2_10_10_10_REV, GL_EXT_texture_view,
GL_EXT_unpack_subimage, GL_INTEL_blackhole_render,
GL_INTEL_conservative_rasterization, GL_INTEL_performance_query,
GL_KHR_blend_equation_advanced, GL_KHR_blend_equation_advanced_coherent,
GL_KHR_context_flush_control, GL_KHR_debug, GL_KHR_no_error,
GL_KHR_parallel_shader_compile, GL_KHR_robust_buffer_access_behavior,
GL_KHR_robustness, GL_KHR_texture_compression_astc_ldr,
GL_KHR_texture_compression_astc_sliced_3d, GL_MESA_bgra,
GL_MESA_framebuffer_flip_y, GL_MESA_shader_integer_functions,
GL_NV_alpha_to_coverage_dither_control, GL_NV_compute_shader_derivatives,
GL_NV_conditional_render, GL_NV_draw_buffers, GL_NV_fbo_color_attachments,
GL_NV_fragment_shader_interlock, GL_NV_generate_mipmap_sRGB,
GL_NV_image_formats, GL_NV_pack_subimage, GL_NV_pixel_buffer_object,
GL_NV_read_buffer, GL_NV_read_depth, GL_NV_read_depth_stencil,
GL_NV_read_stencil, GL_NV_shader_noperspective_interpolation,
GL_OES_EGL_image, GL_OES_EGL_image_external,
GL_OES_EGL_image_external_essl3, GL_OES_EGL_sync,
GL_OES_compressed_ETC1_RGB8_texture, GL_OES_copy_image, GL_OES_depth24,
GL_OES_depth_texture, GL_OES_depth_texture_cube_map,
GL_OES_draw_buffers_indexed, GL_OES_draw_elements_base_vertex,
GL_OES_element_index_uint, GL_OES_fbo_render_mipmap,
GL_OES_geometry_point_size, GL_OES_geometry_shader,
GL_OES_get_program_binary, GL_OES_gpu_shader5, GL_OES_mapbuffer,
GL_OES_packed_depth_stencil, GL_OES_primitive_bounding_box,
GL_OES_required_internalformat, GL_OES_rgb8_rgba8, GL_OES_sample_shading,
GL_OES_sample_variables, GL_OES_shader_image_atomic,
GL_OES_shader_io_blocks, GL_OES_shader_multisample_interpolation,
GL_OES_standard_derivatives, GL_OES_stencil8, GL_OES_surfaceless_context,
GL_OES_tessellation_point_size, GL_OES_tessellation_shader,
GL_OES_texture_3D, GL_OES_texture_border_clamp, GL_OES_texture_buffer,
GL_OES_texture_cube_map_array, GL_OES_texture_float,
GL_OES_texture_float_linear, GL_OES_texture_half_float,
GL_OES_texture_half_float_linear, GL_OES_texture_npot,
GL_OES_texture_stencil8, GL_OES_texture_storage_multisample_2d_array,
GL_OES_texture_view, GL_OES_vertex_array_object, GL_OES_vertex_half_float,
GL_OES_viewport_array
600 GLX Visuals
visual x bf lv rg d st colorbuffer sr ax dp st accumbuffer ms sw cav
id dep cl sp sz l ci b ro r g b a F gb bf th cl r g b a ns b ap eat
----------------------------------------------------------------------------
...
If I start a compositor like compton
or picom
, I get the same result.
I don't know whether it helps or not but as far as I know, XCB doesn't have this config finder functionality. It just works with transparency: https://github.com/fxdave/simple-clock-rs
Were you actually using GLX though in glutin, is glutin example transparent for you?
The thing about transparency with OpenGL on X11 is that it depends on mesa and X11 visuals, so we check if you have alpha mask or not.
This is what I use now:
use egui_glow::glow;
use raw_window_handle::{
HasRawDisplayHandle, HasRawWindowHandle, RawDisplayHandle, RawWindowHandle,
};
use winit::dpi::PhysicalSize;
use winit::event_loop::EventLoop;
use winit::window::WindowBuilder;
use x11::xlib::_XDisplay;
pub fn create_display<TUserEvent>(
event_loop: &EventLoop<TUserEvent>,
) -> (GlutinWindowContext, egui_glow::painter::Context) {
let winit_window = WindowBuilder::new()
.with_visible(false)
.with_decorations(false)
.with_resizable(false)
.with_window_level(winit::window::WindowLevel::AlwaysOnTop)
.with_inner_size(PhysicalSize {
width: 10,
height: 10,
})
.with_transparent(true)
.with_title("Vonal")
.build(event_loop)
.unwrap();
let gl_window = unsafe { GlutinWindowContext::new(winit_window) };
let gl = unsafe {
glow::Context::from_loader_function(|s| {
let s = std::ffi::CString::new(s)
.expect("failed to construct C string from string for gl proc address");
gl_window.get_proc_address(&s)
})
};
(gl_window, gl)
}
pub struct GlutinWindowContext {
pub window: winit::window::Window,
pub gl_context: glutin::context::PossiblyCurrentContext,
pub gl_display: glutin::display::Display,
pub gl_surface: glutin::surface::Surface<glutin::surface::WindowSurface>,
}
impl GlutinWindowContext {
// refactor this function to use `glutin-winit` crate eventually.
// preferably add android support at the same time.
#[allow(unsafe_code)]
unsafe fn new(winit_window: winit::window::Window) -> Self {
use glutin::prelude::*;
use raw_window_handle::*;
let raw_display_handle = winit_window.raw_display_handle();
let raw_window_handle = winit_window.raw_window_handle();
#[cfg(target_os = "linux")]
let preference = glutin::display::DisplayApiPreference::EglThenGlx(Box::new(
winit::platform::x11::register_xlib_error_hook,
));
let gl_display = glutin::display::Display::new(raw_display_handle, preference).unwrap();
let config_template = glutin::config::ConfigTemplateBuilder::new()
.compatible_with_native_window(raw_window_handle)
.build();
let config = gl_display
.find_configs(config_template)
.unwrap()
.next()
.unwrap();
let context_attributes =
glutin::context::ContextAttributesBuilder::new().build(Some(raw_window_handle));
// for surface creation.
let (width, height): (u32, u32) = winit_window.inner_size().into();
let surface_attributes =
glutin::surface::SurfaceAttributesBuilder::<glutin::surface::WindowSurface>::new()
.build(
raw_window_handle,
std::num::NonZeroU32::new(width).unwrap(),
std::num::NonZeroU32::new(height).unwrap(),
);
// start creating the gl objects
let gl_context = gl_display
.create_context(&config, &context_attributes)
.unwrap();
let gl_surface = gl_display
.create_window_surface(&config, &surface_attributes)
.unwrap();
let gl_context = gl_context.make_current(&gl_surface).unwrap();
gl_surface
.set_swap_interval(
&gl_context,
glutin::surface::SwapInterval::Wait(std::num::NonZeroU32::new(1).unwrap()),
)
.unwrap();
GlutinWindowContext {
window: winit_window,
gl_context,
gl_display,
gl_surface,
}
}
pub fn window(&self) -> &winit::window::Window {
&self.window
}
pub fn resize(&self, physical_size: winit::dpi::PhysicalSize<u32>) {
use glutin::surface::GlSurface;
self.gl_surface.resize(
&self.gl_context,
physical_size.width.try_into().unwrap(),
physical_size.height.try_into().unwrap(),
);
}
pub fn swap_buffers(&self) -> glutin::error::Result<()> {
use glutin::surface::GlSurface;
self.gl_surface.swap_buffers(&self.gl_context)
}
fn get_proc_address(&self, addr: &std::ffi::CStr) -> *const std::ffi::c_void {
use glutin::display::GlDisplay;
self.gl_display.get_proc_address(addr)
}
pub fn get_focused_monitor(&self) -> Option<winit::monitor::MonitorHandle> {
let pointer = self.query_pointer();
let mut monitors = self.window.available_monitors().filter(|monitor| {
let position = monitor.position();
let size = monitor.size();
let x_ok = position.x <= pointer.0 && pointer.0 < (position.x + size.width as i32);
let y_ok = position.y <= pointer.1 && pointer.1 < (position.y + size.height as i32);
x_ok && y_ok
});
monitors.next()
}
fn query_pointer(&self) -> (i32, i32) {
let raw_window_handle = self.window().raw_window_handle();
let raw_display_handle = self.window().raw_display_handle();
let connection = if let RawDisplayHandle::Xlib(raw) = raw_display_handle {
raw.display
} else {
panic!("(Connection) We only support X.org over Xlib")
};
let window = if let RawWindowHandle::Xlib(raw) = raw_window_handle {
raw.window
} else {
panic!("(Window) We only support X.org over Xlib")
};
let mut r: x11::xlib::Window = Default::default();
let mut c: x11::xlib::Window = Default::default();
let mut x: i32 = Default::default();
let mut y: i32 = Default::default();
let mut rx: i32 = Default::default();
let mut ry: i32 = Default::default();
let mut m: u32 = Default::default();
let ptr_r: *mut x11::xlib::Window = &mut r;
let ptr_c: *mut x11::xlib::Window = &mut c;
let ptr_x: *mut i32 = &mut x;
let ptr_y: *mut i32 = &mut y;
let ptr_rx: *mut i32 = &mut rx;
let ptr_ry: *mut i32 = &mut ry;
let ptr_m: *mut u32 = &mut m;
unsafe {
x11::xlib::XQueryPointer(
connection as *mut _XDisplay,
window,
ptr_r,
ptr_c,
ptr_rx,
ptr_ry,
ptr_x,
ptr_y,
ptr_m,
);
}
(rx, ry)
}
}
I'm surprised that it works in your case.
If you want transparency to GlxThanEgl
and please, pass x11_visual
to winit, check out glutin-winit
on how to do that.
EGL on X11 doesn't support transparency in general. It's a mesa bug, not sure how it worked.
I found that it was more stable with EglThanGlx, not sure why, but that's why I changed it. But it runs fine now.
In case it was a mesa bug it might be fixed then, because it supports transparency just fine. I'm not sure what picom
uses though (probably glx).
However, it still gets Some(false). If I explicitly state that I want with_transparency(true)
, it becomes Some(true)
.
Isn't this config template only for filtering?
With EglThanGlx and with_transparency(true)
it simply crashed on the unwrap, so it's a progress.
I still had problems with this so I made some tests:
I use this WindowBuilder:
WindowBuilder::new().with_transparent(true)...
Testing
Scenario 1:
DisplayApiPreference::Egl
let config_template = glutin::config::ConfigTemplateBuilder::new()
.compatible_with_native_window(raw_window_handle)
.build();
+ Works on intel iGPU
- Doesn't work on Nvidia dGPU (Bad match)
Scenario 2:
DisplayApiPreference::Egl
let config_template = glutin::config::ConfigTemplateBuilder::new()
+ .with_transparency(true)
.compatible_with_native_window(raw_window_handle)
.build();
- Doesn't work on intel iGPU (No config found)
+ Works on Nvidia dGPU
Scenario 3:
DisplayApiPreference::Glx
let config_template = glutin::config::ConfigTemplateBuilder::new()
.compatible_with_native_window(raw_window_handle)
.build();
+ Works on Intel iGPU
- Doesn't work on Nvidia (GLXBadDrawable)
Scenario 4:
DisplayApiPreference::Glx
let config_template = glutin::config::ConfigTemplateBuilder::new()
+ .with_transparency(true)
.compatible_with_native_window(raw_window_handle)
.build();
+ Works on Intel iGPU
- Doesn't work on Nvidia dGPU (GLXBadDrawable)
Workaround
It seems Egl is the most stable backend. It supports transparency, but on Intel the gl_config somehow doesn't tell us that.
I ended up using glutin-winit and I wrote a good config selector. Unfortunately, it's still possible on Intel with Egl that the transparency won't work since we cannot guarantee it based on the config.
Here's my config selector:
let (window, gl_config) = glutin_winit::DisplayBuilder::new()
.with_window_builder(Some(window_builder.clone()))
.build(event_loop, template_builder, |configs| {
// Find the config with the maximum number of samples
configs
.reduce(|acc, current| {
let is_current_transparent = current.supports_transparency().unwrap_or(false);
let is_acc_transparent = acc.supports_transparency().unwrap_or(false);
let gain_bigger_samples = current.num_samples() > acc.num_samples();
let case_transparency_is_not_supported =
!is_acc_transparent && !is_current_transparent && gain_bigger_samples;
let case_transparency_is_supported =
is_acc_transparent && is_current_transparent && gain_bigger_samples;
let case_transparency_become_supported =
!is_acc_transparent && is_current_transparent;
let is_current_better = case_transparency_become_supported
|| case_transparency_is_supported
|| case_transparency_is_not_supported;
if is_current_better {
current
} else {
acc
}
})
.unwrap()
})
.unwrap();