Oolite on HDR Displays

News and discussion of the PC port of Oolite.

Moderators: winston, another_commander

another_commander
Quite Grand Sub-Admiral
Quite Grand Sub-Admiral
Posts: 6916
Joined: Wed Feb 28, 2007 7:54 am

Re: Oolite on HDR Displays

Post by another_commander »

Continuing the discussion from this post in the alternative binary distribution thread: viewtopic.php?p=301844#p301844

@Commander_X: OK, I will need your help with this. I have prepared a test exe with checkpoints similar to the one I made for phkb, but this time it includes also checkpoints for the old Windows API (pre-24H2) HDR detection, since your VM is Windows 10. The build is here: https://www.filemail.com/d/ukmhodxvnyccxfj

You will have to install the latest test pre-release cf7e686 from github and replace its executable with this. Then run it and post the log. Be alert for errors like "Failed at checkpoint #x".
Commander_X
---- E L I T E ----
---- E L I T E ----
Posts: 705
Joined: Sat Aug 09, 2014 4:16 pm

Re: Oolite on HDR Displays

Post by Commander_X »

another_commander wrote: Sat Jul 26, 2025 8:02 pm
Continuing the discussion from this post in the alternative binary distribution thread: viewtopic.php?p=301844#p301844

@Commander_X: OK, I will need your help with this. I have prepared a test exe with checkpoints similar to the one I made for phkb, but this time it includes also checkpoints for the old Windows API (pre-24H2) HDR detection, since your VM is Windows 10. The build is here: https://www.filemail.com/d/ukmhodxvnyccxfj

You will have to install the latest test pre-release cf7e686 from github and replace its executable with this. Then run it and post the log. Be alert for errors like "Failed at checkpoint #x".
Attaching here the latest log.

Code: Select all

Opening log for Oolite version 1.91 (x86-64 test release) under Windows 10.0.19044.1288  64-bit at 2025-07-27 13:05:52 -0400.
AMD Ryzen 7 5700G with Radeon Graphics          6 processors detected. System RAM: 24575 MB (free: 21527 MB).
Build options: OpenAL, GLSL shaders, new planets, JavaScript console support, OXP verifier, localization tools, debug GraphViz support, JavaScript profiling.

Note that the contents of the log file can be adjusted by editing logcontrol.plist.

