Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions src/Layers/xrRender/Shader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -108,13 +108,22 @@ ShaderElement::ShaderElement()
// SSS Custom rendering
flags.isLandscape = FALSE;
flags.isWater = FALSE;

flags.iScopeLense = 0; // Redotix99: for 3D Shader Based Scopes
// 0 = eNoLense,
// 1 = eBackLense,
// 2 = eZwriteLense,
// 3 = eReticleLense
}

BOOL ShaderElement::equal(ShaderElement& S)
{
if (flags.iPriority != S.flags.iPriority) return FALSE;
if (flags.bStrictB2F != S.flags.bStrictB2F) return FALSE;
if (flags.bEmissive != S.flags.bEmissive) return FALSE;

if (flags.iScopeLense != S.flags.iScopeLense) return FALSE; // Redotix99: for 3D Shader Based Scopes

if (flags.bLandscape != S.flags.bLandscape) return FALSE;
if (flags.bWmark != S.flags.bWmark) return FALSE;
if (flags.bDistort != S.flags.bDistort) return FALSE;
Expand Down
2 changes: 2 additions & 0 deletions src/Layers/xrRender/Shader.h
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,8 @@ struct ECORE_API ShaderElement : public xr_resource_flagged
u32 bLandscape : 1;
u32 isLandscape : 1;
u32 isWater : 1;

u32 iScopeLense : 2; // Redotix99: for 3D Shader Based Scopes
};

public:
Expand Down
47 changes: 47 additions & 0 deletions src/Layers/xrRender/r__dsgraph_build.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,53 @@ void R_dsgraph_structure::r_dsgraph_insert_dynamic(dxRender_Visual* pVisual, Fve
// NOTE: Invisible elements exist only in R1
_MatrixItem item = {SSA, RI.val_pObject, pVisual, *RI.val_pTransform};

#if defined(USE_DX11) // Redotix99: for 3D Shader Based Scopes
switch (sh->flags.iScopeLense) {
case 0:
break;

case 1: {
mapHUD_Node* N = mapHUD.insertInAnyWay(EPS);
N->val.ssa = SSA;
N->val.pObject = RI.val_pObject;
N->val.pVisual = pVisual;
N->val.Matrix = *RI.val_pTransform;
N->val.se = sh;

if (!sh->passes[0]->ps->hud_disabled)
{
HUDMask_Node* N2 = HUDMask.insertInAnyWay(EPS);
N2->val.ssa = SSA;
N2->val.pObject = RI.val_pObject;
N2->val.pVisual = pVisual;
N2->val.Matrix = *RI.val_pTransform;
N2->val.se = sh;
}
return;
}

case 2: {
mapHUD_Node * N = mapScopeHUD.insertInAnyWay(distSQ);
N->val.ssa = SSA;
N->val.pObject = RI.val_pObject;
N->val.pVisual = pVisual;
N->val.Matrix = *RI.val_pTransform;
N->val.se = sh;
return;
}

case 3: {
mapSorted_Node * N = mapScopeHUDSorted.insertInAnyWay(distSQ);
N->val.ssa = SSA;
N->val.pObject = RI.val_pObject;
N->val.pVisual = pVisual;
N->val.Matrix = *RI.val_pTransform;
N->val.se = sh;
return;
}
}
#endif

// HUD rendering
if (RI.val_bHUD)
{
Expand Down
45 changes: 43 additions & 2 deletions src/Layers/xrRender/r__dsgraph_render.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -593,20 +593,32 @@ void R_dsgraph_structure::r_dsgraph_render_hud(bool NoPS)
Device.mFullTransform.mul(Device.mProject, Device.mView);
RCache.set_xform_project(Device.mProject);


// Rendering
rmNear();
if (!NoPS)
{
mapHUD.traverseLR(sorted_L1);
mapHUD.clear();

rmNormal();

#if defined(USE_DX11) // Redotix99: for 3D Shader Based Scopes

if (scope_3D_fake_enabled)
{
mapScopeHUD.traverseLR(sorted_L1);
}
mapScopeHUD.clear();
#endif
}
else
{
HUDMask.traverseLR(hud_node);
HUDMask.clear();
}

rmNormal();
rmNormal();
}

// Restore projection
Device.mProject = Pold;
Expand Down Expand Up @@ -669,6 +681,35 @@ void R_dsgraph_structure::r_dsgraph_render_sorted()
RCache.set_xform_project(Device.mProject);
}

#if defined(USE_DX11)
//////////////////////////////////////////////////////////////////////////
// strict-sorted render
void R_dsgraph_structure::r_dsgraph_render_ScopeSorted() // Redotix99: for 3D Shader Based Scopes
{
// Change projection
Fmatrix Pold = Device.mProject;
Fmatrix FTold = Device.mFullTransform;
Device.mProject.build_projection(
deg2rad(psHUD_FOV * 83.f),
Device.fASPECT, R_VIEWPORT_NEAR,
g_pGamePersistent->Environment().CurrentEnv->far_plane);

Device.mFullTransform.mul(Device.mProject, Device.mView);
RCache.set_xform_project(Device.mProject);

// Rendering
rmNear();
mapScopeHUDSorted.traverseRL(sorted_L1);
mapScopeHUDSorted.clear();
rmNormal();

// Restore projection
Device.mProject = Pold;
Device.mFullTransform = FTold;
RCache.set_xform_project(Device.mProject);
}
#endif

//////////////////////////////////////////////////////////////////////////
// strict-sorted render
void R_dsgraph_structure::r_dsgraph_render_emissive()
Expand Down
7 changes: 7 additions & 0 deletions src/Layers/xrRender/r__dsgraph_structure.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,10 @@ class R_dsgraph_structure : public IRender_interface, public pureFrame
R_dsgraph::mapLOD_T mapLOD;
R_dsgraph::mapSorted_T mapDistort;
R_dsgraph::mapHUD_T mapHUDSorted;
#if defined(USE_DX11)
R_dsgraph::mapScopeHUD_T mapScopeHUD; // Redotix99: for 3D Shader Based Scopes
R_dsgraph::mapScopeHUD_T mapScopeHUDSorted;
#endif
R_dsgraph::mapLandscape_T mapLandscape;
R_dsgraph::HUDMask_T HUDMask;
R_dsgraph::mapWater_T mapWater;
Expand Down Expand Up @@ -197,6 +201,9 @@ class R_dsgraph_structure : public IRender_interface, public pureFrame
void r_dsgraph_render_hud_ui();
void r_dsgraph_render_lods(bool _setup_zb, bool _clear);
void r_dsgraph_render_sorted();
#if defined(USE_DX11)
void r_dsgraph_render_ScopeSorted(); // Redotix99: for 3D Shader Based Scopes
#endif
void r_dsgraph_render_emissive();
void r_dsgraph_render_wmarks();
void r_dsgraph_render_distort();
Expand Down
5 changes: 5 additions & 0 deletions src/Layers/xrRender/r__dsgraph_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,11 @@ namespace R_dsgraph
typedef FixedMAP<float, _MatrixItemS, render_allocator> mapHUD_T;
typedef mapHUD_T::TNode mapHUD_Node;

#if defined(USE_DX11)
typedef FixedMAP<float, _MatrixItemS, render_allocator> mapScopeHUD_T; // Redotix99: for 3D Shader Based Scopes
typedef mapScopeHUD_T::TNode mapScopeHUD_T_Node;
#endif

typedef FixedMAP<float, _MatrixItemS, render_allocator> HUDMask_T;
typedef HUDMask_T::TNode HUDMask_Node;

Expand Down
14 changes: 14 additions & 0 deletions src/Layers/xrRender/rendertarget_phase_nightvision.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -197,3 +197,17 @@ void CRenderTarget::phase_heatvision()
#endif
};
//--DSR-- HeatVision_start

#if defined(USE_DX11) // Redotix99: for 3D Shader Based Scopes (sorry for using the nightvision phase file)
void CRenderTarget::phase_3DSSReticle()
{
HW.pContext->CopyResource(rt_Generic_temp->pTexture->surface_get(), rt_Generic_0->pTexture->surface_get());
u_setrt(RImplementation.Target->rt_Generic_0, RImplementation.Target->rt_Position, 0, HW.pBaseZB);

RCache.set_CullMode(CULL_CCW);
RCache.set_Stencil(FALSE);
RCache.set_ColorWriteEnable();

RImplementation.render_Reticle();
};
#endif
2 changes: 2 additions & 0 deletions src/Layers/xrRender/xrRender_console.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,7 @@ Fvector4 heat_vision_args_2 = { .0f, .0f, .0f, .0f };
//--DSR-- HeatVision_end
//crookr
int scope_fake_enabled = 1;
int scope_3D_fake_enabled = 0; // Redotix99: for 3D Shader Based Scopes
//string32 scope_fake_texture = "wpn\\wpn_crosshair_pso1";

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

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

