Config.cpp 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609
  1. #include <fstream>
  2. #include "Config.h"
  3. #include "ErrorHandlerLocator.h"
  4. #include "Loaders.h"
  5. namespace Systems
  6. {
  7. DEFINE_ENUM(TypeID, TYPEID)
  8. }
  9. namespace Properties
  10. {
  11. DEFINE_ENUM(PropertyID, PROPERTYID)
  12. }
  13. // Predefined variables for "AddVariablePredef" macro
  14. #define VEC_PREDEF m_variables
  15. #define HASH_PREDEF m_hashTable
  16. #define OFFSET_PREDEF m_varVectorOffset
  17. // Macros used to simplify the method of adding configuration variables
  18. // Also used to add variable name as a string, without the need of hand-writing it,
  19. // and making sure it spelled the same as the variable name (makes code editing easier)
  20. #define AddVariable(VECTOR, HASH, KEY, STRUCT, VAR) HASH[#VAR] = KEY; VECTOR.push_back(Variable(#VAR, KEY, &STRUCT.VAR))
  21. // A version of the "AddVariable" macro, with 3 of the 5 parameters predefined
  22. #define AddVariablePredef(STRUCT, VAR) AddVariable(VEC_PREDEF, HASH_PREDEF, VEC_PREDEF.size() + OFFSET_PREDEF, STRUCT, VAR)
  23. Config::AudioVariables Config::m_audioVar;
  24. Config::ComponentVariables Config::m_componentVar;
  25. Config::ConfigFileVariables Config::m_configFileVar;
  26. Config::EngineVariables Config::m_engineVar;
  27. Config::FramebfrVariables Config::m_framebfrVar;
  28. Config::GameplayVariables Config::m_gameplayVar;
  29. Config::GraphicsVariables Config::m_graphicsVar;
  30. Config::GUIVariables Config::m_GUIVar;
  31. Config::InputVariables Config::m_inputVar;
  32. Config::ModelVariables Config::m_modelVar;
  33. Config::ObjectPoolVariables Config::m_objPoolVar;
  34. Config::PathsVariables Config::m_filepathVar;
  35. Config::PhysicsVariables Config::m_physicsVar;
  36. Config::RendererVariables Config::m_rendererVar;
  37. Config::ScriptVariables Config::m_scriptVar;
  38. Config::ShaderVariables Config::m_shaderVar;
  39. Config::TextureVariables Config::m_textureVar;
  40. Config::WindowVariables Config::m_windowVar;
  41. std::vector<Config::Variable> Config::m_variables;
  42. std::unordered_map<std::string, std::size_t> Config::m_hashTable;
  43. void Config::init()
  44. {
  45. // Add variables and their names to internal containers, so they could be checked / names matched later.
  46. // Note: not all the variables are assigned to containers, as some are not meant to be loaded from config file.
  47. // Audio Variables
  48. AddVariablePredef(m_audioVar, impact_impulse_param_divider);
  49. AddVariablePredef(m_audioVar, impact_impulse_volume_divider);
  50. AddVariablePredef(m_audioVar, impact_max_volume_threshold);
  51. AddVariablePredef(m_audioVar, impact_soft_hard_threshold);
  52. AddVariablePredef(m_audioVar, max_impact_volume);
  53. AddVariablePredef(m_audioVar, volume_ambient);
  54. AddVariablePredef(m_audioVar, volume_master);
  55. AddVariablePredef(m_audioVar, volume_music);
  56. AddVariablePredef(m_audioVar, volume_sfx);
  57. AddVariablePredef(m_audioVar, num_audio_channels);
  58. AddVariablePredef(m_audioVar, bus_name_ambient);
  59. AddVariablePredef(m_audioVar, bus_name_master);
  60. AddVariablePredef(m_audioVar, bus_name_music);
  61. AddVariablePredef(m_audioVar, bus_name_prefix);
  62. AddVariablePredef(m_audioVar, bus_name_sfx);
  63. AddVariablePredef(m_audioVar, channel_name_master);
  64. AddVariablePredef(m_audioVar, default_sound_bank);
  65. AddVariablePredef(m_audioVar, default_sound_bank_string);
  66. AddVariablePredef(m_audioVar, default_impact_sound_bank);
  67. AddVariablePredef(m_audioVar, pathDelimiter);
  68. // Component Variables
  69. AddVariablePredef(m_componentVar, camera_component_name);
  70. AddVariablePredef(m_componentVar, component_name_separator);
  71. AddVariablePredef(m_componentVar, light_component_name);
  72. AddVariablePredef(m_componentVar, lua_component_name);
  73. AddVariablePredef(m_componentVar, model_component_name);
  74. AddVariablePredef(m_componentVar, shader_component_name);
  75. // Engine variables
  76. AddVariablePredef(m_engineVar, change_ctrl_cml_notify_list_reserv);
  77. AddVariablePredef(m_engineVar, change_ctrl_grain_size);
  78. AddVariablePredef(m_engineVar, change_ctrl_notify_list_reserv);
  79. AddVariablePredef(m_engineVar, change_ctrl_oneoff_data_list_reserv);
  80. AddVariablePredef(m_engineVar, change_ctrl_oneoff_notify_list_reserv);
  81. AddVariablePredef(m_engineVar, change_ctrl_subject_list_reserv);
  82. AddVariablePredef(m_engineVar, delta_time_divider);
  83. AddVariablePredef(m_engineVar, glsl_version);
  84. AddVariablePredef(m_engineVar, gl_context_major_version);
  85. AddVariablePredef(m_engineVar, gl_context_minor_version);
  86. AddVariablePredef(m_engineVar, loaders_num_of_unload_per_frame);
  87. AddVariablePredef(m_engineVar, object_directory_init_pool_size);
  88. AddVariablePredef(m_engineVar, smoothing_tick_samples);
  89. AddVariablePredef(m_engineVar, task_scheduler_clock_frequency);
  90. // Frame-buffer variables
  91. AddVariablePredef(m_framebfrVar, gl_position_buffer_internal_format);
  92. AddVariablePredef(m_framebfrVar, gl_position_buffer_texture_type);
  93. AddVariablePredef(m_framebfrVar, gl_position_buffer_texture_format);
  94. AddVariablePredef(m_framebfrVar, gl_diffuse_buffer_internal_format);
  95. AddVariablePredef(m_framebfrVar, gl_diffuse_buffer_texture_format);
  96. AddVariablePredef(m_framebfrVar, gl_diffuse_buffer_texture_type);
  97. AddVariablePredef(m_framebfrVar, gl_emissive_buffer_internal_format);
  98. AddVariablePredef(m_framebfrVar, gl_emissive_buffer_texture_format);
  99. AddVariablePredef(m_framebfrVar, gl_emissive_buffer_texture_type);
  100. AddVariablePredef(m_framebfrVar, gl_normal_buffer_internal_format);
  101. AddVariablePredef(m_framebfrVar, gl_normal_buffer_texture_format);
  102. AddVariablePredef(m_framebfrVar, gl_normal_buffer_texture_type);
  103. AddVariablePredef(m_framebfrVar, gl_mat_properties_buffer_internal_format);
  104. AddVariablePredef(m_framebfrVar, gl_mat_properties_buffer_texture_format);
  105. AddVariablePredef(m_framebfrVar, gl_mat_properties_buffer_texture_type);
  106. AddVariablePredef(m_framebfrVar, gl_blur_buffer_internal_format);
  107. AddVariablePredef(m_framebfrVar, gl_blur_buffer_texture_type);
  108. AddVariablePredef(m_framebfrVar, gl_blur_buffer_texture_format);
  109. AddVariablePredef(m_framebfrVar, gl_final_buffer_internal_format);
  110. AddVariablePredef(m_framebfrVar, gl_final_buffer_texture_type);
  111. AddVariablePredef(m_framebfrVar, gl_final_buffer_texture_format);
  112. AddVariablePredef(m_framebfrVar, gl_depth_buffer_internal_format);
  113. AddVariablePredef(m_framebfrVar, gl_depth_buffer_texture_type);
  114. AddVariablePredef(m_framebfrVar, gl_depth_buffer_texture_format);
  115. AddVariablePredef(m_framebfrVar, gl_buffers_min_filter);
  116. AddVariablePredef(m_framebfrVar, gl_buffers_mag_filter);
  117. AddVariablePredef(m_framebfrVar, gl_buffers_wrap_s_method);
  118. AddVariablePredef(m_framebfrVar, gl_buffers_wrap_t_method);
  119. AddVariablePredef(m_framebfrVar, gl_blur_buffer_min_filter);
  120. AddVariablePredef(m_framebfrVar, gl_blur_buffer_mag_filter);
  121. AddVariablePredef(m_framebfrVar, gl_blur_buffer_wrap_s_method);
  122. AddVariablePredef(m_framebfrVar, gl_blur_buffer_wrap_t_method);
  123. AddVariablePredef(m_framebfrVar, gl_final_buffer_min_filter);
  124. AddVariablePredef(m_framebfrVar, gl_final_buffer_mag_filter);
  125. AddVariablePredef(m_framebfrVar, gl_final_buffer_s_method);
  126. AddVariablePredef(m_framebfrVar, gl_final_buffer_t_method);
  127. // Game-play variables
  128. AddVariablePredef(m_gameplayVar, default_map);
  129. AddVariablePredef(m_gameplayVar, main_menu_map);
  130. AddVariablePredef(m_gameplayVar, play_map);
  131. AddVariablePredef(m_gameplayVar, camera_freelook_speed);
  132. // Graphics variables
  133. AddVariablePredef(m_graphicsVar, double_buffering);
  134. AddVariablePredef(m_graphicsVar, eye_adaption);
  135. AddVariablePredef(m_graphicsVar, multisampling);
  136. AddVariablePredef(m_graphicsVar, alpha_size);
  137. AddVariablePredef(m_graphicsVar, bloom_blur_passes);
  138. AddVariablePredef(m_graphicsVar, dir_shadow_res_x);
  139. AddVariablePredef(m_graphicsVar, dir_shadow_res_y);
  140. AddVariablePredef(m_graphicsVar, lens_flare_blur_passes);
  141. AddVariablePredef(m_graphicsVar, lens_flare_ghost_count);
  142. AddVariablePredef(m_graphicsVar, max_num_point_lights);
  143. AddVariablePredef(m_graphicsVar, max_num_spot_lights);
  144. AddVariablePredef(m_graphicsVar, multisample_buffers);
  145. AddVariablePredef(m_graphicsVar, multisample_samples);
  146. AddVariablePredef(m_graphicsVar, rendering_res_x);
  147. AddVariablePredef(m_graphicsVar, rendering_res_y);
  148. AddVariablePredef(m_graphicsVar, render_to_texture_resolution_x);
  149. AddVariablePredef(m_graphicsVar, render_to_texture_resolution_y);
  150. AddVariablePredef(m_graphicsVar, tonemap_method);
  151. AddVariablePredef(m_graphicsVar, alpha_threshold);
  152. AddVariablePredef(m_graphicsVar, emissive_multiplier);
  153. AddVariablePredef(m_graphicsVar, emissive_threshold);
  154. AddVariablePredef(m_graphicsVar, eye_adaption_rate);
  155. AddVariablePredef(m_graphicsVar, eye_adaption_intended_brightness);
  156. AddVariablePredef(m_graphicsVar, fog_color_x);
  157. AddVariablePredef(m_graphicsVar, fog_color_y);
  158. AddVariablePredef(m_graphicsVar, fog_color_z);
  159. AddVariablePredef(m_graphicsVar, fog_density);
  160. AddVariablePredef(m_graphicsVar, fov);
  161. AddVariablePredef(m_graphicsVar, gamma);
  162. AddVariablePredef(m_graphicsVar, lens_flare_aspect_ratio);
  163. AddVariablePredef(m_graphicsVar, lens_flare_chrom_abberration);
  164. AddVariablePredef(m_graphicsVar, lens_flare_downsample);
  165. AddVariablePredef(m_graphicsVar, lens_flare_ghost_spacing);
  166. AddVariablePredef(m_graphicsVar, lens_flare_ghost_threshold);
  167. AddVariablePredef(m_graphicsVar, lens_flare_halo_radius);
  168. AddVariablePredef(m_graphicsVar, lens_flare_halo_thickness);
  169. AddVariablePredef(m_graphicsVar, lens_flare_halo_threshold);
  170. AddVariablePredef(m_graphicsVar, light_atten_constant);
  171. AddVariablePredef(m_graphicsVar, light_atten_linear);
  172. AddVariablePredef(m_graphicsVar, light_atten_quadratic);
  173. AddVariablePredef(m_graphicsVar, light_color_r);
  174. AddVariablePredef(m_graphicsVar, light_color_g);
  175. AddVariablePredef(m_graphicsVar, light_color_b);
  176. AddVariablePredef(m_graphicsVar, LOD_parallax_mapping);
  177. AddVariablePredef(m_graphicsVar, luminance_multiplier);
  178. AddVariablePredef(m_graphicsVar, luminance_range_min);
  179. AddVariablePredef(m_graphicsVar, luminance_range_max);
  180. AddVariablePredef(m_graphicsVar, height_scale);
  181. AddVariablePredef(m_graphicsVar, texture_tiling_factor);
  182. AddVariablePredef(m_graphicsVar, z_far);
  183. AddVariablePredef(m_graphicsVar, z_near);
  184. // GUI variables
  185. AddVariablePredef(m_GUIVar, gui_docking_enabled);
  186. AddVariablePredef(m_GUIVar, gui_render);
  187. AddVariablePredef(m_GUIVar, gui_dark_style);
  188. AddVariablePredef(m_GUIVar, gui_sequence_array_reserve_size);
  189. AddVariablePredef(m_GUIVar, editor_asset_selection_button_size_multiplier);
  190. AddVariablePredef(m_GUIVar, editor_asset_texture_button_size_x);
  191. AddVariablePredef(m_GUIVar, editor_asset_texture_button_size_y);
  192. AddVariablePredef(m_GUIVar, editor_audio_banks_max_height);
  193. AddVariablePredef(m_GUIVar, editor_float_slider_speed);
  194. AddVariablePredef(m_GUIVar, editor_inspector_button_width_multiplier);
  195. AddVariablePredef(m_GUIVar, editor_lua_variables_max_height);
  196. AddVariablePredef(m_GUIVar, editor_play_button_size);
  197. AddVariablePredef(m_GUIVar, editor_render_pass_max_height);
  198. AddVariablePredef(m_GUIVar, gui_file_dialog_min_size_x);
  199. AddVariablePredef(m_GUIVar, gui_file_dialog_min_size_y);
  200. AddVariablePredef(m_GUIVar, gui_file_dialog_dir_color_R);
  201. AddVariablePredef(m_GUIVar, gui_file_dialog_dir_color_G);
  202. AddVariablePredef(m_GUIVar, gui_file_dialog_dir_color_B);
  203. AddVariablePredef(m_GUIVar, editor_button_add_texture);
  204. AddVariablePredef(m_GUIVar, editor_button_add_list_texture);
  205. AddVariablePredef(m_GUIVar, editor_button_arrow_down_texture);
  206. AddVariablePredef(m_GUIVar, editor_button_arrow_up_texture);
  207. AddVariablePredef(m_GUIVar, editor_button_delete_entry_texture);
  208. AddVariablePredef(m_GUIVar, editor_button_gui_sequence_texture);
  209. AddVariablePredef(m_GUIVar, editor_button_guizmo_rotate_texture);
  210. AddVariablePredef(m_GUIVar, editor_button_guizmo_translate_texture);
  211. AddVariablePredef(m_GUIVar, editor_button_open_file_texture);
  212. AddVariablePredef(m_GUIVar, editor_button_open_asset_list_texture);
  213. AddVariablePredef(m_GUIVar, editor_button_pause_texture);
  214. AddVariablePredef(m_GUIVar, editor_button_play_texture);
  215. AddVariablePredef(m_GUIVar, editor_button_reload_texture);
  216. AddVariablePredef(m_GUIVar, editor_button_restart_texture);
  217. AddVariablePredef(m_GUIVar, editor_button_scripting_enabled_texture);
  218. AddVariablePredef(m_GUIVar, editor_new_entity_name);
  219. AddVariablePredef(m_GUIVar, gui_editor_window_name);
  220. // Input variables
  221. AddVariablePredef(m_inputVar, back_key);
  222. AddVariablePredef(m_inputVar, backward_editor_key);
  223. AddVariablePredef(m_inputVar, backward_key);
  224. AddVariablePredef(m_inputVar, center_key);
  225. AddVariablePredef(m_inputVar, clip_mouse_key);
  226. AddVariablePredef(m_inputVar, close_window_key);
  227. AddVariablePredef(m_inputVar, debug_1_key);
  228. AddVariablePredef(m_inputVar, debug_2_key);
  229. AddVariablePredef(m_inputVar, down_editor_key);
  230. AddVariablePredef(m_inputVar, down_key);
  231. AddVariablePredef(m_inputVar, escape_key);
  232. AddVariablePredef(m_inputVar, forward_editor_key);
  233. AddVariablePredef(m_inputVar, forward_key);
  234. AddVariablePredef(m_inputVar, fullscreen_key);
  235. AddVariablePredef(m_inputVar, jump_key);
  236. AddVariablePredef(m_inputVar, left_editor_key);
  237. AddVariablePredef(m_inputVar, left_strafe_key);
  238. AddVariablePredef(m_inputVar, next_editor_key);
  239. AddVariablePredef(m_inputVar, modifier_editor_key);
  240. AddVariablePredef(m_inputVar, next_editor_key);
  241. AddVariablePredef(m_inputVar, num_preallocated_keybinds);
  242. AddVariablePredef(m_inputVar, previous_editor_key);
  243. AddVariablePredef(m_inputVar, right_editor_key);
  244. AddVariablePredef(m_inputVar, right_strafe_key);
  245. AddVariablePredef(m_inputVar, save_editor_key);
  246. AddVariablePredef(m_inputVar, sprint_key);
  247. AddVariablePredef(m_inputVar, up_editor_key);
  248. AddVariablePredef(m_inputVar, up_key);
  249. AddVariablePredef(m_inputVar, vsync_key);
  250. AddVariablePredef(m_inputVar, mouse_filter);
  251. AddVariablePredef(m_inputVar, mouse_warp_mode);
  252. AddVariablePredef(m_inputVar, mouse_jaw);
  253. AddVariablePredef(m_inputVar, mouse_pitch);
  254. AddVariablePredef(m_inputVar, mouse_pitch_clip);
  255. AddVariablePredef(m_inputVar, mouse_sensitivity);
  256. // Model variables
  257. AddVariablePredef(m_modelVar, calcTangentSpace);
  258. AddVariablePredef(m_modelVar, joinIdenticalVertices);
  259. AddVariablePredef(m_modelVar, makeLeftHanded);
  260. AddVariablePredef(m_modelVar, triangulate);
  261. AddVariablePredef(m_modelVar, removeComponent);
  262. AddVariablePredef(m_modelVar, genNormals);
  263. AddVariablePredef(m_modelVar, genSmoothNormals);
  264. AddVariablePredef(m_modelVar, genUVCoords);
  265. AddVariablePredef(m_modelVar, optimizeMeshes);
  266. AddVariablePredef(m_modelVar, optimizeGraph);
  267. // Object pool variables
  268. AddVariablePredef(m_objPoolVar, camera_component_default_pool_size);
  269. AddVariablePredef(m_objPoolVar, light_component_default_pool_size);
  270. AddVariablePredef(m_objPoolVar, lua_component_default_pool_size);
  271. AddVariablePredef(m_objPoolVar, gui_sequence_component_default_pool_size);
  272. AddVariablePredef(m_objPoolVar, model_component_default_pool_size);
  273. AddVariablePredef(m_objPoolVar, object_pool_size);
  274. AddVariablePredef(m_objPoolVar, point_light_pool_size);
  275. AddVariablePredef(m_objPoolVar, regid_body_component_default_pool_size);
  276. AddVariablePredef(m_objPoolVar, shader_component_default_pool_size);
  277. AddVariablePredef(m_objPoolVar, spatial_component_default_pool_size);
  278. AddVariablePredef(m_objPoolVar, spot_light_pool_size);
  279. AddVariablePredef(m_objPoolVar, sound_component_default_pool_size);
  280. AddVariablePredef(m_objPoolVar, sound_listener_component_default_pool_size);
  281. // File-path variables
  282. AddVariablePredef(m_filepathVar, config_path);
  283. AddVariablePredef(m_filepathVar, map_path);
  284. AddVariablePredef(m_filepathVar, model_path);
  285. AddVariablePredef(m_filepathVar, object_path);
  286. AddVariablePredef(m_filepathVar, prefab_path);
  287. AddVariablePredef(m_filepathVar, script_path);
  288. AddVariablePredef(m_filepathVar, shader_path);
  289. AddVariablePredef(m_filepathVar, sound_path);
  290. AddVariablePredef(m_filepathVar, texture_path);
  291. // Physics variables
  292. AddVariablePredef(m_physicsVar, applied_impulse_threshold);
  293. AddVariablePredef(m_physicsVar, life_time_threshold);
  294. // Renderer variables
  295. AddVariablePredef(m_rendererVar, atm_scattering_ground_vert_shader);
  296. AddVariablePredef(m_rendererVar, atm_scattering_ground_frag_shader);
  297. AddVariablePredef(m_rendererVar, atm_scattering_sky_vert_shader);
  298. AddVariablePredef(m_rendererVar, atm_scattering_sky_frag_shader);
  299. AddVariablePredef(m_rendererVar, dir_light_vert_shader);
  300. AddVariablePredef(m_rendererVar, dir_light_frag_shader);
  301. AddVariablePredef(m_rendererVar, point_light_vert_shader);
  302. AddVariablePredef(m_rendererVar, point_light_frag_shader);
  303. AddVariablePredef(m_rendererVar, spot_light_vert_shader);
  304. AddVariablePredef(m_rendererVar, spot_light_frag_shader);
  305. AddVariablePredef(m_rendererVar, dir_light_quad);
  306. AddVariablePredef(m_rendererVar, point_light_sphere);
  307. AddVariablePredef(m_rendererVar, spot_light_cone);
  308. AddVariablePredef(m_rendererVar, stencil_pass_vert_shader);
  309. AddVariablePredef(m_rendererVar, stencil_pass_frag_shader);
  310. AddVariablePredef(m_rendererVar, geometry_pass_vert_shader);
  311. AddVariablePredef(m_rendererVar, geometry_pass_frag_shader);
  312. AddVariablePredef(m_rendererVar, geom_billboard_vert_shader);
  313. AddVariablePredef(m_rendererVar, geom_billboard_frag_shader);
  314. AddVariablePredef(m_rendererVar, geom_billboard_goem_shader);
  315. AddVariablePredef(m_rendererVar, gaussian_blur_vertical_frag_shader);
  316. AddVariablePredef(m_rendererVar, gaussian_blur_vertical_vert_shader);
  317. AddVariablePredef(m_rendererVar, gaussian_blur_horizontal_frag_shader);
  318. AddVariablePredef(m_rendererVar, gaussian_blur_horizontal_vert_shader);
  319. AddVariablePredef(m_rendererVar, hdr_mapping_pass_frag_shader);
  320. AddVariablePredef(m_rendererVar, hdr_mapping_pass_vert_shader);
  321. AddVariablePredef(m_rendererVar, luminance_average_comp_shader);
  322. AddVariablePredef(m_rendererVar, luminance_histogram_comp_shader);
  323. AddVariablePredef(m_rendererVar, tonemapping_vert_shader);
  324. AddVariablePredef(m_rendererVar, tonemapping_frag_shader);
  325. AddVariablePredef(m_rendererVar, bloom_composite_pass_vert_shader);
  326. AddVariablePredef(m_rendererVar, bloom_composite_pass_frag_shader);
  327. AddVariablePredef(m_rendererVar, bloom_downscale_comp_shader);
  328. AddVariablePredef(m_rendererVar, bloom_upscale_comp_shader);
  329. AddVariablePredef(m_rendererVar, bloom_composite_pass_vert_shader);
  330. AddVariablePredef(m_rendererVar, bloom_composite_pass_frag_shader);
  331. AddVariablePredef(m_rendererVar, blur_pass_vert_shader);
  332. AddVariablePredef(m_rendererVar, blur_pass_frag_shader);
  333. AddVariablePredef(m_rendererVar, lense_flare_comp_pass_vert_shader);
  334. AddVariablePredef(m_rendererVar, lense_flare_comp_pass_frag_shader);
  335. AddVariablePredef(m_rendererVar, lense_flare_pass_vert_shader);
  336. AddVariablePredef(m_rendererVar, lense_flare_pass_frag_shader);
  337. AddVariablePredef(m_rendererVar, light_pass_vert_shader);
  338. AddVariablePredef(m_rendererVar, light_pass_frag_shader);
  339. AddVariablePredef(m_rendererVar, final_pass_vert_shader);
  340. AddVariablePredef(m_rendererVar, final_pass_frag_shader);
  341. AddVariablePredef(m_rendererVar, final_pass_vert_shader);
  342. AddVariablePredef(m_rendererVar, final_pass_frag_shader);
  343. AddVariablePredef(m_rendererVar, reflection_pass_vert_shader);
  344. AddVariablePredef(m_rendererVar, reflection_pass_frag_shader);
  345. AddVariablePredef(m_rendererVar, lens_flare_dirt_texture);
  346. AddVariablePredef(m_rendererVar, lens_flare_ghost_gradient_texture);
  347. AddVariablePredef(m_rendererVar, lens_flare_starburst_texture);
  348. AddVariablePredef(m_rendererVar, dir_light_quad_offset_x);
  349. AddVariablePredef(m_rendererVar, dir_light_quad_offset_y);
  350. AddVariablePredef(m_rendererVar, dir_light_quad_offset_z);
  351. AddVariablePredef(m_rendererVar, dir_light_quad_rotation_x);
  352. AddVariablePredef(m_rendererVar, dir_light_quad_rotation_y);
  353. AddVariablePredef(m_rendererVar, dir_light_quad_rotation_z);
  354. AddVariablePredef(m_rendererVar, depth_test_func);
  355. AddVariablePredef(m_rendererVar, face_culling_mode);
  356. AddVariablePredef(m_rendererVar, heightmap_combine_channel);
  357. AddVariablePredef(m_rendererVar, heightmap_combine_texture);
  358. AddVariablePredef(m_rendererVar, max_num_point_lights);
  359. AddVariablePredef(m_rendererVar, max_num_spot_lights);
  360. AddVariablePredef(m_rendererVar, objects_loaded_per_frame);
  361. AddVariablePredef(m_rendererVar, render_to_texture_buffer);
  362. AddVariablePredef(m_rendererVar, shader_pool_size);
  363. AddVariablePredef(m_rendererVar, depth_test);
  364. AddVariablePredef(m_rendererVar, face_culling);
  365. // Script variables
  366. AddVariablePredef(m_scriptVar, iniFunctionName);
  367. AddVariablePredef(m_scriptVar, updateFunctionName);
  368. AddVariablePredef(m_scriptVar, createObjectFunctionName);
  369. AddVariablePredef(m_scriptVar, userTypeTableName);
  370. // Shader variables
  371. AddVariablePredef(m_shaderVar, atmScatProjMatUniform);
  372. AddVariablePredef(m_shaderVar, modelMatUniform);
  373. AddVariablePredef(m_shaderVar, viewMatUniform);
  374. AddVariablePredef(m_shaderVar, projectionMatUniform);
  375. AddVariablePredef(m_shaderVar, viewProjectionMatUniform);
  376. AddVariablePredef(m_shaderVar, modelViewMatUniform);
  377. AddVariablePredef(m_shaderVar, modelViewProjectionMatUniform);
  378. AddVariablePredef(m_shaderVar, transposeViewMatUniform);
  379. AddVariablePredef(m_shaderVar, screenSizeUniform);
  380. AddVariablePredef(m_shaderVar, screenNumOfPixelsUniform);
  381. AddVariablePredef(m_shaderVar, deltaTimeMSUniform);
  382. AddVariablePredef(m_shaderVar, deltaTimeSUniform);
  383. AddVariablePredef(m_shaderVar, elapsedTimeUniform);
  384. AddVariablePredef(m_shaderVar, gammaUniform);
  385. AddVariablePredef(m_shaderVar, alphaCullingUniform);
  386. AddVariablePredef(m_shaderVar, alphaThresholdUniform);
  387. AddVariablePredef(m_shaderVar, emissiveMultiplierUniform);
  388. AddVariablePredef(m_shaderVar, emissiveThresholdUniform);
  389. AddVariablePredef(m_shaderVar, heightScaleUniform);
  390. AddVariablePredef(m_shaderVar, combinedTextureUniform);
  391. AddVariablePredef(m_shaderVar, textureTilingFactorUniform);
  392. AddVariablePredef(m_shaderVar, LODParallaxUniform);
  393. AddVariablePredef(m_shaderVar, texelSize);
  394. AddVariablePredef(m_shaderVar, numOfTexels);
  395. AddVariablePredef(m_shaderVar, mipLevel);
  396. AddVariablePredef(m_shaderVar, dirLightColor);
  397. AddVariablePredef(m_shaderVar, dirLightDirection);
  398. AddVariablePredef(m_shaderVar, dirLightIntensity);
  399. AddVariablePredef(m_shaderVar, numPointLightsUniform);
  400. AddVariablePredef(m_shaderVar, numSpotLightsUniform);
  401. AddVariablePredef(m_shaderVar, pointLightViewProjectionMatUniform);
  402. AddVariablePredef(m_shaderVar, pointLightBuffer);
  403. AddVariablePredef(m_shaderVar, spotLightBuffer);
  404. AddVariablePredef(m_shaderVar, spotLightViewProjectionMatUniform);
  405. AddVariablePredef(m_shaderVar, stencilPassViewProjectionMatUniform);
  406. AddVariablePredef(m_shaderVar, dirShadowMapMVPUniform);
  407. AddVariablePredef(m_shaderVar, dirShadowMapBiasMVPUniform);
  408. AddVariablePredef(m_shaderVar, cameraPosVecUniform);
  409. AddVariablePredef(m_shaderVar, cameraUpVecUniform);
  410. AddVariablePredef(m_shaderVar, cameraRightVecUniform);
  411. AddVariablePredef(m_shaderVar, positionMapUniform);
  412. AddVariablePredef(m_shaderVar, diffuseMapUniform);
  413. AddVariablePredef(m_shaderVar, normalMapUniform);
  414. AddVariablePredef(m_shaderVar, emissiveMapUniform);
  415. AddVariablePredef(m_shaderVar, matPropertiesMapUniform);
  416. AddVariablePredef(m_shaderVar, intermediateMapUniform);
  417. AddVariablePredef(m_shaderVar, finalMapUniform);
  418. AddVariablePredef(m_shaderVar, inputColorMapUniform);
  419. AddVariablePredef(m_shaderVar, outputColorMapUniform);
  420. AddVariablePredef(m_shaderVar, sunGlowTextureUniform);
  421. AddVariablePredef(m_shaderVar, skyMapTextureUniform);
  422. AddVariablePredef(m_shaderVar, dirShadowMapTextureUniform);
  423. AddVariablePredef(m_shaderVar, diffuseTextureUniform);
  424. AddVariablePredef(m_shaderVar, normalTextureUniform);
  425. AddVariablePredef(m_shaderVar, specularTextureUniform);
  426. AddVariablePredef(m_shaderVar, emissiveTextureUniform);
  427. AddVariablePredef(m_shaderVar, glossTextureUniform);
  428. AddVariablePredef(m_shaderVar, heightTextureUniform);
  429. AddVariablePredef(m_shaderVar, combinedTextureUniform);
  430. AddVariablePredef(m_shaderVar, averageLuminanceTexture);
  431. AddVariablePredef(m_shaderVar, atmIrradianceTextureUniform);
  432. AddVariablePredef(m_shaderVar, atmScatteringTextureUniform);
  433. AddVariablePredef(m_shaderVar, atmSingleMieScatTextureUniform);
  434. AddVariablePredef(m_shaderVar, atmTransmittanceTextureUniform);
  435. AddVariablePredef(m_shaderVar, bloomTreshold);
  436. AddVariablePredef(m_shaderVar, bloomIntensity);
  437. AddVariablePredef(m_shaderVar, bloomDirtIntensity);
  438. AddVariablePredef(m_shaderVar, inverseLogLuminanceRange);
  439. AddVariablePredef(m_shaderVar, logLuminanceRange);
  440. AddVariablePredef(m_shaderVar, luminanceMultiplier);
  441. AddVariablePredef(m_shaderVar, minLogLuminance);
  442. AddVariablePredef(m_shaderVar, tonemapMethod);
  443. AddVariablePredef(m_shaderVar, lensFlareDirtTextureUniform);
  444. AddVariablePredef(m_shaderVar, lensFlareGhostGradientTextureUniform);
  445. AddVariablePredef(m_shaderVar, lensFlareStarburstTextureUniform);
  446. AddVariablePredef(m_shaderVar, fogDensityUniform);
  447. AddVariablePredef(m_shaderVar, fogColorUniform);
  448. AddVariablePredef(m_shaderVar, billboardScaleUniform);
  449. AddVariablePredef(m_shaderVar, depthTypeUniform);
  450. AddVariablePredef(m_shaderVar, eyeAdaptionRateUniform);
  451. AddVariablePredef(m_shaderVar, eyeAdaptionIntBrightnessUniform);
  452. AddVariablePredef(m_shaderVar, HDRSSBuffer);
  453. AddVariablePredef(m_shaderVar, atmScatParamBuffer);
  454. AddVariablePredef(m_shaderVar, lensFlareParametersBuffer);
  455. AddVariablePredef(m_shaderVar, testMatUniform);
  456. AddVariablePredef(m_shaderVar, testVecUniform);
  457. AddVariablePredef(m_shaderVar, testFloatUniform);
  458. // Texture variables
  459. AddVariablePredef(m_textureVar, default_texture);
  460. AddVariablePredef(m_textureVar, default_emissive_texture);
  461. AddVariablePredef(m_textureVar, default_height_texture);
  462. AddVariablePredef(m_textureVar, default_normal_texture);
  463. AddVariablePredef(m_textureVar, default_specular_intensity);
  464. AddVariablePredef(m_textureVar, default_specular_power);
  465. AddVariablePredef(m_textureVar, diffuse_texture_format);
  466. AddVariablePredef(m_textureVar, normal_texture_format);
  467. AddVariablePredef(m_textureVar, emissive_texture_format);
  468. AddVariablePredef(m_textureVar, roughness_texture_format);
  469. AddVariablePredef(m_textureVar, metalness_texture_format);
  470. AddVariablePredef(m_textureVar, height_texture_format);
  471. AddVariablePredef(m_textureVar, ambientOcclusion_texture_format);
  472. AddVariablePredef(m_textureVar, RMHAO_texture_format);
  473. AddVariablePredef(m_textureVar, gl_texture_anisotropy);
  474. AddVariablePredef(m_textureVar, gl_texture_magnification);
  475. AddVariablePredef(m_textureVar, gl_texture_minification);
  476. AddVariablePredef(m_textureVar, gl_texture_magnification_mipmap);
  477. AddVariablePredef(m_textureVar, gl_texture_minification_mipmap);
  478. AddVariablePredef(m_textureVar, number_of_mipmaps);
  479. AddVariablePredef(m_textureVar, generate_mipmaps);
  480. // Window variables
  481. AddVariablePredef(m_windowVar, name);
  482. AddVariablePredef(m_windowVar, default_display);
  483. AddVariablePredef(m_windowVar, window_position_x);
  484. AddVariablePredef(m_windowVar, window_position_y);
  485. AddVariablePredef(m_windowVar, window_size_fullscreen_x);
  486. AddVariablePredef(m_windowVar, window_size_fullscreen_y);
  487. AddVariablePredef(m_windowVar, window_size_windowed_x);
  488. AddVariablePredef(m_windowVar, window_size_windowed_y);
  489. AddVariablePredef(m_windowVar, fullscreen);
  490. AddVariablePredef(m_windowVar, fullscreen_borderless);
  491. AddVariablePredef(m_windowVar, mouse_captured);
  492. AddVariablePredef(m_windowVar, mouse_release_on_lost_focus);
  493. AddVariablePredef(m_windowVar, resizable);
  494. AddVariablePredef(m_windowVar, vertical_sync);
  495. for(int i = Properties::Null; i < Properties::NumberOfPropertyIDs; i++)
  496. {
  497. //Properties::PropertyNames[i] = GetString(static_cast<Properties::PropertyID>(i));
  498. }
  499. }
  500. ErrorCode Config::loadFromFile(const std::string &p_filename)
  501. {
  502. std::ifstream configFile(p_filename, std::ifstream::in);
  503. std::string singleWord;
  504. ErrorCode returnCode = ErrorCode::Success;
  505. if(configFile.fail())
  506. {
  507. returnCode = ErrorCode::Ifstream_failed;
  508. }
  509. else
  510. {
  511. while(!configFile.eof())
  512. {
  513. // Get next word
  514. configFile >> singleWord;
  515. // Match the word in the hash table
  516. auto tableEntry = m_hashTable.find(singleWord);
  517. // If match was found
  518. if(tableEntry != m_hashTable.end())
  519. {
  520. // Get map key and next word (that will be converted to value)
  521. auto mapKey = tableEntry->second;
  522. configFile >> singleWord;
  523. // Pass the word as a value
  524. m_variables[mapKey - m_varVectorOffset].setVariable(singleWord);
  525. // DEBUGGING: log an info error about modified variable
  526. ErrHandlerLoc::get().log(Info, Source_Config, m_variables[mapKey - m_varVectorOffset].toString());
  527. }
  528. }
  529. }
  530. configFile.close();
  531. // Check boundaries of some values that are integer representations of enums
  532. if(m_rendererVar.heightmap_combine_channel < TextureColorChannelOffset::ColorOffset_Red ||
  533. m_rendererVar.heightmap_combine_channel >= TextureColorChannelOffset::ColorOffset_NumChannels)
  534. m_rendererVar.heightmap_combine_channel = TextureColorChannelOffset::ColorOffset_Alpha;
  535. if(m_rendererVar.heightmap_combine_texture < MaterialType_Diffuse ||
  536. m_rendererVar.heightmap_combine_texture >= MaterialType_NumOfTypes)
  537. m_rendererVar.heightmap_combine_texture = MaterialType_Normal;
  538. return returnCode;
  539. }
  540. ErrorCode Config::saveToFile(const std::string &p_filename)
  541. {
  542. std::string fileContents;
  543. for(std::vector<Variable>::size_type i = 0, size = m_variables.size(); i < size; i++)
  544. {
  545. // Only add variables that have been changed (if they haven't no need to add them,
  546. // since they are initialized to that value by default
  547. if(m_variables[i].valueChanged())
  548. {
  549. fileContents += m_variables[i].toString() + "\n";
  550. }
  551. }
  552. return ErrorCode::Success;
  553. }
  554. void Config::setVariable(std::string p_name, std::string p_variable)
  555. {
  556. // Match the name in the hash table
  557. auto tableEntry = m_hashTable.find(p_name);
  558. // If match was found
  559. if(tableEntry != m_hashTable.end())
  560. {
  561. // Get map key
  562. auto mapKey = tableEntry->second;
  563. // Pass the word as a value
  564. m_variables[mapKey - m_varVectorOffset].setVariable(p_variable);
  565. // DEBUGGING: log an info error about modified variable
  566. ErrHandlerLoc::get().log(Info, Source_Config, m_variables[mapKey - m_varVectorOffset].toString());
  567. }
  568. }