Volumetric lighting. How to set it?

Thanks for all the hints. In practice, I’m not going to code serious games. My area of ​​interest is using Panda3D for the demoscene. And I even managed to achieve something with Panda3D:

But now I just dreamed of creating more advanced effects.
I ran this code which prints "notify-level-glgsg debug". I don’t understand much of it, but here’s what turned out:

/Users/miklesz/PycharmProjects/Demo2023/venv/bin/python /Users/miklesz/PycharmProjects/Demo2023/volumetric_4.py 
Known pipe types:
  CocoaGraphicsPipe
(all display modules loaded.)
:display:gsg:glgsg(debug): GL_VENDOR = Apple
:display:gsg:glgsg(debug): GL_RENDERER = Apple M1
:display:gsg:glgsg(debug): GL_VERSION = 2.1 Metal - 76.3
:display:gsg:glgsg(debug): GL_VERSION decoded to: 2.1
:display:gsg:glgsg(debug): GL_SHADING_LANGUAGE_VERSION = 1.20
:display:gsg:glgsg(debug): Detected GLSL version: 1.20
:display:gsg:glgsg(debug): Using compatibility profile
:display:gsg:glgsg(debug): GL Extensions:
  GL_APPLE_aux_depth_stencil             GL_APPLE_client_storage
  GL_APPLE_element_array                 GL_APPLE_fence
  GL_APPLE_float_pixels                  GL_APPLE_flush_buffer_range
  GL_APPLE_flush_render                  GL_APPLE_packed_pixels
  GL_APPLE_pixel_buffer                  GL_APPLE_rgb_422
  GL_APPLE_row_bytes                     GL_APPLE_specular_vector
  GL_APPLE_texture_range                 GL_APPLE_transform_hint
  GL_APPLE_vertex_array_object           GL_APPLE_vertex_point_size
  GL_APPLE_vertex_program_evaluators     GL_APPLE_ycbcr_422
  GL_ARB_color_buffer_float              GL_ARB_depth_buffer_float
  GL_ARB_depth_clamp                     GL_ARB_depth_texture
  GL_ARB_draw_buffers                    GL_ARB_draw_elements_base_vertex
  GL_ARB_draw_instanced                  GL_ARB_fragment_program
  GL_ARB_fragment_program_shadow         GL_ARB_fragment_shader
  GL_ARB_framebuffer_object              GL_ARB_framebuffer_sRGB
  GL_ARB_half_float_pixel                GL_ARB_half_float_vertex
  GL_ARB_imaging                         GL_ARB_instanced_arrays
  GL_ARB_multisample                     GL_ARB_multitexture
  GL_ARB_occlusion_query                 GL_ARB_pixel_buffer_object
  GL_ARB_point_parameters                GL_ARB_point_sprite
  GL_ARB_provoking_vertex                GL_ARB_seamless_cube_map
  GL_ARB_shader_objects                  GL_ARB_shader_texture_lod
  GL_ARB_shading_language_100            GL_ARB_shadow
  GL_ARB_shadow_ambient                  GL_ARB_sync
  GL_ARB_texture_border_clamp            GL_ARB_texture_compression
  GL_ARB_texture_compression_rgtc        GL_ARB_texture_cube_map
  GL_ARB_texture_env_add                 GL_ARB_texture_env_combine
  GL_ARB_texture_env_crossbar            GL_ARB_texture_env_dot3
  GL_ARB_texture_float                   GL_ARB_texture_mirrored_repeat
  GL_ARB_texture_non_power_of_two        GL_ARB_texture_rectangle
  GL_ARB_texture_rg                      GL_ARB_transpose_matrix
  GL_ARB_vertex_array_bgra               GL_ARB_vertex_blend
  GL_ARB_vertex_buffer_object            GL_ARB_vertex_program
  GL_ARB_vertex_shader                   GL_ARB_window_pos
  GL_ATI_separate_stencil                GL_ATI_texture_env_combine3
  GL_ATI_texture_float                   GL_EXT_abgr
  GL_EXT_bgra                            GL_EXT_bindable_uniform
  GL_EXT_blend_color                     GL_EXT_blend_equation_separate
  GL_EXT_blend_func_separate             GL_EXT_blend_minmax
  GL_EXT_blend_subtract                  GL_EXT_clip_volume_hint
  GL_EXT_debug_label                     GL_EXT_debug_marker
  GL_EXT_draw_buffers2                   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_geometry_shader4                GL_EXT_gpu_program_parameters
  GL_EXT_gpu_shader4                     GL_EXT_multi_draw_arrays
  GL_EXT_packed_depth_stencil            GL_EXT_packed_float
  GL_EXT_provoking_vertex                GL_EXT_rescale_normal
  GL_EXT_secondary_color                 GL_EXT_separate_specular_color
  GL_EXT_shadow_funcs                    GL_EXT_stencil_two_side
  GL_EXT_stencil_wrap                    GL_EXT_texture_array
  GL_EXT_texture_compression_dxt1        GL_EXT_texture_compression_s3tc
  GL_EXT_texture_env_add                 GL_EXT_texture_filter_anisotropic
  GL_EXT_texture_integer                 GL_EXT_texture_lod_bias
  GL_EXT_texture_rectangle               GL_EXT_texture_sRGB
  GL_EXT_texture_sRGB_decode             GL_EXT_texture_shared_exponent
  GL_EXT_timer_query                     GL_EXT_transform_feedback
  GL_EXT_vertex_array_bgra               GL_IBM_rasterpos_clip
  GL_NV_blend_square                     GL_NV_conditional_render
  GL_NV_depth_clamp                      GL_NV_fog_distance
  GL_NV_fragment_program2                GL_NV_fragment_program_option
  GL_NV_light_max_exponent               GL_NV_texgen_reflection
  GL_NV_texture_barrier                  GL_NV_vertex_program2_option
  GL_NV_vertex_program3                  GL_SGIS_generate_mipmap
  GL_SGIS_texture_edge_clamp             GL_SGIS_texture_lod
  GL_SGI_color_matrix