CMD4(CCC_Integer, "r__heatvision", &ps_r2_heatvision, 0, 1); //--DSR-- HeatVision
CMD3(CCC_Mask, "r2_terrain_z_prepass", &ps_r2_ls_flags, R2FLAG_TERRAIN_PREPASS); //Terrain Z Prepass @Zagolski
Expand Down
1 change: 1 addition & 0 deletions src/Layers/xrRender/xrRender_console.h
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,7 @@ extern ECORE_API Fvector4 ps_r2_mask_control; // r2-only
extern ECORE_API Fvector ps_r2_drops_control; // r2-only
extern ECORE_API int ps_r2_nightvision;
extern ECORE_API int scope_fake_enabled; //crookr
extern ECORE_API int scope_3D_fake_enabled; // Redotix99: for 3D Shader Based Scopes
extern ECORE_API int ps_r2_heatvision; //--DSR-- HeatVision
extern ECORE_API int heat_vision_cooldown; //--DSR-- HeatVision
extern ECORE_API float heat_vision_cooldown_time; //--DSR-- HeatVision
Expand Down
12 changes: 11 additions & 1 deletion src/Layers/xrRenderDX10/dx10ResourceManager_Scripting.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,13 @@ class adopt_compiler
return *this;
}

// Redotix99: for 3D Shader Based Scopes
adopt_compiler& _o_scopelense(u32 lenseType)
{
C->SH->flags.iScopeLense = lenseType;
return *this;
}

adopt_compiler& _o_distort(bool E)
{
C->SH->flags.bDistort = E;
Expand Down Expand Up @@ -396,6 +403,9 @@ void CResourceManager::LS_Load()
.def("zb", &adopt_compiler::_ZB, return_reference_to(_1))
.def("blend", &adopt_compiler::_blend, return_reference_to(_1))
.def("aref", &adopt_compiler::_aref, return_reference_to(_1))

.def("scopelense", &adopt_compiler::_o_scopelense, return_reference_to(_1)) // Redotix99: for 3D Shader Based Scopes

// For compatibility only
.def("dx10color_write_enable", &adopt_compiler::_dx10color_write_enable, return_reference_to(_1))
.def("color_write_enable", &adopt_compiler::_dx10color_write_enable, return_reference_to(_1))
Expand All @@ -407,7 +417,7 @@ void CResourceManager::LS_Load()
.def("dx10zfunc", &adopt_compiler::_dx10ZFunc, return_reference_to(_1))

.def("dx10sampler", &adopt_compiler::_dx10sampler) // returns sampler-object
.def("dx10Options", &adopt_compiler::_dx10Options), // returns options-object
.def("dx10Options", &adopt_compiler::_dx10Options), // returns options-object


class_<adopt_blend>("blend")
Expand Down
1 change: 1 addition & 0 deletions src/Layers/xrRenderPC_R4/r4.h
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,7 @@ class CRender : public R_dsgraph_structure
IRender_Sector* rimp_detectSector(Fvector& P, Fvector& D);
void render_main(Fmatrix& mCombined, bool _fportals);
void render_forward();
void render_Reticle();
void render_smap_direct(Fmatrix& mCombined);
void render_indirect(light* L);
void render_lights(light_Package& LP);
Expand Down
16 changes: 16 additions & 0 deletions src/Layers/xrRenderPC_R4/r4_R_render.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,11 @@ void CRender::Render()
Target->disable_aniso();
}

// Redotix99: for 3D Shader Based Scopes
ID3D11Resource* zbuffer_res;
HW.pBaseZB->GetResource(&zbuffer_res);
HW.pContext->CopyResource(RImplementation.Target->rt_tempzb->pSurface, zbuffer_res);

//******* Occlusion testing of volume-limited light-sources
Target->phase_occq();
LP_normal.clear();
Expand Down Expand Up @@ -589,6 +594,17 @@ void CRender::render_forward()
RImplementation.o.distortion = FALSE; // disable distorion
}

// Redotix99: for 3D Shader Based Scopes
void CRender::render_Reticle()
{
VERIFY(0 == mapDistort.size());
RImplementation.o.distortion = RImplementation.o.distortion_enabled;

r_dsgraph_render_ScopeSorted();

RImplementation.o.distortion = FALSE;
}

