horde3d / Horde3D

Horde3D is a small 3D rendering and animation engine. It is written in an effort to create an engine being as lightweight and conceptually clean as possible.
http://horde3d.org/
1.55k stars 308 forks source link

Incorrect GL2 support? #213

Closed gwald closed 1 year ago

gwald commented 1 year ago

I ported horde3d to windows XP and because I use it VMware, it's limited to GL2 - 100% GL2 100% GL2.1 and 43% GL3, native drivers dont have this limitation.

But it looks either VMware hasn't fully supported the above standards or H3D is using GL extension not standard to GL2? I'm not sure how to properly test this?

Thankfully it's not major and can be just commented out, I've documented it here: http://horde3d.org/forums/viewtopic.php?f=1&p=10421#p10421

ARB_texture_rg (effects Chicago's background, looks like it's not clearing it) https://registry.khronos.org/OpenGL/extensions/ARB/ARB_texture_rg.txt This extension is written against the OpenGL 2.1 Specification.

I'm not sure what to suggest, I don't know of a GL2 way of doing what this function does (my opengl is very weak), if anyone can suggest where to start, I'm happy to try it test it out.

Maybe at the least put a #ifdef HORDE3D_USE_GL2 to remove that call? at least it wont crash when trying to run. And VM uses can use GL2 horde3d :)

Performance in VM is very good :)

horde3d2 horde3d

gwald commented 1 year ago

The chicago issue seems to be only using the deferred rendering pipeline, HDR and forward works fine.

algts commented 1 year ago

Hello. You have issues with skybox, skybox is using compressed dds textures (uses EXT_texture_compression_s3tc extension). It is hard to diagnose what exactly goes wrong under VMWare on deferred rendering. Maybe something does not work in the combination of compressed texture and float textures (GBUFFER). If you do not need deferred pipeline, you could just disable it in the samples. As for ARB_texture_rg, it is not used internally by the engine, it is available for user applications usage. We can remove failed = true for this extension and print a warning instead of failure.

Are you using nouveau or closed-source nvidia driver? If you are using nouveau, it could also be a driver problem.

gwald commented 1 year ago

Thanks for the replies :)

I'm on a new laptop, I have both installed but I think it's using nvidia's driver, it's the same as my older desktop, which was just nvidia drivers.

You're right, they're two separate issues, strange EXT_texture_compression_s3tc isn't reported as failed anyway, all the samples fail to run because of ARB_texture_rg, as below:

Horde3D Log
Horde3D 2.0.10.000  Initializing GL4 backend using OpenGL driver '2.1 Mesa 10.0 (git-5da4fa2)' by 'VMware, Inc.' on 'Gallium 0.4 on SVGA3D; build: RELEASE;  '
0.001   OpenGL 3.3 not available
0.001   Extension ARB_texture_compression_bptc not supported
0.001   Failed to init renderer backend (OpenGL 2.1), retrying with legacy OpenGL 2.1 backend
0.000   Initializing GL2 backend using OpenGL driver '2.1 Mesa 10.0 (git-5da4fa2)' by 'VMware, Inc.' on 'Gallium 0.4 on SVGA3D; build: RELEASE;  '
0.001   Extension ARB_texture_rg not supported
0.001   Failed to init renderer backend, debug info following
0.001   Supported extensions: 'GL_ARB_multisample GL_EXT_abgr GL_EXT_bgra GL_EXT_blend_color GL_EXT_blend_minmax GL_EXT_blend_subtract GL_EXT_copy_texture GL_EXT_polygon_offset GL_EXT_subtexture GL_EXT_texture_object GL_EXT_vertex_array GL_EXT_compiled_vertex_array GL_EXT_texture GL_EXT_texture3D GL_IBM_rasterpos_clip GL_ARB_point_parameters GL_EXT_draw_range_elements GL_EXT_packed_pixels GL_EXT_point_parameters GL_EXT_rescale_normal GL_EXT_separate_specular_color GL_EXT_texture_edge_clamp GL_SGIS_generate_mipmap GL_SGIS_texture_border_clamp GL_SGIS_texture_edge_clamp GL_SGIS_texture_lod GL_ARB_framebuffer_sRGB GL_ARB_multitexture GL_EXT_framebuffer_sRGB GL_IBM_multimode_draw_arrays GL_IBM_texture_mirrored_repeat GL_ARB_texture_cube_map GL_ARB_texture_env_add GL_ARB_transpose_matrix GL_EXT_blend_func_separate GL_EXT_fog_coord GL_EXT_multi_draw_arrays GL_EXT_secondary_color GL_EXT_texture_env_add GL_EXT_texture_filter_anisotropic GL_EXT_texture_lod_bias GL_INGR_blend_func_separate GL_NV_blend_square GL_NV_light_max_exponent GL_NV_texgen_reflection GL_NV_texture_env_combine4 GL_S3_s3tc GL_SUN_multi_draw_arrays GL_ARB_texture_border_clamp GL_ARB_texture_compression GL_EXT_framebuffer_object GL_EXT_texture_compression_s3tc GL_EXT_texture_env_combine GL_EXT_texture_env_dot3 GL_MESA_window_pos GL_NV_packed_depth_stencil GL_NV_texture_rectangle GL_ARB_depth_texture GL_ARB_occlusion_query GL_ARB_shadow GL_ARB_texture_env_combine GL_ARB_texture_env_crossbar GL_ARB_texture_env_dot3 GL_ARB_texture_mirrored_repeat GL_ARB_window_pos GL_EXT_stencil_two_side GL_EXT_texture_cube_map GL_NV_fog_distance GL_APPLE_packed_pixels GL_APPLE_vertex_array_object GL_ARB_draw_buffers GL_ARB_fragment_program GL_ARB_fragment_shader GL_ARB_shader_objects GL_ARB_vertex_program GL_ARB_vertex_shader GL_ATI_draw_buffers GL_ATI_texture_env_combine3 GL_ATI_texture_float GL_EXT_shadow_funcs GL_EXT_stencil_wrap GL_MESA_pack_invert GL_NV_primitive_restart GL_ARB_fragment_program_shadow GL_ARB_half_float_pixel GL_ARB_occlusion_query2 GL_ARB_point_sprite GL_ARB

I did a search for rest of EXT checks in egRendererBaseGL2.cpp: EXT_texture_sRGB EXT_texture_compression_s3tc EXT_texture_filter_anisotropic EXT_framebuffer_object

They look the same to me, should these also warn instead of fail? I think GL2 being a fallback device would be better to run something with warnings, then hard stop. :)

Let me know and I'll test it and clean the C header and submit a patch over the weekend.

algts commented 1 year ago

EXT_framebuffer_object is required, otherwise multiple render targets (hdr pipeline) would not work. EXT_texture_compression_s3tc is required for compressed textures. EXT_texture_filter_anisotropic is used for anisotropic filtering. EXT_texture_sRGB is used for sRGB texture support. Basically, all these extensions are used by the engine, so it will be troublesome to remove them and may lead to crashes if they are not present.

Also, these extensions are present on practically every device nowadays.

gwald commented 1 year ago

I've built the Horde3D-develop with the update and it works fine for me, horde3d drops back to GL2 and runs in VMware :)

Thanks for your help :+1: