44#include " game/game.hpp"
55#include " memory/module.hpp"
66#include " memory/thread_local.hpp"
7+ #include " rasterizer/rasterizer.hpp"
78#include " rasterizer/rasterizer_profile.hpp"
9+ #include " render_methods/render_method_submit.hpp"
10+
11+ REFERENCE_DECLARE (0x0166E170 , const s_shader_extern_info, c_decal::x_shader_extern_info);
812
913HOOK_DECLARE_CLASS_MEMBER (0x00694430 , c_decal, render);
10- HOOK_DECLARE_CLASS (0x00694790 , c_decal, render_all);
14+ // HOOK_DECLARE_CLASS(0x00694790, c_decal, render_all);
15+ HOOK_DECLARE_CLASS (0x00694810 , c_decal_system, render_all);
1116HOOK_DECLARE (0x006948C0 , sub_6948C0);
1217
1318bool disable_sub_6948C0 = true ;
@@ -67,8 +72,7 @@ void __cdecl c_decal_system::prepare_for_non_bsp_zone_set_switch(const s_game_no
6772 INVOKE (0x006941B0 , prepare_for_non_bsp_zone_set_switch, old_non_bsp_zone_set, new_non_bsp_zone_set, pending_zone_registry);
6873}
6974
70- // void __cdecl c_decal::render(c_decal_definition::e_pass) const
71- void __thiscall c_decal::render (int32 pass)
75+ void __thiscall c_decal::render (c_decal_definition::e_pass pass)// const
7276{
7377 // INVOKE_CLASS_MEMBER(0x00694430, c_decal, render, pass);
7478
@@ -83,14 +87,41 @@ void __thiscall c_decal::render(int32 pass)
8387 HOOK_INVOKE_CLASS_MEMBER (, c_decal, render, pass);
8488}
8589
86- // void __cdecl c_decal::render_all(enum c_decal_definition::e_pass)
87- void __cdecl c_decal::render_all (int32 pass)
90+ void __cdecl c_decal::render_all (c_decal_definition::e_pass pass)
91+ {
92+ INVOKE (0x00694790 , c_decal::render_all, pass);
93+ }
94+
95+ void __cdecl c_decal_system::render_all (c_decal_definition::e_pass pass)
8896{
89- // INVOKE(0x00694790, c_decal ::render_all, pass);
97+ // INVOKE(0x00694810, c_decal_system ::render_all, pass);
9098
9199 c_rasterizer_profile_scope _decals (_rasterizer_profile_element_effects, L" decals" );
92100
93- HOOK_INVOKE_CLASS (, c_decal, render_all, decltype (&c_decal::render_all), pass);
101+ c_rasterizer::set_z_buffer_mode (c_rasterizer::_z_buffer_mode_decals);
102+ c_rasterizer::set_cull_mode (c_rasterizer::_cull_mode_off);
103+ c_rasterizer::begin_high_quality_blend ();
104+ if (pass == c_decal_definition::_pass_post_albedo)
105+ {
106+ c_rasterizer::set_color_write_enable (0 , c_rasterizer::_color_write_enable_color);
107+ }
108+ else
109+ {
110+ c_rasterizer::set_render_target (1 , c_rasterizer::_surface_normal, 0xFFFFFFFF );
111+ }
112+ render_method_submit_data (global_structure_bsp_first_active_index_get (), &c_decal::x_shader_extern_info);
113+ c_rasterizer::set_stencil_mode (c_rasterizer::_stencil_mode_decals);
114+ c_decal::render_all (pass);
115+ c_rasterizer::set_cull_mode (c_rasterizer::_cull_mode_cw);
116+ c_rasterizer::end_high_quality_blend ();
117+ c_rasterizer::set_separate_alpha_blend_mode (c_rasterizer::_separate_alpha_blend_off);
118+ c_rasterizer::set_z_buffer_mode (c_rasterizer::_z_buffer_mode_write);
119+ c_rasterizer::set_alpha_blend_mode (c_rasterizer::_alpha_blend_additive);
120+ c_rasterizer::set_alpha_blend_mode (c_rasterizer::_alpha_blend_opaque);
121+ c_rasterizer::set_render_target (1 , c_rasterizer::_surface_none, 0xFFFFFFFF );
122+ c_rasterizer::set_stencil_mode (c_rasterizer::_stencil_mode_off);
123+ c_rasterizer::set_color_write_enable (0 , c_rasterizer::_color_write_enable_color);
124+ render_method_submit_valid (false );
94125}
95126
96127// .text:00695030 ; public: void __cdecl c_decal::submit() const
0 commit comments