From 61a185df888169d9417424ea8bcdab9d61d49b33 Mon Sep 17 00:00:00 2001 From: theTwister <6237734+twist84@users.noreply.github.com> Date: Thu, 7 Nov 2024 12:13:57 +0000 Subject: [PATCH] Added more d3d pix events `lightshafts` `lens flares` `render_misc_transparents` `transparents` --- game/game.vcxproj | 2 + game/game.vcxproj.filters | 6 ++ game/source/memory/thread_local.hpp | 1 + game/source/rasterizer/rasterizer.cpp | 15 +++- game/source/rasterizer/rasterizer.hpp | 4 +- .../rasterizer_occlusion_queries.cpp | 9 +++ .../rasterizer_occlusion_queries.hpp | 4 + game/source/render/camera_fx_settings.hpp | 63 +++++++++++++-- game/source/render/render_game_state.hpp | 5 +- game/source/render/render_lens_flares.cpp | 9 +++ game/source/render/render_lens_flares.hpp | 1 + game/source/render/render_lights.cpp | 7 ++ game/source/render/render_transparents.cpp | 23 ++++++ game/source/render/render_transparents.hpp | 9 +++ game/source/render/screen_postprocess.cpp | 16 ++-- game/source/render/screen_postprocess.hpp | 16 +++- .../render/views/render_player_view.cpp | 79 ++++++++++++++++++- game/source/render/views/render_view.hpp | 5 ++ .../render_methods/render_method_submit.cpp | 11 ++- .../render_methods/render_method_submit.hpp | 2 + 20 files changed, 264 insertions(+), 23 deletions(-) create mode 100644 game/source/rasterizer/rasterizer_occlusion_queries.cpp create mode 100644 game/source/rasterizer/rasterizer_occlusion_queries.hpp diff --git a/game/game.vcxproj b/game/game.vcxproj index 4cb02b895..9a314126b 100644 --- a/game/game.vcxproj +++ b/game/game.vcxproj @@ -317,6 +317,7 @@ copy /b $(ProjectDir)source\config\version.cpp +,, $(ProjectDir)source\config\ve + @@ -1151,6 +1152,7 @@ copy /b $(ProjectDir)source\config\version.cpp +,, $(ProjectDir)source\config\ve + diff --git a/game/game.vcxproj.filters b/game/game.vcxproj.filters index fe0cfa6af..1ad9574af 100644 --- a/game/game.vcxproj.filters +++ b/game/game.vcxproj.filters @@ -1704,6 +1704,9 @@ Source Files + + Source Files + @@ -3926,6 +3929,9 @@ Header Files + + Header Files + diff --git a/game/source/memory/thread_local.hpp b/game/source/memory/thread_local.hpp index 65099270b..29dccf733 100644 --- a/game/source/memory/thread_local.hpp +++ b/game/source/memory/thread_local.hpp @@ -47,6 +47,7 @@ #include "rasterizer/rasterizer_hue_saturation.hpp" #include "rasterizer/rasterizer_implicit_geometry.hpp" #include "rasterizer/rasterizer_main.hpp" +#include "render/camera_fx_settings.hpp" #include "render/depth_of_field.hpp" #include "render/render_game_state.hpp" #include "render/render_objects.hpp" diff --git a/game/source/rasterizer/rasterizer.cpp b/game/source/rasterizer/rasterizer.cpp index 296caadb6..a1764ab54 100644 --- a/game/source/rasterizer/rasterizer.cpp +++ b/game/source/rasterizer/rasterizer.cpp @@ -1049,6 +1049,11 @@ void __cdecl c_rasterizer::set_color_write_enable(long render_state, long render //g_device->SetRenderState(x_last_render_state_types[render_state], render_state_value); } +bool __cdecl c_rasterizer::surface_valid(e_surface surface) +{ + return INVOKE(0x00A490E0, c_rasterizer::surface_valid, surface); +} + bool __cdecl c_rasterizer::set_compiled_pixel_shader(c_rasterizer_compiled_pixel_shader const* compiled_pixel_shader, e_entry_point entry_point) { return INVOKE(0x00A23220, c_rasterizer::set_compiled_pixel_shader, compiled_pixel_shader, entry_point); @@ -1523,9 +1528,10 @@ void __cdecl c_rasterizer::draw_vertices(c_rasterizer_index_buffer::e_primitive_ INVOKE(0x00A283B0, c_rasterizer::draw_vertices, primitive_type, start_vertex, primitive_count); } -void __cdecl c_rasterizer::resolve_entire_surface(e_surface surface, long a2) +// nullsub +void __cdecl c_rasterizer::resolve_entire_surface(e_surface surface, long a2, short_rectangle2d* a3, short a4, short a5) { - INVOKE(0x00A48C50, c_rasterizer::resolve_entire_surface, surface, a2); + //INVOKE(0x00A48C50, c_rasterizer::resolve_entire_surface, surface, a2, a3, a4, a5); } void __cdecl c_rasterizer::set_depth_stencil_surface(e_surface surface) @@ -1538,6 +1544,11 @@ void __cdecl c_rasterizer::set_render_target(long render_target_index, e_surface INVOKE(0x00A48E40, c_rasterizer::set_render_target, render_target_index, surface, render_state); } +void __cdecl c_rasterizer::set_using_albedo_sampler(bool using_albedo_sampler) +{ + INVOKE(0x00A48FE0, c_rasterizer::set_using_albedo_sampler, using_albedo_sampler); +} + void __cdecl c_rasterizer::set_viewport(short_rectangle2d const& viewport, real min_z, real max_z) { //INVOKE(0x00A49010, c_rasterizer::set_viewport, viewport, z_min, z_max); diff --git a/game/source/rasterizer/rasterizer.hpp b/game/source/rasterizer/rasterizer.hpp index fef395770..ae026c480 100644 --- a/game/source/rasterizer/rasterizer.hpp +++ b/game/source/rasterizer/rasterizer.hpp @@ -323,6 +323,7 @@ struct c_rasterizer static void __cdecl set_alpha_blend_mode(e_alpha_blend_mode); static void __cdecl set_alpha_blend_mode_custom_device_no_cache(IDirect3DDevice9Ex*, e_alpha_blend_mode); static void __cdecl set_color_write_enable(long, long); + static bool __cdecl surface_valid(e_surface surface); static bool __cdecl set_compiled_pixel_shader(c_rasterizer_compiled_pixel_shader const*, e_entry_point); static bool __cdecl set_compiled_vertex_shader(c_rasterizer_compiled_vertex_shader const*, e_vertex_type, e_transfer_vector_vertex_types, e_entry_point); static void __cdecl set_cull_mode(e_cull_mode); @@ -355,9 +356,10 @@ struct c_rasterizer static void __cdecl draw_primitive_up(c_rasterizer_index_buffer::e_primitive_type primitive_type, dword primitive_count, void const* stream_data, dword stride); static void __cdecl draw_vertices(c_rasterizer_index_buffer::e_primitive_type primitive_type, long start_vertex, long primitive_count); - static void __cdecl resolve_entire_surface(e_surface surface, long a2); + static void __cdecl resolve_entire_surface(e_surface surface, long a2, short_rectangle2d* a3, short a4, short a5); static void __cdecl set_depth_stencil_surface(e_surface surface); static void __cdecl set_render_target(long render_target_index, e_surface surface, long render_state); + static void __cdecl set_using_albedo_sampler(bool using_albedo_sampler); static void __cdecl set_viewport(short_rectangle2d const& viewport, real min_z, real max_z); static void __cdecl wait_for_gpu_idle(); diff --git a/game/source/rasterizer/rasterizer_occlusion_queries.cpp b/game/source/rasterizer/rasterizer_occlusion_queries.cpp new file mode 100644 index 000000000..090e78d3b --- /dev/null +++ b/game/source/rasterizer/rasterizer_occlusion_queries.cpp @@ -0,0 +1,9 @@ +#include "rasterizer/rasterizer_occlusion_queries.hpp" + +#include "cseries/cseries.hpp" + +void __cdecl rasterizer_occlusions_retrieve(long a1) +{ + INVOKE(0x00A756D0, rasterizer_occlusions_retrieve, a1); +} + diff --git a/game/source/rasterizer/rasterizer_occlusion_queries.hpp b/game/source/rasterizer/rasterizer_occlusion_queries.hpp new file mode 100644 index 000000000..bb75fcd31 --- /dev/null +++ b/game/source/rasterizer/rasterizer_occlusion_queries.hpp @@ -0,0 +1,4 @@ +#pragma once + +extern void __cdecl rasterizer_occlusions_retrieve(long a1); + diff --git a/game/source/render/camera_fx_settings.hpp b/game/source/render/camera_fx_settings.hpp index c4083a0e3..37af4ea93 100644 --- a/game/source/render/camera_fx_settings.hpp +++ b/game/source/render/camera_fx_settings.hpp @@ -1,6 +1,7 @@ #pragma once #include "cseries/cseries.hpp" +#include "tag_files/tag_groups.hpp" struct s_scripted_exposure { @@ -14,9 +15,58 @@ struct s_scripted_exposure }; static_assert(sizeof(s_scripted_exposure) == 0x34); +struct s_ssao_parameter +{ + // SSAO + // SSAO parameters + + dword_flags flags; + + real intensity; + real radius; + real sample_z_threshold; +}; +static_assert(sizeof(s_ssao_parameter) == 0x10); + +struct s_color_grading_parameter +{ + // COLOR GRADING + // Color grading parameters + + dword_flags flags; + + real blend_time; + + s_tag_block curves_editor; + s_tag_block brightness_contrast; + s_tag_block hue_saturation_lightness_vibrance; + s_tag_block colorize_effect; + s_tag_block selective_color; + s_tag_block color_balance; +}; +static_assert(sizeof(s_color_grading_parameter) == 0x50); + +struct s_lightshafts +{ + // LIGHTSHAFTS + // Lightshafts parameters + + dword_flags flags; + + real pitch; // [0...90] + real heading; // [0...360] + real_rgb_color tint; + real depth_clamp; + real intensity_clamp; // [0...1] + real falloff_radius; // [0...2] + real intensity; // [0...50] + real blur_radius; // [0...20] +}; +static_assert(sizeof(s_lightshafts) == 0x2C); + struct c_camera_fx_settings { - byte __data[0x170]; + byte __data[0x164]; //struct exposure; //struct auto_exposure_sensitivity; @@ -33,16 +83,15 @@ struct c_camera_fx_settings //struct bling_count; //struct self_illum_preferred; //struct self_illum_scale; - //struct ssao; - //struct color_grading; - //struct lightshafts; + s_ssao_parameter ssao; + s_color_grading_parameter color_grading; + s_lightshafts lightshafts; }; -static_assert(sizeof(c_camera_fx_settings) == 0x170); +static_assert(sizeof(c_camera_fx_settings) == 0x1F0); struct c_camera_fx_values { - c_camera_fx_settings m_settings; - byte __data[0x80]; + byte __data[0x1F0]; }; static_assert(sizeof(c_camera_fx_values) == 0x1F0); diff --git a/game/source/render/render_game_state.hpp b/game/source/render/render_game_state.hpp index 9ac8d4c7c..e19611a71 100644 --- a/game/source/render/render_game_state.hpp +++ b/game/source/render/render_game_state.hpp @@ -1,6 +1,6 @@ #pragma once -#include "render/camera_fx_settings.hpp" +#include "cseries/cseries.hpp" struct s_render_game_state { @@ -12,8 +12,7 @@ struct s_render_game_state struct s_player_window { - c_camera_fx_settings camera_fx_settings; - c_camera_fx_values camera_fx_values; + byte __data[0x360]; }; static_assert(sizeof(s_player_window) == 0x360); diff --git a/game/source/render/render_lens_flares.cpp b/game/source/render/render_lens_flares.cpp index 8ea2809c9..16cf1cabf 100644 --- a/game/source/render/render_lens_flares.cpp +++ b/game/source/render/render_lens_flares.cpp @@ -2,8 +2,17 @@ #include "cseries/cseries.hpp" +//.text:00A5A840 ; void __cdecl lens_flares_garbage_collect() + void __cdecl lens_flares_initialize() { INVOKE(0x00A5A8E0, lens_flares_initialize); } +//.text:00A5A920 ; + +void __cdecl lens_flares_render(long a1) +{ + INVOKE(0x00A5A960, lens_flares_render, a1); +} + diff --git a/game/source/render/render_lens_flares.hpp b/game/source/render/render_lens_flares.hpp index 2fb4a1775..b91236fc6 100644 --- a/game/source/render/render_lens_flares.hpp +++ b/game/source/render/render_lens_flares.hpp @@ -1,4 +1,5 @@ #pragma once extern void __cdecl lens_flares_initialize(); +extern void __cdecl lens_flares_render(long a1); diff --git a/game/source/render/render_lights.cpp b/game/source/render/render_lights.cpp index e922dfe28..bb4c6769f 100644 --- a/game/source/render/render_lights.cpp +++ b/game/source/render/render_lights.cpp @@ -1,4 +1,11 @@ #include "render/render_lights.hpp" +#include "render/views/render_view.hpp" + REFERENCE_DECLARE(0x05115B3C, bool, render_default_lighting); +void c_lights_view::submit_simple_light_draw_list_to_shader() const +{ + INVOKE_CLASS_MEMBER(0x00A3BF70, c_lights_view, submit_simple_light_draw_list_to_shader); +} + diff --git a/game/source/render/render_transparents.cpp b/game/source/render/render_transparents.cpp index 7245ab90c..36acba8fe 100644 --- a/game/source/render/render_transparents.cpp +++ b/game/source/render/render_transparents.cpp @@ -4,3 +4,26 @@ REFERENCE_DECLARE(0x05216204, short, render_debug_transparent_sort_method); +//.text:00A73580 ; public: static void __cdecl c_transparency_renderer::pop_marker() +//.text:00A735D0 ; public: static void __cdecl c_transparency_renderer::push_marker() +//.text:00A73620 ; + +void __cdecl c_transparency_renderer::render(bool a1) +{ + INVOKE(0x00A73640, c_transparency_renderer::render, a1); +} + +//.text:00A736E0 ; public: static void __cdecl c_transparency_renderer::reset() + +void __cdecl c_transparency_renderer::set_active_camo_bounds(short_rectangle2d const* rect_a, short_rectangle2d const* rect_b) +{ + INVOKE(0x00A73710, c_transparency_renderer::set_active_camo_bounds, rect_a, rect_b); +} + +//.text:00A73770 ; public: static void __cdecl c_transparency_renderer::resolve_framebuffer_for_active_camo() + +void __cdecl c_transparency_renderer::sort() +{ + INVOKE(0x00A73880, c_transparency_renderer::sort); +} + diff --git a/game/source/render/render_transparents.hpp b/game/source/render/render_transparents.hpp index e93566e80..0e0906ae0 100644 --- a/game/source/render/render_transparents.hpp +++ b/game/source/render/render_transparents.hpp @@ -1,4 +1,13 @@ #pragma once +#include "cseries/cseries.hpp" + +struct c_transparency_renderer +{ + static void __cdecl render(bool a1); + static void __cdecl set_active_camo_bounds(short_rectangle2d const* rect_a, short_rectangle2d const* rect_b); + static void __cdecl sort(); +}; + extern short& render_debug_transparent_sort_method; diff --git a/game/source/render/screen_postprocess.cpp b/game/source/render/screen_postprocess.cpp index 533fe3080..f8b4ea7b8 100644 --- a/game/source/render/screen_postprocess.cpp +++ b/game/source/render/screen_postprocess.cpp @@ -12,19 +12,25 @@ REFERENCE_DECLARE(0x01917D50, long, g_ssao_enable); decltype(c_screen_postprocess::postprocess_player_view)* screen_postprocess_postprocess_player_view = c_screen_postprocess::postprocess_player_view; HOOK_DECLARE_CALL(0x00A39F4E, screen_postprocess_postprocess_player_view); HOOK_DECLARE_CALL(0x00A3A171, sub_A62D70); +HOOK_DECLARE_CALL(0x00A61BBD, sub_A62720); HOOK_DECLARE_CLASS(0x00A60460, c_screen_postprocess, copy); HOOK_DECLARE_CLASS(0x00A601E0, c_screen_postprocess, blit); HOOK_DECLARE_CLASS(0x00A60D60, c_screen_postprocess, gaussian_blur); -void __cdecl sub_A62D70(c_camera_fx_values* fx_values, render_projection* projection, render_camera* camera) +void __cdecl sub_A62720(s_lightshafts* lightshafts, render_projection* projection, render_camera* camera, c_rasterizer::e_surface surface_a, c_rasterizer::e_surface surface_b) +{ + c_d3d_pix_event _lightshafts(g_rasterizer_profile_pix_colors[1], L"lightshafts"); + + INVOKE(0x00A62720, sub_A62720, lightshafts, projection, camera, surface_a, surface_b); +} + +void __cdecl sub_A62D70(c_camera_fx_settings* fx_settings, render_projection* projection, render_camera* camera) { if (players_get_active_and_in_game_count(true) > 1) return; - REFERENCE_DECLARE(offset_pointer(fx_values->m_settings.__data, 0x164), dword_flags, ssao_flags); - - bool ssao_enable = TEST_BIT(ssao_flags, 1); + bool ssao_enable = TEST_BIT(fx_settings->ssao.flags, 1); if (g_ssao_enable != NONE) ssao_enable = g_ssao_enable == 1; @@ -32,7 +38,7 @@ void __cdecl sub_A62D70(c_camera_fx_values* fx_values, render_projection* projec { c_d3d_pix_event _ssao(g_rasterizer_profile_pix_colors[1], L"ssao"); - INVOKE(0x00A62D70, sub_A62D70, fx_values, projection, camera); + INVOKE(0x00A62D70, sub_A62D70, fx_settings, projection, camera); } } diff --git a/game/source/render/screen_postprocess.hpp b/game/source/render/screen_postprocess.hpp index 60d81ace6..311691c1e 100644 --- a/game/source/render/screen_postprocess.hpp +++ b/game/source/render/screen_postprocess.hpp @@ -6,6 +6,7 @@ enum e_splitscreen_res; enum e_output_user_index; struct c_camera_fx_values; +struct c_camera_fx_settings; struct render_projection; struct render_camera; struct s_screen_effect_settings; @@ -54,7 +55,20 @@ struct c_screen_postprocess c_rasterizer::e_surface surface); static void __cdecl setup_rasterizer_for_postprocess(bool a1); + + struct s_settings + { + bool __unknown0; + byte __data1[0x37]; + }; + static_assert(sizeof(s_settings) == 0x38); + + static c_screen_postprocess::s_settings const* const& x_settings; + }; -extern void __cdecl sub_A62D70(c_camera_fx_values* fx_values, render_projection* projection, render_camera* camera); +struct s_lightshafts; + +extern void __cdecl sub_A62720(s_lightshafts* lightshafts, render_projection* projection, render_camera* camera, c_rasterizer::e_surface surface_a, c_rasterizer::e_surface surface_b); +extern void __cdecl sub_A62D70(c_camera_fx_settings* fx_settings, render_projection* projection, render_camera* camera); diff --git a/game/source/render/views/render_player_view.cpp b/game/source/render/views/render_player_view.cpp index e2a0cc79f..9cc690972 100644 --- a/game/source/render/views/render_player_view.cpp +++ b/game/source/render/views/render_player_view.cpp @@ -2,15 +2,20 @@ #include "memory/module.hpp" #include "memory/thread_local.hpp" +#include "rasterizer/rasterizer_occlusion_queries.hpp" #include "rasterizer/rasterizer_profile.hpp" #include "render/render_flags.hpp" +#include "render/render_lens_flares.hpp" +#include "render/render_transparents.hpp" #include "render/screen_postprocess.hpp" #include "render/views/render_view.hpp" +#include "render_methods/render_method_submit.hpp" REFERENCE_DECLARE(0x019147BC, real, render_debug_depth_render_scale_r); REFERENCE_DECLARE(0x019147C0, real, render_debug_depth_render_scale_g); REFERENCE_DECLARE(0x019147C4, real, render_debug_depth_render_scale_b); REFERENCE_DECLARE(0x050FB3FC, long, render_debug_depth_render); +REFERENCE_DECLARE(0x01694EC8, c_screen_postprocess::s_settings const* const, c_screen_postprocess::x_settings); HOOK_DECLARE_CLASS_MEMBER(0x00A38040, c_player_view, render_distortions); HOOK_DECLARE_CLASS_MEMBER(0x00A39860, c_player_view, queue_patchy_fog); @@ -20,8 +25,10 @@ HOOK_DECLARE_CLASS(0x00A3A310, c_player_view, render_albedo_decals); HOOK_DECLARE_CLASS_MEMBER(0x00A3A3F0, c_player_view, render_effects); HOOK_DECLARE_CLASS_MEMBER(0x00A3A420, c_player_view, render_first_person); HOOK_DECLARE_CLASS_MEMBER(0x00A3A5F0, c_player_view, render_first_person_albedo); +HOOK_DECLARE_CLASS_MEMBER(0x00A3A6C0, c_player_view, render_lens_flares); HOOK_DECLARE_CLASS_MEMBER(0x00A3A700, c_player_view, render_lightmap_shadows); HOOK_DECLARE_CLASS_MEMBER(0x00A3A8C0, c_player_view, render_static_lighting); +HOOK_DECLARE_CLASS_MEMBER(0x00A3B380, c_player_view, render_transparents); HOOK_DECLARE_CLASS_MEMBER(0x00A3B470, c_player_view, render_water); HOOK_DECLARE_CLASS_MEMBER(0x00A3B500, c_player_view, render_weather_occlusion); HOOK_DECLARE_CLASS_MEMBER(0x00A3BDF0, c_player_view, distortion_generate); @@ -121,7 +128,21 @@ void __thiscall c_player_view::render_first_person_albedo() } //.text:00A3A6B0 ; -//.text:00A3A6C0 ; protected: void __cdecl c_player_view::render_lens_flares() + +void __thiscall c_player_view::render_lens_flares() +{ + //INVOKE_CLASS_MEMBER(0x00A3A6C0, c_player_view::render_lens_flares); + + c_rasterizer::set_using_albedo_sampler(false); + rasterizer_occlusions_retrieve(m_player_index); + + { + c_d3d_pix_event _lens_flares(g_rasterizer_profile_pix_colors[1], L"lens flares"); + lens_flares_render(m_player_view_user_index); + } + + c_rasterizer::set_using_albedo_sampler(c_rasterizer::surface_valid(c_rasterizer::_surface_albedo)); +} void __thiscall c_player_view::render_lightmap_shadows() { @@ -132,7 +153,13 @@ void __thiscall c_player_view::render_lightmap_shadows() HOOK_INVOKE_CLASS_MEMBER(, c_player_view, render_lightmap_shadows); } -//.text:00A3A790 ; protected: void __cdecl c_player_view::render_misc_transparents() +void __cdecl c_player_view::render_misc_transparents() +{ + c_d3d_pix_event _render_misc_transparents(g_rasterizer_profile_pix_colors[1], L"render_misc_transparents"); + + INVOKE(0x00A3A790, c_player_view::render_misc_transparents); +} + //.text:00A3A7A0 ; public: void __cdecl c_player_view::render_patchy_fog() //.text:00A3A7F0 ; render_patchy_fog_callback //.text:00A3A850 ; public: virtual void __cdecl c_player_view::render_setup() @@ -191,7 +218,53 @@ void __cdecl render_texture_camera_initialize_for_new_map() //.text:00A3B280 ; void __cdecl render_texture_camera_set_resolution(long, long) //.text:00A3B2E0 ; void __cdecl render_texture_camera_set_target(real, real, real) //.text:00A3B330 ; void __cdecl render_texture_camera_target_object(long, long) -//.text:00A3B380 ; protected: void __cdecl c_player_view::render_transparents() + +// #TODO: move this +bool __cdecl screenshot_in_progress() +{ + return INVOKE(0x00610310, screenshot_in_progress); +} + +void __thiscall c_player_view::render_transparents() +{ + //INVOKE_CLASS_MEMBER(0x00A3B380, c_player_view, render_transparents); + + render_method_submit_extern_texture_static(_render_method_extern_texture_global_target_z, 0); + render_method_submit_extern_texture_static(_render_method_extern_scene_ldr_texture, 0); + render_method_submit_extern_texture_static(_render_method_extern_texture_global_target_texaccum, 1); + render_method_submit_extern_texture_static(_render_method_extern_texture_global_target_normal, 1); + m_lights_view.submit_simple_light_draw_list_to_shader(); + + { + c_d3d_pix_event _transparents(g_rasterizer_profile_pix_colors[1], L"transparents"); + + c_rasterizer::setup_targets_static_lighting_alpha_blend(c_screen_postprocess::x_settings->__unknown0 || screenshot_in_progress(), true); + c_transparency_renderer::set_active_camo_bounds(&m_rasterizer_camera.window_pixel_bounds, &m_rasterizer_camera.render_pixel_bounds); + c_rasterizer::set_using_albedo_sampler(false); + + { + c_d3d_pix_event _transparents_sky(g_rasterizer_profile_pix_colors[1], L"transparents: sky"); + c_object_renderer::submit_and_render_sky(2, m_player_index); + } + + { + c_d3d_pix_event _transparents_misc(g_rasterizer_profile_pix_colors[1], L"transparents: misc"); + render_misc_transparents(); + } + + c_player_view::render_effects(_effect_pass_transparents); + + { + c_d3d_pix_event _transparents_other(g_rasterizer_profile_pix_colors[1], L"transparents: other"); + c_transparency_renderer::sort(); + c_transparency_renderer::render(true); + c_rasterizer::set_using_albedo_sampler(c_rasterizer::surface_valid(c_rasterizer::_surface_albedo)); + } + } + + render_method_clear_extern(_render_method_extern_texture_global_target_texaccum); + render_method_clear_extern(_render_method_extern_texture_global_target_normal); +} void __thiscall c_player_view::render_water() { diff --git a/game/source/render/views/render_view.hpp b/game/source/render/views/render_view.hpp index 3e81384c6..d64fd856b 100644 --- a/game/source/render/views/render_view.hpp +++ b/game/source/render/views/render_view.hpp @@ -121,6 +121,8 @@ struct c_lights_view : public c_world_view { public: + void submit_simple_light_draw_list_to_shader() const; + static long& g_gel_bitmap_index; static real& g_render_light_intensity; static dword& g_debug_clip_planes; @@ -222,8 +224,11 @@ struct c_player_view : void __thiscall render_effects(e_effect_pass pass); void __thiscall render_first_person(bool a1); void __thiscall render_first_person_albedo(); + void __thiscall render_lens_flares(); void __thiscall render_lightmap_shadows(); + static void __cdecl render_misc_transparents(); void __thiscall render_static_lighting(); + void __thiscall render_transparents(); void __thiscall render_water(); void __thiscall render_weather_occlusion(); void setup_camera(long player_index, long window_count, long window_arrangement, e_output_user_index output_user_index, s_observer_result const* result, bool render_freeze); diff --git a/game/source/render_methods/render_method_submit.cpp b/game/source/render_methods/render_method_submit.cpp index 6aad2cdb0..381da3884 100644 --- a/game/source/render_methods/render_method_submit.cpp +++ b/game/source/render_methods/render_method_submit.cpp @@ -1,10 +1,20 @@ #include "render_methods/render_method_submit.hpp" +void __cdecl render_method_clear_extern(e_render_method_extern render_method_extern) +{ + INVOKE(0x00A3CA30, render_method_clear_extern, render_method_extern); +} + void __cdecl render_method_submit_invalidate_cache() { INVOKE(0x00A3D090, render_method_submit_invalidate_cache); }; +void __cdecl render_method_submit_extern_texture_static(e_render_method_extern render_method_extern, bool a2) +{ + INVOKE(0x00A3D200, render_method_submit_extern_texture_static, render_method_extern, a2); +} + void __cdecl render_state_cache_dispose() { INVOKE(0x00A3DAF0, render_state_cache_dispose); @@ -35,7 +45,6 @@ void __cdecl render_state_cache_initialize_for_new_structure_bsp(dword new_struc INVOKE(0x00A3DB40, render_state_cache_initialize_for_new_structure_bsp, new_structure_bsp_mask); } - char const* k_render_method_extern_names[k_render_method_extern_count] { "none", diff --git a/game/source/render_methods/render_method_submit.hpp b/game/source/render_methods/render_method_submit.hpp index ca12004b7..4aede9e13 100644 --- a/game/source/render_methods/render_method_submit.hpp +++ b/game/source/render_methods/render_method_submit.hpp @@ -61,7 +61,9 @@ enum e_render_method_extern extern char const* k_render_method_extern_names[k_render_method_extern_count]; +extern void __cdecl render_method_clear_extern(e_render_method_extern render_method_extern); extern void __cdecl render_method_submit_invalidate_cache(); +extern void __cdecl render_method_submit_extern_texture_static(e_render_method_extern render_method_extern, bool a2); extern void __cdecl render_state_cache_dispose(); extern void __cdecl render_state_cache_dispose_from_old_map(); extern void __cdecl render_state_cache_dispose_from_old_structure_bsp(dword old_structure_bsp_mask);