Skip to content

Commit

Permalink
xrRender_R1: port more of LightShadows code to FFP (#1313)
Browse files Browse the repository at this point in the history
  • Loading branch information
Xottab-DUTY committed May 3, 2023
1 parent 49da220 commit 529ba93
Show file tree
Hide file tree
Showing 6 changed files with 91 additions and 2 deletions.
46 changes: 46 additions & 0 deletions src/Layers/xrRender/blenders/Blender_Shadow_Texture.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#include "stdafx.h"

#include "Blender_Shadow_Texture.h"

#if RENDER != R_R1
#error "The blender can't be used in this renderer generation"
#endif

CBlender_ShTex::CBlender_ShTex()
{
description.CLS = B_SHADOW_TEX;
}

LPCSTR CBlender_ShTex::getComment()
{
return "INTERNAL: shadow rendering";
}

BOOL CBlender_ShTex::canBeLMAPped()
{
return FALSE;
}

void CBlender_ShTex::Compile(CBlender_Compile& C)
{
IBlender::Compile(C);
C.PassBegin();
{
C.PassSET_ZB(FALSE, FALSE);
C.PassSET_Blend_SET();
C.PassSET_LightFog(FALSE, FALSE);

// Stage0 - Base texture
C.StageBegin();
C.StageSET_Color(D3DTA_TFACTOR, D3DTOP_SELECTARG1, D3DTA_TFACTOR);
C.StageSET_Alpha(D3DTA_TFACTOR, D3DTOP_SELECTARG1, D3DTA_TFACTOR);
C.Stage_Texture("$null");
C.Stage_Matrix("$null", 0);
C.Stage_Constant("$null");
C.StageEnd();

//
C.R().SetRS(D3DRS_TEXTUREFACTOR, 0);
}
C.PassEnd();
}
12 changes: 12 additions & 0 deletions src/Layers/xrRender/blenders/Blender_Shadow_Texture.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#pragma once

class CBlender_ShTex : public IBlender
{
public:
CBlender_ShTex();

LPCSTR getComment() override;
BOOL canBeLMAPped() override;

void Compile (CBlender_Compile& C) override;
};
26 changes: 24 additions & 2 deletions src/Layers/xrRenderPC_R1/LightShadows.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include "xrEngine/xr_object.h"
#include "Layers/xrRender/FBasicVisual.h"
#include "Layers/xrRender/blenders/Blender_Blur.h"
#include "Layers/xrRender/blenders/Blender_Shadow_Texture.h"
#include "xrEngine/CustomHUD.h"

const float S_distance = 144;
Expand Down Expand Up @@ -48,6 +49,16 @@ CLightShadows::CLightShadows() : xrc("LightShadows")
//
recreate_rt();

if (RImplementation.o.ffp)
{
sh_Texture.create("effects\\shadow_texture");
if (!sh_Texture)
{
CBlender_ShTex blender;
sh_Texture.create(&blender, "effects\\shadow_texture");
}
}

sh_World.create("effects" DELIMITER "shadow_world", r1_RT_shadow);
geom_World.create(FVF::F_LIT, RImplementation.Vertex.Buffer(), nullptr);

Expand Down Expand Up @@ -215,6 +226,8 @@ void CLightShadows::calculate()
bRTS = TRUE;
RCache.set_RT(rt_temp->pRT);
RCache.set_ZB(RImplementation.Target->rt_temp_zb->pRT);
if (RImplementation.o.ffp)
RCache.set_Shader(sh_Texture);
RCache.ClearRT(rt_temp, { 1.0f, 1.0f, 1.0f, 1.0f });
}

Expand Down Expand Up @@ -317,7 +330,8 @@ void CLightShadows::calculate()
{
NODE& N = C.nodes[n_it];
dxRender_Visual* V = N.pVisual;
RCache.set_Element(V->shader->E[SE_R1_LMODELS]);
if (!RImplementation.o.ffp)
RCache.set_Element(V->shader->E[SE_R1_LMODELS]);
RCache.set_xform_world(N.Matrix);
V->Render(-1.0f, dsgraph.o.phase == CRender::PHASE_SMAP);
}
Expand Down Expand Up @@ -412,7 +426,15 @@ static ICF float PLC_energy_SSE(const Fvector& p, const Fvector& n, const light*
const float D = lDir.dotproduct(n);
if (D <= 0)
return 0;

// Trace Light
if (RImplementation.o.ffp)
{
const auto& ldata = L->ldata;
const float R = _sqrt(sqD);
const float A = D * e / (ldata.attenuation0 + ldata.attenuation1 * R + ldata.attenuation2 * sqD);
return A;
}
__m128 rcpr = _mm_rsqrt_ss(_mm_load_ss(&sqD));
rcpr = _mm_rcp_ss(_mm_add_ss(rcpr, _mm_set_ss(1.0f)));
float att;
Expand Down Expand Up @@ -479,7 +501,7 @@ void CLightShadows::render()
for (u32 s_it = 0; s_it < shadows.size(); s_it++)
{
shadow& S = shadows[s_it];
float Le = S.L->color.intensity() * S.E;
float Le = RImplementation.o.ffp ? S.L->ldata.diffuse.magnitude_rgb() : S.L->color.intensity() * S.E;
int s_x = S.slot % slot_line;
int s_y = S.slot / slot_line;
Fvector2 t_scale, t_offset;
Expand Down
1 change: 1 addition & 0 deletions src/Layers/xrRenderPC_R1/LightShadows.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ class CLightShadows

ref_rt rt_shadow;
ref_rt rt_temp;
ref_shader sh_Texture;
ref_shader sh_BlurTR;
ref_shader sh_BlurRT;
ref_geom geom_Blur;
Expand Down
2 changes: 2 additions & 0 deletions src/Layers/xrRenderPC_R1/xrRender_R1.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@
<ClInclude Include="..\xrRender\AnimationKeyCalculate.h" />
<ClInclude Include="..\xrRender\Blender.h" />
<ClInclude Include="..\xrRender\blenders\blender_light.h" />
<ClInclude Include="..\xrRender\blenders\Blender_Shadow_Texture.h" />
<ClInclude Include="..\xrRender\Blender_CLSID.h" />
<ClInclude Include="..\xrRender\Blender_Recorder.h" />
<ClInclude Include="..\xrRender\blenders\Blender_BmmD.h" />
Expand Down Expand Up @@ -198,6 +199,7 @@
<ClCompile Include="..\xrRender\Animation.cpp" />
<ClCompile Include="..\xrRender\Blender.cpp" />
<ClCompile Include="..\xrRender\blenders\blender_light.cpp" />
<ClCompile Include="..\xrRender\blenders\Blender_Shadow_Texture.cpp" />
<ClCompile Include="..\xrRender\Blender_Recorder.cpp" />
<ClCompile Include="..\xrRender\blenders\Blender_BmmD.cpp" />
<ClCompile Include="..\xrRender\blenders\Blender_detail_still.cpp" />
Expand Down
6 changes: 6 additions & 0 deletions src/Layers/xrRenderPC_R1/xrRender_R1.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -600,6 +600,9 @@
<ClInclude Include="..\xrRender\blenders\blender_light.h">
<Filter>Shading templates</Filter>
</ClInclude>
<ClInclude Include="..\xrRender\blenders\Blender_Shadow_Texture.h">
<Filter>Shading templates</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="stdafx.cpp">
Expand Down Expand Up @@ -1001,6 +1004,9 @@
<ClCompile Include="..\xrRender\blenders\blender_light.cpp">
<Filter>Shading templates</Filter>
</ClCompile>
<ClCompile Include="..\xrRender\blenders\Blender_Shadow_Texture.cpp">
<Filter>Shading templates</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<Text Include="Pipeline.txt" />
Expand Down

0 comments on commit 529ba93

Please sign in to comment.