Skip to content

Commit 53cb78f

Browse files
Merge pull request #62 from Redotix/Scope-fix
3D Shader scopes rendering adjustments (cherry picked from commit d0a0f72)
1 parent fbbb615 commit 53cb78f

15 files changed

+178
-10
lines changed

src/Layers/xrRender/Shader.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,13 +108,22 @@ ShaderElement::ShaderElement()
108108
// SSS Custom rendering
109109
flags.isLandscape = FALSE;
110110
flags.isWater = FALSE;
111+
112+
flags.iScopeLense = 0; // Redotix99: for 3D Shader Based Scopes
113+
// 0 = eNoLense,
114+
// 1 = eBackLense,
115+
// 2 = eZwriteLense,
116+
// 3 = eReticleLense
111117
}
112118

113119
BOOL ShaderElement::equal(ShaderElement& S)
114120
{
115121
if (flags.iPriority != S.flags.iPriority) return FALSE;
116122
if (flags.bStrictB2F != S.flags.bStrictB2F) return FALSE;
117123
if (flags.bEmissive != S.flags.bEmissive) return FALSE;
124+
125+
if (flags.iScopeLense != S.flags.iScopeLense) return FALSE; // Redotix99: for 3D Shader Based Scopes
126+
118127
if (flags.bLandscape != S.flags.bLandscape) return FALSE;
119128
if (flags.bWmark != S.flags.bWmark) return FALSE;
120129
if (flags.bDistort != S.flags.bDistort) return FALSE;

src/Layers/xrRender/Shader.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,8 @@ struct ECORE_API ShaderElement : public xr_resource_flagged
129129
u32 bLandscape : 1;
130130
u32 isLandscape : 1;
131131
u32 isWater : 1;
132+
133+
u32 iScopeLense : 2; // Redotix99: for 3D Shader Based Scopes
132134
};
133135

134136
public:

src/Layers/xrRender/r__dsgraph_build.cpp

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,53 @@ void R_dsgraph_structure::r_dsgraph_insert_dynamic(dxRender_Visual* pVisual, Fve
7373
// NOTE: Invisible elements exist only in R1
7474
_MatrixItem item = {SSA, RI.val_pObject, pVisual, *RI.val_pTransform};
7575

76+
#if defined(USE_DX11) // Redotix99: for 3D Shader Based Scopes
77+
switch (sh->flags.iScopeLense) {
78+
case 0:
79+
break;
80+
81+
case 1: {
82+
mapHUD_Node* N = mapHUD.insertInAnyWay(EPS);
83+
N->val.ssa = SSA;
84+
N->val.pObject = RI.val_pObject;
85+
N->val.pVisual = pVisual;
86+
N->val.Matrix = *RI.val_pTransform;
87+
N->val.se = sh;
88+
89+
if (!sh->passes[0]->ps->hud_disabled)
90+
{
91+
HUDMask_Node* N2 = HUDMask.insertInAnyWay(EPS);
92+
N2->val.ssa = SSA;
93+
N2->val.pObject = RI.val_pObject;
94+
N2->val.pVisual = pVisual;
95+
N2->val.Matrix = *RI.val_pTransform;
96+
N2->val.se = sh;
97+
}
98+
return;
99+
}
100+
101+
case 2: {
102+
mapHUD_Node * N = mapScopeHUD.insertInAnyWay(distSQ);
103+
N->val.ssa = SSA;
104+
N->val.pObject = RI.val_pObject;
105+
N->val.pVisual = pVisual;
106+
N->val.Matrix = *RI.val_pTransform;
107+
N->val.se = sh;
108+
return;
109+
}
110+
111+
case 3: {
112+
mapSorted_Node * N = mapScopeHUDSorted.insertInAnyWay(distSQ);
113+
N->val.ssa = SSA;
114+
N->val.pObject = RI.val_pObject;
115+
N->val.pVisual = pVisual;
116+
N->val.Matrix = *RI.val_pTransform;
117+
N->val.se = sh;
118+
return;
119+
}
120+
}
121+
#endif
122+
76123
// HUD rendering
77124
if (RI.val_bHUD)
78125
{

src/Layers/xrRender/r__dsgraph_render.cpp

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -593,20 +593,32 @@ void R_dsgraph_structure::r_dsgraph_render_hud(bool NoPS)
593593
Device.mFullTransform.mul(Device.mProject, Device.mView);
594594
RCache.set_xform_project(Device.mProject);
595595

596+
596597
// Rendering
597598
rmNear();
598599
if (!NoPS)
599600
{
600601
mapHUD.traverseLR(sorted_L1);
601602
mapHUD.clear();
603+
604+
rmNormal();
605+
606+
#if defined(USE_DX11) // Redotix99: for 3D Shader Based Scopes
607+
608+
if (scope_3D_fake_enabled)
609+
{
610+
mapScopeHUD.traverseLR(sorted_L1);
611+
}
612+
mapScopeHUD.clear();
613+
#endif
602614
}
603615
else
604616
{
605617
HUDMask.traverseLR(hud_node);
606618
HUDMask.clear();
607-
}
608619

609-
rmNormal();
620+
rmNormal();
621+
}
610622

611623
// Restore projection
612624
Device.mProject = Pold;
@@ -669,6 +681,35 @@ void R_dsgraph_structure::r_dsgraph_render_sorted()
669681
RCache.set_xform_project(Device.mProject);
670682
}
671683

