Config.cpp 26 KB

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