13:05:52.014 [process.args]: Startup command: R:\g\oo.xtratst\oolite.app\oolite.exe -hdr 
13:05:52.064 [display.initGL]: V-Sync requested.
13:05:52.064 [display.mode.list.native]: Windows native resolution detected: 1920 x 1080
13:05:52.064 [display.initGL]: Trying 16-bpcc, 24-bit depth buffer
13:05:52.370 [gamma.set.failed]: ----- WARNING: Could not set gamma: Gamma ramp manipulation not supported
13:05:52.370 [display.initGL]: Achieved color / depth buffer sizes (bits):
13:05:52.371 [display.initGL]: Red: 16
13:05:52.371 [display.initGL]: Green: 16
13:05:52.372 [display.initGL]: Blue: 16
13:05:52.372 [display.initGL]: Alpha: 16
13:05:52.372 [display.initGL]: Depth Buffer: 24
13:05:52.372 [display.initGL]: Pixel type is float : 1
13:05:52.372 [display.initGL]: Pixel format index: 89
13:05:52.511 [joystick.init]: Number of joysticks detected: 0
13:05:52.511 [rendering.opengl.version]: OpenGL renderer version: 4.6.0 ("4.6.0 NVIDIA 566.03"). Vendor: "NVIDIA Corporation". Renderer: "NVIDIA GeForce RTX 2070 SUPER/PCIe/SSE2".
13:05:52.511 [rendering.opengl.extensions]: OpenGL extensions (402):
GL_NV_blend_square, GL_KHR_parallel_shader_compile, GL_ARB_map_buffer_range, GL_ARB_instanced_arrays, GL_ARB_shader_viewport_layer_array, GL_ARB_direct_state_access, GL_NV_memory_attachment, GL_ARB_clear_texture, GL_EXT_texture_compression_rgtc, GL_EXT_post_depth_coverage, GL_NV_texture_compression_vtc, GL_EXT_texture_storage, GL_NV_fragment_program, GL_ARB_query_buffer_object, GL_EXT_texture_shared_exponent, GL_EXT_sparse_texture2, GL_ARB_uniform_buffer_object, GL_EXT_texture_array, GL_ARB_shader_draw_parameters, GL_NV_mesh_shader, GL_ARB_shading_language_include, GL_ARB_separate_shader_objects, GL_NV_fragment_shader_interlock, GL_EXT_packed_pixels, GL_ARB_texture_query_levels, GL_ARB_fragment_layer_viewport, GL_NV_fence, GL_ARB_explicit_uniform_location, GL_ARB_stencil_texturing, GL_NV_conservative_raster, GL_EXT_gpu_program_parameters, GL_EXT_vertex_array, GL_EXT_provoking_vertex, GL_NV_draw_vulkan_image, GL_ARB_texture_view, GL_ARB_ES3_1_compatibility, GL_NV_texgen_reflection, GL_EXT_multi_draw_arrays, GL_NVX_gpu_multicast2, GL_ARB_clear_buffer_object, GL_EXT_texture_object, GL_EXT_packed_float, GL_EXT_texture_filter_anisotropic, GL_ARB_get_program_binary, GL_ARB_half_float_vertex, GL_ARB_program_interface_query, GL_EXT_bindable_uniform, GL_ARB_multi_draw_indirect, GL_NV_texture_multisample, GL_ARB_texture_buffer_object, GL_ARB_gpu_shader_fp64, GL_EXT_blend_minmax, GL_ARB_vertex_attrib_64bit, GL_ARB_texture_query_lod, GL_ARB_compressed_texture_pixel_storage, GL_EXT_texture_integer, GL_ARB_texture_non_power_of_two, GL_EXT_texture_compression_s3tc, GL_ARB_texture_stencil8, GL_KHR_no_error, GL_ARB_texture_mirror_clamp_to_edge, GL_ARB_framebuffer_no_attachments, GL_NV_parameter_buffer_object2, GL_ARB_shading_language_420pack, GL_ARB_sample_locations, GL_NV_texture_rectangle, GL_KHR_robustness, GL_SGIX_shadow, GL_EXT_vertex_array_bgra, GL_EXT_depth_bounds_test, GL_NV_conservative_raster_pre_snap, GL_NV_vertex_array_range2, GL_ARB_shader_texture_image_samples, GL_NV_vertex_program2, GL_ARB_texture_compression_bptc, GL_NV_vertex_program3, GL_EXT_stencil_wrap, GL_EXT_separate_shader_objects, GL_NV_shader_atomic_float, GL_NV_scissor_exclusive, GL_NV_packed_depth_stencil, GL_ARB_texture_gather, GL_ARB_shader_image_size, GL_NV_uniform_buffer_std430_layout, GL_EXT_texture_cube_map, GL_EXT_shader_image_load_formatted, GL_NV_register_combiners2, GL_NV_half_float, GL_ARB_map_buffer_alignment, GL_SUN_slice_accum, GL_ARB_provoking_vertex, GL_NV_shader_thread_shuffle, GL_ARB_tessellation_shader, GL_NV_stereo_view_rendering, GL_EXT_direct_state_access, GL_NVX_multigpu_info, GL_ARB_texture_rg, GL_NV_texture_shader2, GL_NV_texture_shader3, GL_ARB_bindless_texture, GL_SGIX_depth_texture, GL_NVX_linked_gpu_multicast, GL_NV_texture_env_combine4, GL_EXT_polygon_offset_clamp, GL_EXT_draw_range_elements, GL_EXT_draw_buffers2, GL_EXT_texture_filter_minmax, GL_ARB_transform_feedback2, GL_ARB_geometry_shader4, GL_ARB_fragment_coord_conventions, GL_ARB_transform_feedback3, GL_ARB_shader_precision, GL_NV_gpu_program_fp64, GL_NV_blend_equation_advanced_coherent, GL_NV_shader_atomic_counters, GL_ARB_get_texture_sub_image, GL_EXT_blend_color, GL_ARB_vertex_array_object, GL_NV_query_resource, GL_ATI_draw_buffers, GL_ARB_texture_mirrored_repeat, GL_EXT_stencil_two_side, GL_NV_shader_texture_footprint, GL_ARB_timer_query, WGL_EXT_swap_control, GL_NV_parameter_buffer_object, GL_EXT_texture_sRGB_decode, GL_NV_transform_feedback, GL_EXT_timer_query, GL_EXT_texture_edge_clamp, GL_EXT_shader_image_load_store, GL_NV_gpu_program4_1, GL_IBM_rasterpos_clip, GL_NV_framebuffer_multisample_coverage, GL_ARB_base_instance, GL_ARB_texture_float, GL_ARB_imaging, GL_ARB_draw_elements_base_vertex, GL_EXT_texture3D, GL_ARB_cull_distance, GL_EXT_packed_depth_stencil, GL_EXT_compiled_vertex_array, GL_ARB_texture_cube_map, GL_NV_uniform_buffer_unified_memory, GL_NV_primitive_restart, GL_EXT_blend_subtract, GL_EXT_separate_specular_color, GL_S3_s3tc, GL_NV_fragment_program_option, GL_EXTX_framebuffer_mixed_formats, GL_ARB_texture_compression, GL_ARB_gl_spirv, GL_ARB_texture_compression_rgtc, GL_ARB_texture_filter_anisotropic, GL_ARB_ES2_compatibility, GL_NV_shader_subgroup_partitioned, GL_ARB_shader_ballot, GL_NV_gpu_multicast, GL_NV_shader_atomic_float64, GL_NVX_blend_equation_advanced_multi_draw_buffers, GL_ARB_depth_buffer_float, GL_NV_light_max_exponent, GL_ARB_vertex_buffer_object, GL_KHR_blend_equation_advanced, GL_NV_shader_atomic_int64, GL_ARB_shading_language_100, GL_NV_shader_storage_buffer_object, GL_ARB_texture_env_add, GL_ARB_fragment_program, GL_NV_copy_depth_to_color, GL_ARB_sparse_buffer, GL_EXT_import_sync_object, GL_EXT_texture_swizzle, GL_ARB_shadow, GL_NV_conservative_raster_pre_snap_triangles, GL_ARB_texture_filter_minmax, GL_NV_shading_rate_image, GL_NV_copy_image, GL_NVX_progress_fence, GL_NV_clip_space_w_scaling, GL_ARB_shader_texture_lod, GL_ARB_clip_control, GL_NV_conservative_raster_dilate, GL_ARB_texture_multisample, GL_EXT_texture_env_combine, GL_ARB_sync, GL_ATI_texture_mirror_once, GL_ARB_robustness, GL_ARB_compatibility, GL_EXT_texture_compression_dxt1, GL_NV_gpu_program4, GL_NV_gpu_program5, GL_ARB_transform_feedback_overflow_query, GL_NV_vertex_array_range, GL_ARB_multitexture, GL_EXT_transform_feedback2, GL_NV_vertex_program2_option, GL_KHR_shader_subgroup, GL_ARB_buffer_storage, GL_NV_compute_program5, GL_NV_vertex_program1_1, GL_NV_gpu_program5_mem_extended, GL_NV_conservative_raster_underestimation, GL_EXT_shadow_funcs, GL_ARB_occlusion_query, GL_ARB_fragment_program_shadow, GL_NVX_nvenc_interop, GL_NV_vertex_buffer_unified_memory, GL_ARB_texture_barrier, GL_EXT_geometry_shader4, GL_EXT_memory_object_win32, GL_ARB_texture_env_dot3, GL_ARB_seamless_cubemap_per_texture, GL_ARB_multisample, GL_ARB_copy_image, GL_ARB_gpu_shader_int64, GL_ARB_color_buffer_float, GL_EXT_texture_env_add, GL_ARB_ES3_compatibility, GL_ARB_point_parameters, GL_ARB_sampler_objects, GL_ARB_transform_feedback_instanced, GL_ARB_invalidate_subdata, GL_KTX_buffer_region, GL_NV_vertex_attrib_integer_64bit, GL_NV_bindless_multi_draw_indirect, GL_NV_sample_mask_override_coverage, GL_NVX_gpu_memory_info, GL_EXT_framebuffer_object, GL_NV_gpu_shader5, GL_ARB_texture_rgb10_a2ui, GL_NV_shader_atomic_fp16_vector, GL_NV_ES1_1_compatibility, GL_ARB_texture_border_clamp, GL_NV_alpha_to_coverage_dither_control, GL_ARB_shading_language_packing, GL_NV_fragment_shader_barycentric, GL_EXT_bgra, GL_ATI_texture_float, GL_ARB_occlusion_query2, GL_ARB_shader_clock, GL_ARB_texture_env_crossbar, GL_NV_shader_buffer_load, GL_NV_feature_query, GL_NV_depth_clamp, GL_ARB_derivative_control, GL_ARB_conservative_depth, GL_AMD_vertex_shader_layer, GL_EXT_win32_keyed_mutex, GL_AMD_multi_draw_indirect, GL_ARB_shader_atomic_counters, GL_ARB_texture_env_combine, GL_EXT_framebuffer_multisample, GL_NV_occlusion_query, GL_EXT_Cg_shader, GL_NV_texture_barrier, GL_NV_path_rendering, GL_ARB_ES3_2_compatibility, GL_ARB_draw_buffers, GL_SGIS_generate_mipmap, GL_NV_path_rendering_shared_edge, GL_ARB_texture_buffer_object_rgb32, GL_EXT_window_rectangles, GL_NVX_conditional_render, GL_NV_register_combiners, GL_EXT_texture_sRGB_R8, GL_EXT_framebuffer_blit, GL_ARB_vertex_array_bgra, GL_NV_multisample_coverage, GL_EXT_texture_shadow_lod, GL_EXT_fog_coord, GL_ARB_window_pos, GL_NV_fill_rectangle, GL_ARB_half_float_pixel, GL_SGIS_texture_lod, GL_IBM_texture_mirrored_repeat, GL_EXT_texture_lod, GL_EXT_blend_equation_separate, GL_OVR_multiview2, GL_ARB_point_sprite, GL_NV_gpu_program_multiview, GL_ARB_parallel_shader_compile, GL_NV_fragment_program2, GL_ARB_shader_group_vote, GL_ARB_fragment_shader, GL_NV_blend_minmax_factor, GL_ARB_framebuffer_sRGB, GL_EXT_memory_object, GL_ARB_shader_objects, GL_NV_internalformat_sample_query, GL_WIN_swap_hint, GL_ARB_polygon_offset_clamp, GL_EXT_framebuffer_multisample_blit_scaled, GL_ARB_sparse_texture_clamp, GL_ARB_blend_func_extended, GL_ARB_shader_subroutine, GL_NV_pixel_data_range, GL_NV_viewport_swizzle, GL_NV_memory_object_sparse, GL_ARB_sparse_texture, GL_ARB_multi_bind, GL_KHR_debug, GL_EXT_multiview_timer_query, GL_NV_representative_fragment_test, GL_NV_framebuffer_mixed_samples, GL_ARB_transpose_matrix, GL_EXT_texture_compression_latc, GL_ARB_texture_cube_map_array, GL_NV_ES3_1_compatibility, GL_ARB_texture_buffer_range, GL_ARB_robust_buffer_access_behavior, GL_ARB_texture_storage_multisample, GL_EXT_texture_env_dot3, GL_NV_compute_shader_derivatives, GL_ARB_vertex_type_10f_11f_11f_rev, GL_EXT_texture_sRGB, GL_EXT_secondary_color, GL_EXT_point_parameters, GL_ARB_shader_image_load_store, GL_EXT_pixel_buffer_object, GL_ARB_explicit_attrib_location, GL_ARB_internalformat_query2, GL_ARB_seamless_cube_map, GL_ARB_draw_instanced, GL_ARB_draw_buffers_blend, GL_NV_sample_locations, GL_ARB_post_depth_coverage, GL_NV_fragment_coverage_to_color, GL_EXT_draw_instanced, GL_ARB_pipeline_statistics_query, GL_NV_texture_rectangle_compressed, GL_ARB_framebuffer_object, GL_ARB_internalformat_query, GL_OVR_multiview, GL_EXT_texture_mirror_clamp, GL_ARB_texture_rectangle, GL_ARB_gpu_shader5, GL_EXT_gpu_shader4, GL_ARB_compute_shader, GL_AMD_seamless_cubemap_per_texture, GL_NV_fog_distance, GL_EXT_multiview_texture_multisample, GL_ARB_spirv_extensions, GL_ARB_depth_clamp, GL_KHR_robust_buffer_access_behavior, GL_NV_texture_shader, GL_NV_shader_thread_group, GL_NV_float_buffer, GL_ARB_vertex_type_2_10_10_10_rev, GL_KHR_blend_equation_advanced_coherent, GL_AMD_vertex_shader_viewport_index, GL_ARB_shader_storage_buffer_object, GL_NV_conditional_render, GL_ARB_vertex_program, GL_ARB_enhanced_layouts, GL_ARB_compute_variable_group_size, GL_NV_bindless_texture, GL_ARB_draw_indirect, GL_ARB_arrays_of_arrays, GL_NV_multisample_filter_hint, GL_ARB_indirect_parameters, GL_ARB_viewport_array, GL_NV_point_sprite, GL_ARB_texture_storage, GL_NV_geometry_shader4, GL_EXT_semaphore, GL_ARB_texture_swizzle, GL_ARB_sparse_texture2, GL_EXT_texture_lod_bias, GL_EXT_semaphore_win32, GL_EXT_abgr, GL_NV_viewport_array2, GL_ARB_vertex_shader, GL_ARB_vertex_attrib_binding, GL_NV_transform_feedback2, GL_ARB_depth_texture, GL_NV_query_resource_tag, GL_NV_vertex_program, GL_NV_blend_equation_advanced, GL_EXT_framebuffer_sRGB, GL_ARB_shader_atomic_counter_ops, GL_ARB_copy_buffer, GL_NV_depth_buffer_float, GL_EXT_raster_multisample, GL_ARB_pixel_buffer_object, GL_NV_explicit_multisample, GL_EXT_texture_buffer_object, GL_EXT_blend_func_separate, GL_ARB_fragment_shader_interlock, GL_NV_command_list, GL_NV_geometry_shader_passthrough, GL_NV_draw_texture, GL_EXT_vertex_attrib_64bit, GL_NV_timeline_semaphore, GL_EXT_rescale_normal, GL_ARB_sample_shading, GL_ARB_shader_bit_encoding, GL_KHR_context_flush_control, GL_EXT_shader_integer_mix, GL_NV_bindless_multi_draw_indirect_count, GL_ARB_debug_output, GL_ARB_conditional_render_inverted
13:05:52.515 [rendering.opengl.shader.support]: Shaders are supported.
13:05:52.538 [searchPaths.dumpAll]: Resource paths: 
    Resources
13:05:52.541 [MSAA.setup]: Multisample anti-aliasing not requested.
13:05:52.677 [shipData.load.begin]: Loading ship data.
13:05:53.040 [gameView.isOutputDisplayHDREnabled]: ----- WARNING: Received 0x80070057 while attempting to detect HDR mode using Advanced Color Info 2 API. Retrying detection using legacy API.
13:05:53.040 [unclassified.MyOpenGLView]: Failed at checkpoint #1. monitorDevicePath: \\?\DISPLAY#GSM5B71#4&1991b1ff&1&UID4194565#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}, wcsPrimaryDeviceID: \\?\DISPLAY#GSM5B55#4&1991b1ff&1&UID4194562#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
13:05:53.040 [gameView.isOutputDisplayHDREnabled]: ----- WARNING: Received 0x80070057 while attempting to detect HDR mode using Advanced Color Info 2 API. Retrying detection using legacy API.
13:05:53.040 [unclassified.MyOpenGLView]: Failed at checkpoint #1. monitorDevicePath: \\?\DISPLAY#AUS24A3#4&1991b1ff&1&UID4194560#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}, wcsPrimaryDeviceID: \\?\DISPLAY#GSM5B55#4&1991b1ff&1&UID4194562#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
13:05:53.040 [gameView.isOutputDisplayHDREnabled]: HDR display output requested - checking availability: NO
13:05:58.468 [display.initGL]: Requested a new surface of 1280 x 720, windowed.
13:05:58.498 [display.initGL]: Created a new surface of 1280 x 720, windowed.
13:05:58.521 [startup.complete]: ========== Loading complete in 6.51 seconds. ==========
13:06:04.583 [exit.context]: Exiting: Exit Game selected on start screen.
13:06:04.586 [gameController.exitApp]: .GNUstepDefaults synchronized.