684+
#if defined(USE_DX11)
685+
//////////////////////////////////////////////////////////////////////////
686+
// strict-sorted render
687+
void R_dsgraph_structure::r_dsgraph_render_ScopeSorted() // Redotix99: for 3D Shader Based Scopes
688+
{
689+
// Change projection
690+
Fmatrix Pold = Device.mProject;
691+
Fmatrix FTold = Device.mFullTransform;
692+
Device.mProject.build_projection(
693+
deg2rad(psHUD_FOV * 83.f),
694+
Device.fASPECT, R_VIEWPORT_NEAR,
695+
g_pGamePersistent->Environment().CurrentEnv->far_plane);
696+
697+
Device.mFullTransform.mul(Device.mProject, Device.mView);
698+
RCache.set_xform_project(Device.mProject);
699+
700+
// Rendering
701+
rmNear();
702+
mapScopeHUDSorted.traverseRL(sorted_L1);
703+
mapScopeHUDSorted.clear();
704+
rmNormal();
705+
706+
// Restore projection
707+
Device.mProject = Pold;
708+
Device.mFullTransform = FTold;
709+
RCache.set_xform_project(Device.mProject);
710+
}
711+
#endif
712+
672713
//////////////////////////////////////////////////////////////////////////
673714
// strict-sorted render
674715
void R_dsgraph_structure::r_dsgraph_render_emissive()

src/Layers/xrRender/r__dsgraph_structure.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ class R_dsgraph_structure : public IRender_interface, public pureFrame
4343
R_dsgraph::mapLOD_T mapLOD;
4444
R_dsgraph::mapSorted_T mapDistort;
4545
R_dsgraph::mapHUD_T mapHUDSorted;
46+
#if defined(USE_DX11)
47+
R_dsgraph::mapScopeHUD_T mapScopeHUD; // Redotix99: for 3D Shader Based Scopes
48+
R_dsgraph::mapScopeHUD_T mapScopeHUDSorted;
49+
#endif
4650
R_dsgraph::mapLandscape_T mapLandscape;
4751
R_dsgraph::HUDMask_T HUDMask;
4852
R_dsgraph::mapWater_T mapWater;
@@ -197,6 +201,9 @@ class R_dsgraph_structure : public IRender_interface, public pureFrame
197201
void r_dsgraph_render_hud_ui();
198202
void r_dsgraph_render_lods(bool _setup_zb, bool _clear);
199203
void r_dsgraph_render_sorted();
204+
#if defined(USE_DX11)
205+
void r_dsgraph_render_ScopeSorted(); // Redotix99: for 3D Shader Based Scopes
206+
#endif
200207
void r_dsgraph_render_emissive();
201208
void r_dsgraph_render_wmarks();
202209
void r_dsgraph_render_distort();

src/Layers/xrRender/r__dsgraph_types.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,11 @@ namespace R_dsgraph
219219
typedef FixedMAP<float, _MatrixItemS, render_allocator> mapHUD_T;
220220
typedef mapHUD_T::TNode mapHUD_Node;
221221

222+
#if defined(USE_DX11)
223+
typedef FixedMAP<float, _MatrixItemS, render_allocator> mapScopeHUD_T; // Redotix99: for 3D Shader Based Scopes
224+
typedef mapScopeHUD_T::TNode mapScopeHUD_T_Node;
225+
#endif
226+
222227
typedef FixedMAP<float, _MatrixItemS, render_allocator> HUDMask_T;
223228
typedef HUDMask_T::TNode HUDMask_Node;
224229