:display:gsg:glgsg(debug): HAS EXT GL_EXT_debug_marker 1
:display:gsg:glgsg(debug): HAS EXT GL_KHR_debug 0
:display:gsg:glgsg(debug): HAS EXT GL_ARB_debug_output 0
:display:gsg:glgsg(debug): gl-debug disabled and unsupported.
:display:gsg:glgsg(debug): HAS EXT GL_ARB_ES3_compatibility 0
:display:gsg:glgsg(debug): HAS EXT GL_ARB_texture_storage 0
:display:gsg:glgsg(debug): HAS EXT GL_ARB_clear_texture 0
:display:gsg:glgsg(debug): HAS EXT GL_ARB_clear_buffer_object 0
:display:gsg:glgsg(debug): HAS EXT GL_EXT_texture_array 1
:display:gsg:glgsg(debug): HAS EXT GL_ARB_seamless_cube_map 1
:display:gsg:glgsg(debug): HAS EXT GL_ARB_texture_cube_map_array 0
:display:gsg:glgsg(debug): HAS EXT GL_ARB_texture_buffer_object 0
:display:gsg:glgsg(debug): HAS EXT GL_ARB_texture_compression_rgtc 1
:display:gsg:glgsg(debug): HAS EXT GL_ARB_vertex_array_bgra 1
:display:gsg:glgsg(debug): HAS EXT GL_ARB_vertex_type_10f_11f_11f_rev 0
:display:gsg:glgsg(debug): HAS EXT GL_ARB_framebuffer_object 1
:display:gsg:glgsg(debug): HAS EXT GL_ARB_map_buffer_range 0
:display:gsg:glgsg(debug): HAS EXT GL_ARB_buffer_storage 0
:display:gsg:glgsg(debug): HAS EXT GL_ARB_vertex_array_object 0
:display:gsg:glgsg(debug): HAS EXT GL_ARB_tessellation_shader 0
:display:gsg:glgsg(debug): HAS EXT GL_ARB_geometry_shader4 0
:display:gsg:glgsg(debug): HAS EXT GL_EXT_geometry_shader4 1
:display:gsg:glgsg(debug): HAS EXT GL_ARB_vertex_program 1
:display:gsg:glgsg(debug): HAS EXT GL_ARB_fragment_program 1
:display:gsg:glgsg(debug): HAS EXT GL_NV_gpu_program5 0
:display:gsg:glgsg(debug): HAS EXT GL_NV_gpu_program4 0
:display:gsg:glgsg(debug): HAS EXT GL_NV_vertex_program3 1
:display:gsg:glgsg(debug): HAS EXT GL_NV_fragment_program2 1
:display:gsg:glgsg(debug): HAS EXT GL_ARB_compute_shader 0
:display:gsg:glgsg(debug): HAS EXT GL_EXT_gpu_shader4 1
:display:gsg:glgsg(debug): HAS EXT GL_ARB_vertex_attrib_64bit 0
:display:gsg:glgsg(debug): HAS EXT GL_ARB_vertex_attrib_binding 0
:display:gsg:glgsg(debug): HAS EXT ARB_shader_storage_buffer_object 0
:display:gsg:glgsg(debug): HAS EXT GL_ARB_instanced_arrays 1
:display:gsg:glgsg(debug): HAS EXT GL_ARB_draw_instanced 1
:display:gsg:glgsg(debug): HAS EXT GL_ARB_draw_indirect 0
:display:gsg:glgsg(debug): HAS EXT GL_ARB_framebuffer_object 1
:display:gsg:glgsg(debug): HAS EXT GL_ARB_direct_state_access 0
:display:gsg:glgsg(debug): HAS EXT GL_ARB_framebuffer_no_attachments 0
:display:gsg:glgsg(debug): HAS EXT GL_NV_framebuffer_multisample_coverage 0
:display:gsg:glgsg(debug): HAS EXT GL_ARB_viewport_array 0
:display:gsg:glgsg(debug): Occlusion query counter provides 32 bits.
:display:gsg:glgsg(debug): HAS EXT GL_ARB_timer_query 0
:display:gsg:glgsg(debug): HAS EXT GL_ARB_blend_func_extended 0
:display:gsg:glgsg(debug): HAS EXT GL_EXT_texture_mirror_clamp 0
:display:gsg:glgsg(debug): HAS EXT GL_ARB_texture_mirror_clamp_to_edge 0
:display:gsg:glgsg(debug): max texture dimension = 16384, max 3d texture = 2048, max 2d texture array = 2048, max cube map = 16384
:display:gsg:glgsg(debug): max_elements_vertices = 1048575, max_elements_indices = 150000
:display:gsg:glgsg(debug): vertex buffer objects are supported.
:display:gsg:glgsg(debug): Supported compressed texture formats:
  GL_COMPRESSED_RGB_S3TC_DXT1_EXT
  GL_COMPRESSED_RGBA_S3TC_DXT3_EXT
  GL_COMPRESSED_RGBA_S3TC_DXT5_EXT