Closing log at 2025-07-27 13:06:04 -0400.
I'm not sure how to read the failure checkpoint info, but while the second (AUS24A3) doesn't have HDR enabled, the first one (GSM5B71) does, and it's where the Oolilte window opens with HDR enabled.
another_commander
Quite Grand Sub-Admiral
Quite Grand Sub-Admiral
Posts: 6916
Joined: Wed Feb 28, 2007 7:54 am

Re: Oolite on HDR Displays

Post by another_commander »

Interesting, I think the VM may be doing something bad here... Let's go through what is happening:

First off, as per your dxdiag data your primary monitor is indeed the GSM5B71 with HDR support enabled. Now, this is what Oolite gets back from Windows when requesting the ID of the monitor that Windows sees as primary:

\\?\DISPLAY#GSM5B55#4&1991b1ff&1&UID4194562#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}

We don't care too much about the entirety of the string, we just focus on the part that reads DISPLAY#GSM5B55. This is wrong. It should read DISPLAY#GSM5B71 and it is the OS that is returning this value so Oolite has no control over it. In your dxdiag file there is no mention of any GSM5B55 anywhere.

When we check for HDR capabilities, we first request the ID of the primary monitor using the EnumDisplayDevices API and then, for every monitor in the system, we compare its ID (as reported by the newer DisplayConfig Windows API) to the primary monitor's one that we requested earlier. We effectively use the ID string from the two methods as a way to bridge their information and combine it. When the primary monitor is found, its properties are queried and the final judgement on HDR support is made by Oolite. Only in this case we fail at comparing ID strings for both monitors. So Oolite does not see a primary one. This is why you are getting the warning message. For reference, the strings returned from the DisplayConfig API are:

Code: Select all

\\?\DISPLAY#GSM5B71#4&1991b1ff&1&UID4194565#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
\\?\DISPLAY#AUS24A3#4&1991b1ff&1&UID4194560#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
which contain the correct references to the two monitors present.

I will try to find information about the value returned by Windows as the monitor ID to see if I may have missed something, but I highly doubt it. I am more inclined to think that the VM is getting it messed up somewhere. I would also suggest investigating the possibility of using a different Windows VM, as the one you have installed is a very old Windows 10 version.
Commander_X
---- E L I T E ----
---- E L I T E ----
Posts: 705
Joined: Sat Aug 09, 2014 4:16 pm

Re: Oolite on HDR Displays

Post by Commander_X »

I looked through the Device Manager at the monitors registered with WIndows. "GSM5B55" monitor seems to be the disabled monitor (reported as "LG FULL HD") also fed by RTX 2070 SUPER (my third monitor, non-HDR). Incidentally, that's also the (Linux) monitor (which is running through iGPU) where the VM is launched from (active over iGPU in the host OS).
I totally agree with you that this VM, besides hosting an old version of Windows, has its quirks. But anything less than a new version of Slackware is very likely to trigger any "fix it, although ain't really broken" act on my part. Its main purpose is to act for GPU passthrough, and it does that quite well.
I tried to upgrade the VM sometimes back (when I was trying to look into getting rid of these quirks), but that didn't seem to do any good at that time. I'd guess my best bet will be a totally new VM, but as I said, that won't happen too soon.
another_commander
Quite Grand Sub-Admiral
Quite Grand Sub-Admiral
Posts: 6916
Joined: Wed Feb 28, 2007 7:54 am

Re: Oolite on HDR Displays

Post by another_commander »

No worries, but maybe we can still save this. Can you try running this little utility I just found on github and compiled? It will reveal all display adapters and monitors and - here is the good part - the state flags associated with each monitor. It would be interesting to see what exactly it reports for the disabled primary LG Full HD.

Link: https://www.filemail.com/d/urmcpsulrsujkbd
another_commander
Quite Grand Sub-Admiral
Quite Grand Sub-Admiral
Posts: 6916
Joined: Wed Feb 28, 2007 7:54 am

Re: Oolite on HDR Displays

Post by another_commander »

I have one more test build to test if you want. @phkb, you may want to test this one as well as I have changed the detection logic a bit.

I simplified the detection by not caring about the primary device ID at all. Rather than trying to get that and failing when particular VM setups are involved, I am now getting the device ID of the monitor the game window is located when we start up. This should be the primary anyway, but even if it isn't it doesn't matter. We are just getting the ID of the monitor the game is launching on. That is what gets checked against the DisplayConfig API data. If that monitor supports HDR we are good.

Download for the test build: https://www.filemail.com/d/pibivdlijhflnly
Commander_X
---- E L I T E ----
---- E L I T E ----
Posts: 705
Joined: Sat Aug 09, 2014 4:16 pm

Re: Oolite on HDR Displays

Post by Commander_X »

Nope, it seems the method still detected the disabled monitor. Log's second half for confirmation:

Code: Select all

08:43:35.117 [dataCache.notFound]: No data cache found, starting from scratch.
08:43:35.118 [searchPaths.dumpAll]: Resource paths: 
    Resources
08:43:35.140 [MSAA.setup]: Multisample anti-aliasing not requested.
08:43:35.356 [shipData.load.begin]: Loading ship data.
08:43:35.994 [unclassified.MyOpenGLView]: We are running on monitor \\.\DISPLAY1
08:43:35.997 [unclassified.MyOpenGLView]: Our monitor's ID is \\?\DISPLAY#GSM5B55#4&1991b1ff&1&UID4194562#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
08:43:35.997 [gameView.isOutputDisplayHDREnabled]: ----- WARNING: Received 0x80070057 while attempting to detect HDR mode using Advanced Color Info 2 API. Retrying detection using legacy API.
08:43:35.997 [gameView.isOutputDisplayHDREnabled]: ----- WARNING: Received 0x80070057 while attempting to detect HDR mode using Advanced Color Info 2 API. Retrying detection using legacy API.
08:43:35.997 [gameView.isOutputDisplayHDREnabled]: HDR display output requested - checking availability: NO
08:43:45.786 [display.initGL]: Requested a new surface of 1280 x 720, windowed.
08:43:45.833 [display.initGL]: Created a new surface of 1280 x 720, windowed.
08:43:45.851 [startup.complete]: ========== Loading complete in 11.43 seconds. ==========
08:43:47.941 [exit.context]: Exiting: Exit Game selected on start screen.
08:43:47.944 [gameController.exitApp]: .GNUstepDefaults synchronized.

Closing log at 2025-07-28 08:43:47 -0400.
I'm not sure if it's relevant, but I have a free Windows app (ControlMyMonitor) I used some times back to compare with Linux readings on some DDC/CI concerns I had. This app is reporting my two enabled monitors as \\.\DISPLAY1\Monitor1 and \\.\DISPLAY2\Monitor1.
another_commander
Quite Grand Sub-Admiral
Quite Grand Sub-Admiral
Posts: 6916
Joined: Wed Feb 28, 2007 7:54 am

Re: Oolite on HDR Displays

Post by another_commander »

Oh, that is disappointing. Just to be sure, in the VM under Windows settings->Display the GSM is marked as the primary monitor, correct?

I guess we'll have to live with this mis-detection under certain VM setups, I have run out of ideas. If anyone thinks of something else we could try, feel free to provide suggestions.
Commander_X
---- E L I T E ----
---- E L I T E ----
Posts: 705
Joined: Sat Aug 09, 2014 4:16 pm

Re: Oolite on HDR Displays

Post by Commander_X »

another_commander wrote: Mon Jul 28, 2025 1:05 pm
Oh, that is disappointing. Just to be sure, in the VM under Windows settings->Display the GSM is marked as the primary monitor, correct?
[...]
Yes, the "GSM5B71" (not the detected "GSM5B55") is the primary monitor. Somehow, though, both Windows Settings and NVidia Control Panel report it as display no. 2. But it's marked as primary in both places.
A reminder is that "GSM5B71" was the monitorDevicePath (which seems to address the correct device) while "GSM5B55" was the wcsPrimaryDeviceID for both "device paths" detected.

One other thing I noticed, is that although both Windows Settings and NVidia Control Panel show only 2 monitors as available for the graphics card (and I can check for the 2 disabled in Windows Settings/Display/Advanced display settings/Choose display), Windows' hardware manager shows all 4 monitor devices available. In hardware manager there is no disable option for the monitors, only uninstall. All 4 monitors listed are of the Generic PnP Monitor kind, with common driver in "monitor.inf".
another_commander
Quite Grand Sub-Admiral
Quite Grand Sub-Admiral
Posts: 6916
Joined: Wed Feb 28, 2007 7:54 am

Re: Oolite on HDR Displays

Post by another_commander »

Can you please send the output of the little utility linked a few posts up? I think it would really help with understanding what is happening.
Commander_X
---- E L I T E ----
---- E L I T E ----
Posts: 705
Joined: Sat Aug 09, 2014 4:16 pm

Re: Oolite on HDR Displays

Post by Commander_X »

another_commander wrote: Mon Jul 28, 2025 1:56 pm
Can you please send the output of the little utility linked a few posts up? I think it would really help with understanding what is happening.
I guess the best outputs related with IDing the monitors are these:

Code: Select all

Monitor Device Name: "\\.\DISPLAY1\Monitor1"
Monitor Name: "27GL650F"
Serial Number: ""
Adapter Name: "NVIDIA GeForce RTX 2070 SUPER"
Monitor ID: "MONITOR\GSM5B71\{4d36e96e-e325-11ce-bfc1-08002be10318}\0014"
Short Monitor ID: "GSM5B71"



Monitor Device Name: "\\.\DISPLAY2\Monitor1"
Monitor Name: "MG248"
Serial Number: "J4LMQS035382"
Adapter Name: "NVIDIA GeForce RTX 2070 SUPER"
Monitor ID: "MONITOR\AUS24A3\{4d36e96e-e325-11ce-bfc1-08002be10318}\0015"
Short Monitor ID: "AUS24A3"

This is the most detailed set of ID info that can be taken from the app, as it's mostly concerned with the values for the "VCP Features".
another_commander
Quite Grand Sub-Admiral
Quite Grand Sub-Admiral
Posts: 6916
Joined: Wed Feb 28, 2007 7:54 am

Re: Oolite on HDR Displays

Post by another_commander »

Thanks but I was actually talking about this one here: https://www.filemail.com/d/urmcpsulrsujkbd

Run it in a cmd window and you can also send the output to a file like

Code: Select all

enumdisp.exe > enumdispResult.txt
Commander_X
---- E L I T E ----
---- E L I T E ----
Posts: 705
Joined: Sat Aug 09, 2014 4:16 pm

Re: Oolite on HDR Displays