void CRender::RenderToTarget(RRT target)
{
ref_rt* RT = nullptr;
Expand Down
4 changes: 4 additions & 0 deletions src/Layers/xrRenderPC_R4/r4_rendertarget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -421,7 +421,11 @@ CRenderTarget::CRenderTarget()
rt_Position.create(r2_RT_P, w, h, D3DFMT_A16B16G16R16F, SampleCount);

if (RImplementation.o.dx10_msaa)
{
rt_MSAADepth.create(r2_RT_MSAAdepth, w, h, D3DFMT_D24S8, SampleCount);
}

rt_tempzb.create("$user$temp_zb", w, h, D3DFMT_D24S8); // Redotix99: for 3D Shader Based Scopes

// select albedo & accum
if (RImplementation.o.mrtmixdepth)
Expand Down
5 changes: 5 additions & 0 deletions src/Layers/xrRenderPC_R4/r4_rendertarget.h
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,10 @@ class CRenderTarget : public IRender_Target
Fmatrix Matrix_HUD_previous, Matrix_HUD_current;
Fvector3 Position_previous;
bool RVelocity;

ref_rt rt_tempzb; // Redotix99: for 3D Shader Based Scopes

ref_shader s_ssfx_dumb;

// Igor: for async screenshots
ID3DTexture2D* t_ss_async; //32bit (r,g,b,a) is situated in the system memory
Expand Down Expand Up @@ -348,6 +352,7 @@ class CRenderTarget : public IRender_Target
void phase_nightvision();
void phase_fakescope(); //crookr
void phase_heatvision(); //--DSR-- HeatVision
void phase_3DSSReticle(); // Redotix99: for 3D Shader Based Scopes
void phase_lut();
void phase_smaa();
void phase_scene_prepare();
Expand Down
18 changes: 11 additions & 7 deletions src/Layers/xrRenderPC_R4/r4_rendertarget_phase_combine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,15 +49,15 @@ void CRenderTarget::phase_combine()
Fvector2 p0, p1;

//*** exposure-pipeline
u32 gpu_id = Device.dwFrame%HW.Caps.iGPUNum;
u32 gpu_id = Device.dwFrame % HW.Caps.iGPUNum;
if (Device.m_SecondViewport.IsSVPActive()) //--#SM+#-- +SecondVP+
{
// clang-format off
gpu_id = (Device.dwFrame - 1) % HW.Caps.iGPUNum;
}
{
t_LUM_src->surface_set (rt_LUM_pool[gpu_id*2+0]->pSurface);
t_LUM_dest->surface_set (rt_LUM_pool[gpu_id*2+1]->pSurface);
t_LUM_src->surface_set(rt_LUM_pool[gpu_id * 2 + 0]->pSurface);
t_LUM_dest->surface_set(rt_LUM_pool[gpu_id * 2 + 1]->pSurface);
}

if (RImplementation.o.ssao_hdao && RImplementation.o.ssao_ultra)
Expand Down Expand Up @@ -206,7 +206,7 @@ void CRenderTarget::phase_combine()
envdesc.weight
};

Fvector4 fogclr = {envdesc.fog_color.x, envdesc.fog_color.y, envdesc.fog_color.z, 0};
Fvector4 fogclr = { envdesc.fog_color.x, envdesc.fog_color.y, envdesc.fog_color.z, 0 };
envclr.x *= 2 * ps_r2_sun_lumscale_hemi;
envclr.y *= 2 * ps_r2_sun_lumscale_hemi;
envclr.z *= 2 * ps_r2_sun_lumscale_hemi;
Expand Down Expand Up @@ -330,8 +330,8 @@ void CRenderTarget::phase_combine()
//Copy previous rt
if (!RImplementation.o.dx10_msaa)
HW.pContext->CopyResource(rt_Generic_temp->pTexture->surface_get(), rt_Generic_0->pTexture->surface_get());
else
HW.pContext->CopyResource(rt_Generic_temp->pTexture->surface_get(), rt_Generic_0_r->pTexture->surface_get());
else
HW.pContext->CopyResource(rt_Generic_temp->pTexture->surface_get(), rt_Generic_0_r->pTexture->surface_get());

if (RImplementation.o.ssfx_ssr && !Device.m_SecondViewport.IsSVPFrame())
{
Expand Down Expand Up @@ -478,6 +478,10 @@ void CRenderTarget::phase_combine()
phase_sunshafts();
}


phase_3DSSReticle(); // Redotix99: for 3D Shader Based Scopes


//Compute blur textures
if (!Device.m_SecondViewport.IsSVPFrame()) // Temp fix for blur buffer and SVP
phase_blur();
Expand All @@ -491,7 +495,7 @@ void CRenderTarget::phase_combine()
}

phase_lut();

if(ps_r2_mask_control.x > 0)
{
phase_gasmask_dudv();
Expand Down