IN_Init called before SDL_Init( SDL_INIT_VIDEO )

Hello !

First of all i’m sorry if that’s not a place for a bug report.

So i’m using a pretty complex config files with Quake 3 and also with ioQuake 3. I found a weird bug in windows version which only affects ioQuake 3 test builds. If you put for some reason the in_restart command in autoexec.cfg or in activeaction cvar then if you trying to connect to a game server ioquake 3 will crash with the next error:
IN_Init called before SDL_Init( SDL_INIT_VIDEO )

ps.: forgot to mention that the game not crash if you only play in single player mode.

I’m using this version:
ioq3 1.36_GIT_d28e667-2018-03-04 win_mingw64-x86_64 Mar 4 2018 windows

Here is the log file which i get after the crash:

ioq3 1.36_GIT_d28e667-2018-03-04 win_mingw64-x86_64 Mar  4 2018
SSE instruction set enabled
----- FS_Startup -----
We are looking in the current search path:
d:\games\ID_TECH\3\q3\clients\ioq3\64\home\baseq3
d:\games\ID_TECH\3\q3\clients\ioq3\64\base\baseq3
d:\games\ID_TECH\3\q3\clients\files\cd2\baseq3
d:\games\ID_TECH\3\q3\clients\files\cd2\baseq3\pak8.pk3 (9 files)
d:\games\ID_TECH\3\q3\clients\files\cd2\baseq3\pak7.pk3 (4 files)
d:\games\ID_TECH\3\q3\clients\files\cd2\baseq3\pak6.pk3 (64 files)
d:\games\ID_TECH\3\q3\clients\files\cd2\baseq3\pak5.pk3 (7 files)
d:\games\ID_TECH\3\q3\clients\files\cd2\baseq3\pak4.pk3 (272 files)
d:\games\ID_TECH\3\q3\clients\files\cd2\baseq3\pak3.pk3 (4 files)
d:\games\ID_TECH\3\q3\clients\files\cd2\baseq3\pak2.pk3 (148 files)
d:\games\ID_TECH\3\q3\clients\files\cd2\baseq3\pak1.pk3 (26 files)
d:\games\ID_TECH\3\q3\clients\files\cd2\baseq3\pak0.pk3 (3539 files)

----------------------
4073 files in pk3 files
execing default.cfg
execing q3config.cfg
execing autoexec.cfg
Unknown command "in_restart^7"
fs_game is write protected.
Hunk_Clear: reset the hunk ok
----- Client Initialization -----
Couldn't read q3history.
----- Initializing Renderer ----
Trying to load "renderer_opengl2_x86_64.dll" from "."...
-------------------------------
QKEY found.
----- Client Initialization Complete -----
----- R_Init -----
SDL using driver "windows"
Initializing OpenGL display
Display aspect: 1.778
...setting mode -2: 1920 1080
Trying to get an OpenGL 3.2 core context
SDL_GL_CreateContext succeeded.
Using 24 color bits, 24 depth, 8 stencil display.
Available modes: '1280x720 1366x768 1600x900 1920x1080 1768x992 1176x664 1360x768 1280x768 1280x800 1440x900 1680x1050 1600x1024 720x480 640x480 800x600 1024x768 1152x864 1280x960 720x576 1280x1024'
GL_RENDERER: GeForce GTX 760/PCIe/SSE2
Initializing OpenGL extensions
...ignoring GL_EXT_texture_compression_s3tc
...ignoring GL_S3_s3tc
...using GL_EXT_texture_env_add
...using GL_ARB_multitexture
...using GL_EXT_compiled_vertex_array
...ignoring GL_EXT_texture_filter_anisotropic
...using OpenGL 3.2.0 NVIDIA 388.13
...using GL_ARB_framebuffer_object
...using GL_ARB_vertex_array_object
...using GL_ARB_texture_float
...using GL_ARB_depth_clamp
...ignoring GL_ARB_seamless_cube_map
...using GLSL version 1.50 NVIDIA via Cg compiler
...using GL_NVX_gpu_memory_info
...GL_ATI_meminfo not found
...ignoring GL_ARB_texture_compression_rgtc
...ignoring GL_ARB_texture_compression_bptc
...using GL_EXT_direct_state_access
------- FBO_Init -------
------- GLSL_InitGPUShaders -------
loaded 80 GLSL shaders (32 gen 28 light 20 etc) in  0.04 seconds
------- R_InitVaos -------
Initializing Shaders