Post by Commander_X »

another_commander wrote: Mon Jul 28, 2025 7:33 pm
Thanks but I was actually talking about this one here: https://www.filemail.com/d/urmcpsulrsujkbd

Run it in a cmd window and you can also send the output to a file like

Code: Select all

enumdisp.exe > enumdispResult.txt
Sorry, I thought it was about the little utility I mentioned.
Here's the output of the one you linked:

Code: Select all

EnumDisplayDevices i: 0
cb: 840
DeviceName: \\.\DISPLAY5
DeviceString: Microsoft Basic Display Adapter
StateFlags: 134217728
DeviceID: PCI\VEN_1234&DEV_1111&SUBSYS_11001AF4&REV_02
DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Video\{98750937-E9E3-11EC-9519-806E6F6E6963}\0000
  Attached monitor i: 0 of device 0
  cb: 840
  DeviceName: \\.\DISPLAY5\Monitor0
  DeviceString: Generic PnP Monitor
  StateFlags: 2
  DeviceID: \\?\DISPLAY#RHT1234#4&27b1e55b&0&UID0#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
  DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0000
EnumDisplayDevices i: 1
cb: 840
DeviceName: \\.\DISPLAY1
DeviceString: NVIDIA GeForce RTX 2070 SUPER
StateFlags: 5
DeviceID: PCI\VEN_10DE&DEV_1E84&SUBSYS_87081043&REV_A1
DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Video\{09F77703-97E3-11EF-95DE-F072755928E2}\0000
attached to desktop
device primary device
display active
  Attached monitor i: 0 of device 1
  cb: 840
  DeviceName: \\.\DISPLAY1\Monitor0
  DeviceString: Generic PnP Monitor
  StateFlags: 2
  DeviceID: \\?\DISPLAY#GSM5B55#4&1991b1ff&1&UID4194562#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
  DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0013
  Attached monitor i: 1 of device 1
  cb: 840
  DeviceName: \\.\DISPLAY1\Monitor1
  DeviceString: Generic PnP Monitor
  StateFlags: 3
  DeviceID: \\?\DISPLAY#GSM5B71#4&1991b1ff&1&UID4194565#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
  DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0014
EnumDisplayDevices i: 2
cb: 840
DeviceName: \\.\DISPLAY2
DeviceString: NVIDIA GeForce RTX 2070 SUPER
StateFlags: 1
DeviceID: PCI\VEN_10DE&DEV_1E84&SUBSYS_87081043&REV_A1
DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Video\{09F77703-97E3-11EF-95DE-F072755928E2}\0001
attached to desktop
display active
  Attached monitor i: 0 of device 2
  cb: 840
  DeviceName: \\.\DISPLAY2\Monitor0
  DeviceString: Generic PnP Monitor
  StateFlags: 2
  DeviceID: \\?\DISPLAY#GSM5B55#4&1991b1ff&1&UID4194562#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
  DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0013
  Attached monitor i: 1 of device 2
  cb: 840
  DeviceName: \\.\DISPLAY2\Monitor1
  DeviceString: Generic PnP Monitor
  StateFlags: 3
  DeviceID: \\?\DISPLAY#AUS24A3#4&1991b1ff&1&UID4194560#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
  DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0015
EnumDisplayDevices i: 3
cb: 840
DeviceName: \\.\DISPLAY3
DeviceString: NVIDIA GeForce RTX 2070 SUPER
StateFlags: 0
DeviceID: PCI\VEN_10DE&DEV_1E84&SUBSYS_87081043&REV_A1
DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Video\{09F77703-97E3-11EF-95DE-F072755928E2}\0002
  Attached monitor i: 0 of device 3
  cb: 840
  DeviceName: \\.\DISPLAY3\Monitor0
  DeviceString: Generic PnP Monitor
  StateFlags: 2
  DeviceID: \\?\DISPLAY#GSM5B55#4&1991b1ff&1&UID4194562#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
  DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0013
EnumDisplayDevices i: 4
cb: 840
DeviceName: \\.\DISPLAY4
DeviceString: NVIDIA GeForce RTX 2070 SUPER
StateFlags: 0
DeviceID: PCI\VEN_10DE&DEV_1E84&SUBSYS_87081043&REV_A1
DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Video\{09F77703-97E3-11EF-95DE-F072755928E2}\0003
  Attached monitor i: 0 of device 4
  cb: 840
  DeviceName: \\.\DISPLAY4\Monitor0
  DeviceString: Generic PnP Monitor
  StateFlags: 2
  DeviceID: \\?\DISPLAY#GSM5B55#4&1991b1ff&1&UID4194562#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
  DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0013
EnumDisplayMonitors index 0 \\.\DISPLAY1 y: 0 to 1080 x: 0 to 1920
EnumDisplayMonitors index 1 \\.\DISPLAY2 y: 0 to 1080 x: 1920 to 3840
Whew, quite the messy output! And the horror in noticing the disabled monitor on the first position of each display connected to the RTX card. It's attached to only one connector, and it's actually disabled in the Settings configuration ...
I'm wondering if the StateFlags for displays/monitors reflect somehow their statuses.
another_commander
Quite Grand Sub-Admiral
Quite Grand Sub-Admiral
Posts: 6916
Joined: Wed Feb 28, 2007 7:54 am

Re: Oolite on HDR Displays