src/Layers/xrRender/rendertarget_phase_nightvision.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,3 +197,17 @@ void CRenderTarget::phase_heatvision()
197197
#endif
198198
};
199199
//--DSR-- HeatVision_start
200+
201+
#if defined(USE_DX11) // Redotix99: for 3D Shader Based Scopes (sorry for using the nightvision phase file)
202+
void CRenderTarget::phase_3DSSReticle()
203+
{
204+
HW.pContext->CopyResource(rt_Generic_temp->pTexture->surface_get(), rt_Generic_0->pTexture->surface_get());
205+
u_setrt(RImplementation.Target->rt_Generic_0, RImplementation.Target->rt_Position, 0, HW.pBaseZB);
206+
207+
RCache.set_CullMode(CULL_CCW);
208+
RCache.set_Stencil(FALSE);
209+
RCache.set_ColorWriteEnable();
210+
211+
RImplementation.render_Reticle();
212+
};
213+
#endif

src/Layers/xrRender/xrRender_console.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,7 @@ Fvector4 heat_vision_args_2 = { .0f, .0f, .0f, .0f };
281281
//--DSR-- HeatVision_end
282282
//crookr
283283
int scope_fake_enabled = 1;
284+
int scope_3D_fake_enabled = 0; // Redotix99: for 3D Shader Based Scopes
284285
//string32 scope_fake_texture = "wpn\\wpn_crosshair_pso1";
285286

286287
float ps_r2_ss_sunshafts_length = 1.f;
@@ -1171,6 +1172,7 @@ void xrRender_initconsole()
11711172
CMD4(CCC_Integer, "r__nightvision", &ps_r2_nightvision, 0, 3); //For beef's nightvision shader or other stuff
11721173

11731174
CMD4(CCC_Integer, "r__fakescope", &scope_fake_enabled, 0, 1); //crookr for fake scope
1175+
CMD4(CCC_Integer, "r__3Dfakescope", &scope_3D_fake_enabled, 0, 1); // Redotix99: for 3D Shader Based Scopes
11741176

11751177
CMD4(CCC_Integer, "r__heatvision", &ps_r2_heatvision, 0, 1); //--DSR-- HeatVision
11761178
CMD3(CCC_Mask, "r2_terrain_z_prepass", &ps_r2_ls_flags, R2FLAG_TERRAIN_PREPASS); //Terrain Z Prepass @Zagolski

src/Layers/xrRender/xrRender_console.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ extern ECORE_API Fvector4 ps_r2_mask_control; // r2-only
167167
extern ECORE_API Fvector ps_r2_drops_control; // r2-only
168168
extern ECORE_API int ps_r2_nightvision;
169169
extern ECORE_API int scope_fake_enabled; //crookr
170+
extern ECORE_API int scope_3D_fake_enabled; // Redotix99: for 3D Shader Based Scopes
170171
extern ECORE_API int ps_r2_heatvision; //--DSR-- HeatVision
171172
extern ECORE_API int heat_vision_cooldown; //--DSR-- HeatVision
172173
extern ECORE_API float heat_vision_cooldown_time; //--DSR-- HeatVision

src/Layers/xrRenderDX10/dx10ResourceManager_Scripting.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,13 @@ class adopt_compiler
118118
return *this;
119119
}
120120

121+
// Redotix99: for 3D Shader Based Scopes
122+
adopt_compiler& _o_scopelense(u32 lenseType)
123+
{
124+
C->SH->flags.iScopeLense = lenseType;
125+
return *this;
126+
}
127+
121128
adopt_compiler& _o_distort(bool E)
122129
{
123130
C->SH->flags.bDistort = E;
@@ -396,6 +403,9 @@ void CResourceManager::LS_Load()
396403
.def("zb", &adopt_compiler::_ZB, return_reference_to(_1))
397404
.def("blend", &adopt_compiler::_blend, return_reference_to(_1))
398405
.def("aref", &adopt_compiler::_aref, return_reference_to(_1))
406+
407+
.def("scopelense", &adopt_compiler::_o_scopelense, return_reference_to(_1)) // Redotix99: for 3D Shader Based Scopes
408+
399409
// For compatibility only
400410
.def("dx10color_write_enable", &adopt_compiler::_dx10color_write_enable, return_reference_to(_1))
401411
.def("color_write_enable", &adopt_compiler::_dx10color_write_enable, return_reference_to(_1))
@@ -407,7 +417,7 @@ void CResourceManager::LS_Load()
407417
.def("dx10zfunc", &adopt_compiler::_dx10ZFunc, return_reference_to(_1))
408418

409419
.def("dx10sampler", &adopt_compiler::_dx10sampler) // returns sampler-object
410-
.def("dx10Options", &adopt_compiler::_dx10Options), // returns options-object
420+
.def("dx10Options", &adopt_compiler::_dx10Options), // returns options-object
411421

412422

413423
class_<adopt_blend>("blend")

0 commit comments

Comments
 (0)