GL_VENDOR: NVIDIA Corporation
GL_RENDERER: GeForce GTX 760/PCIe/SSE2
GL_VERSION: 3.2.0 NVIDIA 388.13
GL_EXTENSIONS: GL_AMD_multi_draw_indirect GL_AMD_seamless_cubemap_per_texture GL_ARB_arrays_of_arrays GL_ARB_base_instance GL_ARB_bindless_texture 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_compressed_texture_pixel_storage GL_ARB_conservative_depth GL_ARB_compute_shader GL_ARB_compute_variable_group_size GL_ARB_conditional_render_inverted 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_indirect GL_ARB_draw_elements_base_vertex GL_ARB_draw_instanced GL_ARB_enhanced_layouts GL_ARB_ES2_compatibility GL_ARB_ES3_compatibility GL_ARB_ES3_1_compatibility GL_ARB_ES3_2_compatibility 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_framebuffer_no_attachments GL_ARB_framebuffer_object GL_ARB_framebuffer_sRGB GL_ARB_geometry_shader4 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_imaging 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_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_storage_buffer_object GL_ARB_shader_subroutine GL_ARB_shader_texture_image_samples GL_ARB_shader_texture_lod 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_sparse_buffer GL_ARB_sparse_texture 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_draw_buffers GL_ATI_texture_float GL_ATI_texture_mirror_once GL_S3_s3tc GL_EXT_texture_env_add 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_compiled_vertex_array GL_EXT_Cg_shader GL_EXT_depth_bounds_test 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_EXTX_framebuffer_mixed_formats 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_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_separate_shader_objects GL_EXT_separate_specular_color GL_EXT_shader_image_load_store GL_EXT_shader_integer_mix GL_EXT_shadow_funcs GL_EXT_stencil_two_side GL_EXT_stencil_wrap 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_combine GL_EXT_texture_env_dot3 GL_EXT_texture_filter_anisotropic GL_EXT_texture_integer GL_EXT_texture_lod GL_EXT_texture_lod_bias GL_EXT_texture_mirror_clamp GL_EXT_texture_object GL_EXT_texture_shared_exponent GL_EXT_texture_sRGB GL_EXT_texture_sRGB_decode GL_EXT_texture_storage GL_EXT_texture_swizzle GL_EXT_timer_query GL_EXT_transform_feedback2 GL_EXT_vertex_array GL_EXT_vertex_array_bgra GL_EXT_vertex_attrib_64bit GL_EXT_window_rectangles GL_EXT_import_sync_object GL_IBM_rasterpos_clip GL_IBM_texture_mirrored_repeat GL_KHR_context_flush_control GL_KHR_debug GL_EXT_memory_object GL_EXT_memory_object_win32 GL_EXT_win32_keyed_mutex GL_KHR_parallel_shader_compile GL_KHR_no_error GL_KHR_robust_buffer_access_behavior GL_KHR_robustness GL_EXT_semaphore GL_EXT_semaphore_win32 GL_KTX_buffer_region GL_NV_alpha_to_coverage_dither_control GL_NV_bindless_multi_draw_indirect GL_NV_bindless_multi_draw_indirect_count GL_NV_bindless_texture GL_NV_blend_equation_advanced GL_NV_blend_square GL_NV_command_list GL_NV_compute_program5 GL_NV_conditional_render GL_NV_copy_depth_to_color GL_NV_copy_image GL_NV_depth_buffer_float GL_NV_depth_clamp GL_NV_draw_texture GL_NV_draw_vulkan_image GL_NV_ES1_1_compatibility GL_NV_ES3_1_compatibility GL_NV_explicit_multisample GL_NV_fence GL_NV_float_buffer GL_NV_fog_distance GL_NV_fragment_program GL_NV_fragment_program_option GL_NV_fragment_program2 GL_NV_framebuffer_multisample_coverage GL_NV_geometry_shader4 GL_NV_gpu_program4 GL_NV_internalformat_sample_query GL_NV_gpu_program4_1 GL_NV_gpu_program5 GL_NV_gpu_program5_mem_extended GL_NV_gpu_program_fp64 GL_NV_gpu_shader5 GL_NV_half_float GL_NV_light_max_exponent GL_NV_multisample_coverage GL_NV_multisample_filter_hint GL_NV_occlusion_query GL_NV_packed_depth_stencil GL_NV_parameter_buffer_object GL_NV_parameter_buffer_object2 GL_NV_path_rendering GL_NV_pixel_data_range GL_NV_point_sprite GL_NV_primitive_restart GL_NV_query_resource GL_NV_query_resource_tag GL_NV_register_combiners GL_NV_register_combiners2 GL_NV_shader_atomic_counters GL_NV_shader_atomic_float GL_NV_shader_buffer_load GL_NV_shader_storage_buffer_object GL_NV_texgen_reflection GL_NV_texture_barrier GL_NV_texture_compression_vtc GL_NV_texture_env_combine4 GL_NV_texture_multisample GL_NV_texture_rectangle GL_NV_texture_rectangle_compressed GL_NV_texture_shader GL_NV_texture_shader2 GL_NV_texture_shader3 GL_NV_transform_feedback GL_NV_transform_feedback2 GL_NV_uniform_buffer_unified_memory GL_NV_vertex_array_range GL_NV_vertex_array_range2 GL_NV_vertex_attrib_integer_64bit GL_NV_vertex_buffer_unified_memory GL_NV_vertex_program GL_NV_vertex_program1_1 GL_NV_vertex_program2 GL_NV_vertex_program2_option GL_NV_vertex_program3 GL_NVX_conditional_render GL_NVX_gpu_memory_info GL_NVX_multigpu_info GL_NVX_nvenc_interop GL_NV_shader_thread_group GL_NV_shader_thread_shuffle GL_KHR_blend_equation_advanced GL_SGIS_generate_mipmap GL_SGIS_texture_lod GL_SGIX_depth_texture GL_SGIX_shadow GL_SUN_slice_accum GL_WIN_swap_hint WGL_EXT_swap_control 
GL_MAX_TEXTURE_SIZE: 16384
GL_MAX_TEXTURE_UNITS_ARB: 4

PIXELFORMAT: color(24-bits) Z(24-bit) stencil(8-bits)
MODE: -2, 1920 x 1080 windowed hz:N/A
GAMMA: hardware w/ 1 overbright bits
texturemode: GL_LINEAR_MIPMAP_NEAREST
picmip: 1
texture bits: 0
compiled vertex arrays: enabled
texenv add: enabled
compressed textures: disabled
----- finished R_Init -----
------ Initializing Sound ------
Trying to load "OpenAL64.dll"...
Trying to load "OpenAL64.dll" from "."...
Trying to load "OpenAL64.dll" from "d:\games\ID_TECH\3\q3\clients\ioq3\64\base"...
Loading "OpenAL64.dll" failed
Failed to load library: "OpenAL64.dll".
SDL_Init( SDL_INIT_AUDIO )... OK
SDL audio driver is "directsound".
SDL_AudioSpec:
  Format:   AUDIO_S16LSB
  Freq:     22050
  Samples:  512
  Channels: 2
Starting SDL audio callback...
SDL audio initialized.
----- Sound Info -----
    1 stereo
16384 samples
   16 samplebits
    1 submission_chunk
22050 speed
0000000002A15A30 dma buffer
No background file.
----------------------
Sound initialization successful.
--------------------------------
Sound memory manager started
Loading vm file vm/ui.qvm...
File "vm/ui.qvm" found at "d:\games\ID_TECH\3\q3\clients\ioq3\64\base\baseq3"
...which has vmMagic VM_MAGIC_VER2
Loading 1159 jump table targets
VM file ui compiled to 695219 bytes of code
ui loaded in 1749216 bytes on the hunk
35 arenas parsed
32 bots parsed
--- Common Initialization Complete ---
Winsock Initialized
Hostname: z-97a
IP6: fe80::d44:36cd:6fe4:2233%3
IP: 192.168.0.200
Opening IP6 socket: [::]:27960
Opening IP socket: 0.0.0.0:27950
Requesting servers from master.quake3arena.com (85.17.208.104:27950)...
Requesting servers from master.ioquake3.org (192.241.238.177:27950)...
CL_ServersResponsePacket from 85.17.208.104:27950
124 servers parsed (total 124)
CL_ServersResponsePacket from 192.241.238.177:27950
195 servers parsed (total 218)
CL_ServersResponsePacket from 192.241.238.177:27950
29 servers parsed (total 234)
Resolving update.quake3arena.com
update.quake3arena.com resolved to 192.246.40.56:27951
46.28.109.100:55555 resolved to 46.28.109.100:55555
Resolving authorize.quake3arena.com
authorize.quake3arena.com resolved to 192.246.40.56:27952
----- Client Shutdown (Game directory changed) -----
RE_Shutdown( 1 )
------- FBO_Shutdown -------
------- R_ShutdownVaos -------
------- GLSL_ShutdownGPUShaders -------
Hunk_Clear: reset the hunk ok
Closing SDL audio device...
SDL audio device shut down.
-----------------------
----- FS_Startup -----
We are looking in the current search path:
d:\games\ID_TECH\3\q3\clients\ioq3\64\home\osp
d:\games\ID_TECH\3\q3\clients\ioq3\64\base\osp
d:\games\ID_TECH\3\q3\clients\files\cd2\osp
d:\games\ID_TECH\3\q3\clients\ioq3\64\home\baseq3
d:\games\ID_TECH\3\q3\clients\ioq3\64\base\baseq3
d:\games\ID_TECH\3\q3\clients\files\cd2\baseq3
d:\games\ID_TECH\3\q3\clients\files\cd2\baseq3\pak8.pk3 (9 files)
d:\games\ID_TECH\3\q3\clients\files\cd2\baseq3\pak7.pk3 (4 files)
d:\games\ID_TECH\3\q3\clients\files\cd2\baseq3\pak6.pk3 (64 files)
d:\games\ID_TECH\3\q3\clients\files\cd2\baseq3\pak5.pk3 (7 files)
d:\games\ID_TECH\3\q3\clients\files\cd2\baseq3\pak4.pk3 (272 files)
d:\games\ID_TECH\3\q3\clients\files\cd2\baseq3\pak3.pk3 (4 files)
d:\games\ID_TECH\3\q3\clients\files\cd2\baseq3\pak2.pk3 (148 files)
d:\games\ID_TECH\3\q3\clients\files\cd2\baseq3\pak1.pk3 (26 files)
d:\games\ID_TECH\3\q3\clients\files\cd2\baseq3\pak0.pk3 (3539 files)

----------------------
4073 files in pk3 files
in_joystick will be changed upon restarting.
com_hunkmegs will be changed upon restarting.
net_port will be changed upon restarting.
execing default.cfg
execing q3config.cfg
execing q3config.cfg
execing autoexec.cfg

It happens when connecting to a server running a different mod. ioquake3 shutdowns video and input -> runs q3config.cfg and autoexec.cfg -> starts video and input using r_mode from mod’s config.

I’m not sure why running in_restart at start up would be useful but I’ve made ioquake3 no longer cause a fatal error when in_restart is run while video shutdown in this commit. The test builds should be updated in about an hour.

2 Likes