diff --git a/game/game.vcxproj b/game/game.vcxproj index 48d008b64..ede217209 100644 --- a/game/game.vcxproj +++ b/game/game.vcxproj @@ -231,6 +231,10 @@ copy /b $(ProjectDir)source\config\version.cpp +,, $(ProjectDir)source\config\ve + + + + @@ -301,11 +305,13 @@ copy /b $(ProjectDir)source\config\version.cpp +,, $(ProjectDir)source\config\ve + + @@ -1121,8 +1127,10 @@ copy /b $(ProjectDir)source\config\version.cpp +,, $(ProjectDir)source\config\ve + + diff --git a/game/game.vcxproj.filters b/game/game.vcxproj.filters index 056928991..c8a857c31 100644 --- a/game/game.vcxproj.filters +++ b/game/game.vcxproj.filters @@ -1638,6 +1638,24 @@ Source Files + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + @@ -3824,6 +3842,12 @@ Header Files + + Header Files + + + Header Files + diff --git a/game/source/gpu_particle/beam_gpu.cpp b/game/source/gpu_particle/beam_gpu.cpp new file mode 100644 index 000000000..dee060904 --- /dev/null +++ b/game/source/gpu_particle/beam_gpu.cpp @@ -0,0 +1,7 @@ +#include "gpu_particle/beam_gpu.hpp" + +void __cdecl c_beam_gpu::shell_initialize() +{ + INVOKE(0x00A51B90, c_beam_gpu::shell_initialize); +} + diff --git a/game/source/gpu_particle/beam_gpu.hpp b/game/source/gpu_particle/beam_gpu.hpp index 727ec722b..e52f1d07a 100644 --- a/game/source/gpu_particle/beam_gpu.hpp +++ b/game/source/gpu_particle/beam_gpu.hpp @@ -6,6 +6,9 @@ struct c_beam_gpu : s_datum_header { +public: + static void __cdecl shell_initialize(); + struct s_row : s_datum_header { diff --git a/game/source/gpu_particle/contrail_gpu.cpp b/game/source/gpu_particle/contrail_gpu.cpp new file mode 100644 index 000000000..0443a6c5c --- /dev/null +++ b/game/source/gpu_particle/contrail_gpu.cpp @@ -0,0 +1,7 @@ +#include "gpu_particle/contrail_gpu.hpp" + +void __cdecl c_contrail_gpu::shell_initialize() +{ + INVOKE(0x00A58460, c_contrail_gpu::shell_initialize); +} + diff --git a/game/source/gpu_particle/contrail_gpu.hpp b/game/source/gpu_particle/contrail_gpu.hpp index 530ea166a..8d22a3021 100644 --- a/game/source/gpu_particle/contrail_gpu.hpp +++ b/game/source/gpu_particle/contrail_gpu.hpp @@ -6,6 +6,9 @@ struct c_contrail_gpu : s_datum_header { +public: + static void __cdecl shell_initialize(); + struct s_row : s_datum_header { diff --git a/game/source/gpu_particle/light_volume_gpu.cpp b/game/source/gpu_particle/light_volume_gpu.cpp new file mode 100644 index 000000000..223147a2c --- /dev/null +++ b/game/source/gpu_particle/light_volume_gpu.cpp @@ -0,0 +1,7 @@ +#include "gpu_particle/light_volume_gpu.hpp" + +void __cdecl c_light_volume_gpu::shell_initialize() +{ + INVOKE(0x00A5D6B0, c_light_volume_gpu::shell_initialize); +} + diff --git a/game/source/gpu_particle/light_volume_gpu.hpp b/game/source/gpu_particle/light_volume_gpu.hpp index 421d949d2..5dd2533ba 100644 --- a/game/source/gpu_particle/light_volume_gpu.hpp +++ b/game/source/gpu_particle/light_volume_gpu.hpp @@ -6,6 +6,9 @@ struct c_light_volume_gpu : s_datum_header { +public: + static void __cdecl shell_initialize(); + struct s_row : s_datum_header { diff --git a/game/source/gpu_particle/particle_block.cpp b/game/source/gpu_particle/particle_block.cpp new file mode 100644 index 000000000..affa0d4a0 --- /dev/null +++ b/game/source/gpu_particle/particle_block.cpp @@ -0,0 +1,7 @@ +#include "gpu_particle/particle_block.hpp" + +void __cdecl c_particle_emitter_gpu::shell_initialize() +{ + INVOKE(0x00A4E9F0, c_particle_emitter_gpu::shell_initialize); +} + diff --git a/game/source/gpu_particle/particle_block.hpp b/game/source/gpu_particle/particle_block.hpp index ae33eef7b..6505d25a4 100644 --- a/game/source/gpu_particle/particle_block.hpp +++ b/game/source/gpu_particle/particle_block.hpp @@ -6,6 +6,9 @@ struct c_particle_emitter_gpu : s_datum_header { +public: + static void __cdecl shell_initialize(); + struct s_row : s_datum_header { diff --git a/game/source/rasterizer/rasterizer.cpp b/game/source/rasterizer/rasterizer.cpp index 2a2d2a337..ac93d3032 100644 --- a/game/source/rasterizer/rasterizer.cpp +++ b/game/source/rasterizer/rasterizer.cpp @@ -2,13 +2,19 @@ #include "cseries/cseries.hpp" #include "cseries/cseries_events.hpp" +#include "gpu_particle/beam_gpu.hpp" +#include "gpu_particle/contrail_gpu.hpp" +#include "gpu_particle/light_volume_gpu.hpp" +#include "gpu_particle/particle_block.hpp" #include "main/global_preferences.hpp" #include "main/main.hpp" #include "memory/module.hpp" #include "memory/thread_local.hpp" +#include "rasterizer/rasterizer_dynamic_render_targets.hpp" #include "rasterizer/rasterizer_main.hpp" #include "rasterizer/rasterizer_memory.hpp" #include "rasterizer/rasterizer_resource_definitions.hpp" +#include "render/render_lens_flares.hpp" #include "render/screen_postprocess.hpp" #include "render_methods/render_method_submit.hpp" #include "shell/shell.hpp" @@ -301,44 +307,44 @@ void __cdecl c_rasterizer::shell_dispose() void __cdecl c_rasterizer::shell_initialize(bool window_exists, bool windowed) { - INVOKE(0x00A20370, shell_initialize, window_exists, windowed); + //INVOKE(0x00A20370, shell_initialize, window_exists, windowed); - //if (!c_rasterizer::initialized) - //{ - // if (c_rasterizer::initialize_device(window_exists, windowed)) - // { - // if (c_rasterizer::g_device) - // { - // c_particle_emitter_gpu::shell_initialize(); - // c_contrail_gpu::shell_initialize(); - // c_light_volume_gpu::shell_initialize(); - // c_beam_gpu::shell_initialize(); - // c_rasterizer_texture_ref::initialize(); - // c_dynamic_render_targets::shell_initialize(); - // c_rasterizer::initialize_after_device_creation_or_reset(); - // rasterizer_memory_initialize(); - // } - // - // c_rasterizer::initialized = true; - // } - //} - //else if (!c_rasterizer::initialized) - //{ - // return; - //} - // - //TLS_DATA_GET_VALUE_REFERENCE(g_rasterizer_game_states); - //TLS_DATA_GET_VALUE_REFERENCE(g_hue_saturation_control_in_gamestate); - // - //g_rasterizer_game_states = (s_rasterizer_game_states*)g_rasterizer_game_states_allocator.allocate(sizeof(s_rasterizer_game_states), "rasterizer game states"); - //g_rasterizer_game_states->motion_blur = true; - //g_rasterizer_game_states->atmosphere_fog = true; - //g_rasterizer_game_states->patchy_fog = true; - //g_rasterizer_game_states->weather = true; - //g_rasterizer_game_states->cinematic_motion_blur = false; - // - //g_hue_saturation_control_in_gamestate = (c_hue_saturation_control*)g_hue_saturation_control_allocator.allocate(sizeof(c_hue_saturation_control), "hue saturation control"); - //*g_hue_saturation_control_in_gamestate = g_hue_saturation_control_default; + if (!c_rasterizer::initialized) + { + if (c_rasterizer::initialize_device(window_exists, windowed)) + { + if (c_rasterizer::g_device) + { + c_particle_emitter_gpu::shell_initialize(); + c_contrail_gpu::shell_initialize(); + c_light_volume_gpu::shell_initialize(); + c_beam_gpu::shell_initialize(); + c_rasterizer_texture_ref::initialize(); + c_dynamic_render_targets::shell_initialize(); + c_rasterizer::initialize_after_device_creation_or_reset(); + rasterizer_memory_initialize(); + lens_flares_initialize(); + } + + c_rasterizer::initialized = true; + } + + if (c_rasterizer::initialized) + { + TLS_DATA_GET_VALUE_REFERENCE(g_rasterizer_game_states); + TLS_DATA_GET_VALUE_REFERENCE(g_hue_saturation_control_in_gamestate); + + g_rasterizer_game_states = (s_rasterizer_game_states*)g_rasterizer_game_states_allocator.allocate(sizeof(s_rasterizer_game_states), "rasterizer game states"); + g_rasterizer_game_states->motion_blur = true; + g_rasterizer_game_states->atmosphere_fog = true; + g_rasterizer_game_states->patchy_fog = true; + g_rasterizer_game_states->weather = true; + g_rasterizer_game_states->cinematic_motion_blur = false; + + g_hue_saturation_control_in_gamestate = (c_hue_saturation_control*)g_hue_saturation_control_allocator.allocate(sizeof(c_hue_saturation_control), "hue saturation control"); + *g_hue_saturation_control_in_gamestate = g_hue_saturation_control_default; + } + } } void __cdecl c_rasterizer::set_render_resolution(long width, long height, bool fullscreen) diff --git a/game/source/rasterizer/rasterizer_dynamic_render_targets.cpp b/game/source/rasterizer/rasterizer_dynamic_render_targets.cpp new file mode 100644 index 000000000..bc25edea9 --- /dev/null +++ b/game/source/rasterizer/rasterizer_dynamic_render_targets.cpp @@ -0,0 +1,9 @@ +#include "rasterizer/rasterizer_dynamic_render_targets.hpp" + +#include "cseries/cseries.hpp" + +void __cdecl c_dynamic_render_targets::shell_initialize() +{ + INVOKE(0x00A750E0, c_dynamic_render_targets::shell_initialize); +} + diff --git a/game/source/rasterizer/rasterizer_dynamic_render_targets.hpp b/game/source/rasterizer/rasterizer_dynamic_render_targets.hpp new file mode 100644 index 000000000..2fdac8ea1 --- /dev/null +++ b/game/source/rasterizer/rasterizer_dynamic_render_targets.hpp @@ -0,0 +1,8 @@ +#pragma once + +struct c_dynamic_render_targets +{ +public: + static void __cdecl shell_initialize(); +}; + diff --git a/game/source/rasterizer/rasterizer_text.cpp b/game/source/rasterizer/rasterizer_text.cpp index 580657fb3..0b40a130c 100644 --- a/game/source/rasterizer/rasterizer_text.cpp +++ b/game/source/rasterizer/rasterizer_text.cpp @@ -10,6 +10,11 @@ IDirect3DTexture9* __cdecl c_rasterizer_texture_ref::get_d3d_texture() const return DECLFUNC(0x00A6E8E0, IDirect3DTexture9*, __thiscall, c_rasterizer_texture_ref const*)(this); } +void __cdecl c_rasterizer_texture_ref::initialize() +{ + INVOKE(0x00A6E9C0, c_rasterizer_texture_ref::initialize); +} + void __cdecl c_rasterizer_texture_ref::release(c_rasterizer_texture_ref& texture_ref) { INVOKE(0x00A6EB10, c_rasterizer_texture_ref::release, texture_ref); diff --git a/game/source/rasterizer/rasterizer_text.hpp b/game/source/rasterizer/rasterizer_text.hpp index 02ef5168b..d8de1b89b 100644 --- a/game/source/rasterizer/rasterizer_text.hpp +++ b/game/source/rasterizer/rasterizer_text.hpp @@ -8,6 +8,7 @@ struct c_rasterizer_texture_ref public: static void __cdecl allocate(c_rasterizer_texture_ref& texture_ref, long width, long height, long levels, dword format, long a6, bool a7, long a8, long a9); IDirect3DTexture9* __cdecl get_d3d_texture() const; + static void __cdecl initialize(); static void __cdecl release(c_rasterizer_texture_ref& texture_ref); bool __cdecl valid(); diff --git a/game/source/render/render_lens_flares.cpp b/game/source/render/render_lens_flares.cpp new file mode 100644 index 000000000..8ea2809c9 --- /dev/null +++ b/game/source/render/render_lens_flares.cpp @@ -0,0 +1,9 @@ +#include "render/render_lens_flares.hpp" + +#include "cseries/cseries.hpp" + +void __cdecl lens_flares_initialize() +{ + INVOKE(0x00A5A8E0, lens_flares_initialize); +} + diff --git a/game/source/render/render_lens_flares.hpp b/game/source/render/render_lens_flares.hpp new file mode 100644 index 000000000..2fb4a1775 --- /dev/null +++ b/game/source/render/render_lens_flares.hpp @@ -0,0 +1,4 @@ +#pragma once + +extern void __cdecl lens_flares_initialize(); +