Post by another_commander »

Very interesting. Can you please try running this version of the utility? I am testing whether we can distinguish the monitor of interest using its reported stateflags.

Download: https://www.filemail.com/d/zrkqsjnlwwntzkv
Commander_X
---- E L I T E ----
---- E L I T E ----
Posts: 705
Joined: Sat Aug 09, 2014 4:16 pm

Re: Oolite on HDR Displays

Post by Commander_X »

another_commander wrote: Tue Jul 29, 2025 5:23 am
Very interesting. Can you please try running this version of the utility? I am testing whether we can distinguish the monitor of interest using its reported stateflags.

Download: https://www.filemail.com/d/zrkqsjnlwwntzkv
Here are the new results:

Code: Select all

EnumDisplayDevices i: 0
cb: 840
DeviceName: \\.\DISPLAY5
DeviceString: Microsoft Basic Display Adapter
StateFlags: 134217728
DeviceID: PCI\VEN_1234&DEV_1111&SUBSYS_11001AF4&REV_02
DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Video\{98750937-E9E3-11EC-9519-806E6F6E6963}\0000
  Attached monitor i: 0 of device 0
  cb: 840
  DeviceName: \\.\DISPLAY5\Monitor0
  DeviceString: Generic PnP Monitor
  StateFlags: 2
  DeviceID: \\?\DISPLAY#RHT1234#4&27b1e55b&0&UID0#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
  DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0000
EnumDisplayDevices i: 1
cb: 840
DeviceName: \\.\DISPLAY1
DeviceString: NVIDIA GeForce RTX 2070 SUPER
StateFlags: 5
DeviceID: PCI\VEN_10DE&DEV_1E84&SUBSYS_87081043&REV_A1
DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Video\{09F77703-97E3-11EF-95DE-F072755928E2}\0000
attached to desktop
device primary device
display active
  Attached monitor i: 0 of device 1
  cb: 840
  DeviceName: \\.\DISPLAY1\Monitor0
  DeviceString: Generic PnP Monitor
  StateFlags: 2
  DeviceID: \\?\DISPLAY#GSM5B55#4&1991b1ff&1&UID4194562#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
  DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0013
  device primary monitor
  monitor attached to desktop
  Attached monitor i: 1 of device 1
  cb: 840
  DeviceName: \\.\DISPLAY1\Monitor1
  DeviceString: Generic PnP Monitor
  StateFlags: 3
  DeviceID: \\?\DISPLAY#GSM5B71#4&1991b1ff&1&UID4194565#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
  DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0014
  device primary monitor
  monitor attached to desktop
EnumDisplayDevices i: 2
cb: 840
DeviceName: \\.\DISPLAY2
DeviceString: NVIDIA GeForce RTX 2070 SUPER
StateFlags: 1
DeviceID: PCI\VEN_10DE&DEV_1E84&SUBSYS_87081043&REV_A1
DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Video\{09F77703-97E3-11EF-95DE-F072755928E2}\0001
attached to desktop
display active
  Attached monitor i: 0 of device 2
  cb: 840
  DeviceName: \\.\DISPLAY2\Monitor0
  DeviceString: Generic PnP Monitor
  StateFlags: 2
  DeviceID: \\?\DISPLAY#GSM5B55#4&1991b1ff&1&UID4194562#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
  DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0013
  monitor attached to desktop
  Attached monitor i: 1 of device 2
  cb: 840
  DeviceName: \\.\DISPLAY2\Monitor1
  DeviceString: Generic PnP Monitor
  StateFlags: 3
  DeviceID: \\?\DISPLAY#AUS24A3#4&1991b1ff&1&UID4194560#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
  DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0015
  monitor attached to desktop
EnumDisplayDevices i: 3
cb: 840
DeviceName: \\.\DISPLAY3
DeviceString: NVIDIA GeForce RTX 2070 SUPER
StateFlags: 0
DeviceID: PCI\VEN_10DE&DEV_1E84&SUBSYS_87081043&REV_A1
DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Video\{09F77703-97E3-11EF-95DE-F072755928E2}\0002
  Attached monitor i: 0 of device 3
  cb: 840
  DeviceName: \\.\DISPLAY3\Monitor0
  DeviceString: Generic PnP Monitor
  StateFlags: 2
  DeviceID: \\?\DISPLAY#GSM5B55#4&1991b1ff&1&UID4194562#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
  DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0013
EnumDisplayDevices i: 4
cb: 840
DeviceName: \\.\DISPLAY4
DeviceString: NVIDIA GeForce RTX 2070 SUPER
StateFlags: 0
DeviceID: PCI\VEN_10DE&DEV_1E84&SUBSYS_87081043&REV_A1
DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Video\{09F77703-97E3-11EF-95DE-F072755928E2}\0003
  Attached monitor i: 0 of device 4
  cb: 840
  DeviceName: \\.\DISPLAY4\Monitor0
  DeviceString: Generic PnP Monitor
  StateFlags: 2
  DeviceID: \\?\DISPLAY#GSM5B55#4&1991b1ff&1&UID4194562#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
  DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0013
EnumDisplayMonitors index 0 \\.\DISPLAY1 y: 0 to 1080 x: 0 to 1920
EnumDisplayMonitors index 1 \\.\DISPLAY2 y: 0 to 1080 x: 1920 to 3840
Post Reply