:display:gsg:glgsg(debug): HAS EXT GL_EXT_texture_filter_anisotropic 1
:display:gsg:glgsg(debug): HAS EXT GL_ARB_shader_image_load_store 0
:display:gsg:glgsg(debug): HAS EXT GL_EXT_shader_image_load_store 0
:display:gsg:glgsg(debug): HAS EXT GL_ARB_sampler_objects 0
:display:gsg:glgsg(debug): HAS EXT GL_ARB_multi_bind 0
:display:gsg:glgsg(debug): HAS EXT GL_ARB_internalformat_query2 0
:display:gsg:glgsg(debug): HAS EXT GL_ARB_bindless_texture 0
:display:gsg:glgsg(debug): HAS EXT GL_ARB_get_program_binary 0
:display:gsg:glgsg(debug): HAS EXT GL_EXT_stencil_two_side 1
:display:gsg:glgsg(debug): max lights = 8
:display:gsg:glgsg(debug): max clip planes = 6
:display:gsg:glgsg(debug): max texture stages = 8
:display:gsg:glgsg(debug): No program binary formats supported.
:display:gsg:glgsg(debug): HAS EXT GL_NV_gpu_program5 0
:display:gsg:glgsg(debug): HAS EXT GL_NV_gpu_program4 0
:display:gsg:glgsg(debug): HAS EXT GL_NV_fragment_program2 1
:display:gsg:glgsg(debug): Supported Cg profiles:
:display:gsg:glgsg(debug):   arbvp1
:display:gsg:glgsg(debug):   fp40
:display:gsg:glgsg(debug):   arbfp1
:display:gsg:glgsg(debug):   vp40
:display:gsg:glgsg(debug):   glslv
:display:gsg:glgsg(debug):   glslf
:display:gsg:glgsg(debug):   glslg
:display:gsg:glgsg(debug): Cg GLSL version = CG_GL_GLSL_120
:display:gsg:glgsg(debug): Cg latest vertex profile = vp40
:display:gsg:glgsg(debug): Cg latest fragment profile = fp40
:display:gsg:glgsg(debug): Cg latest geometry profile = unknown
:display:gsg:glgsg(debug): basic-shaders-only #f
:display:gsg:glgsg(debug): Cg active vertex profile = vp40
:display:gsg:glgsg(debug): Cg active fragment profile = fp40
:display:gsg:glgsg(debug): Cg active geometry profile = unknown
:display:gsg:glgsg(debug): shader model = 3.0
:display:gsg:glgsg(debug): GLGraphicsStateGuardian 0x7fda93815210 destructing

Process finished with exit code 0

I also tried to force "gl-version 4 1" but the effect was like forcing "gl-version 3 2" (which is none, unfortunately).
Based on this thread from Stack Overflow, I realized that Mac in general has problems with OpenGL and the solution could be Vulkan. Therefore, I can see 3 solutions:

  1. Someone will give me an else idea.
  2. I will wait for the new shader pipeline based on Vulkan, which has been announced by @rdb for some time:
    The Year 2021 in Review | Panda3D
  3. I will not see any other solutions and maybe I will write a shader from scratch that implements Volumetric Lighting on the old OpenGL (which would be a solution, although probably quite desperate).