Skip to content

Commit 7124ea7

Browse files
ShokerStlkXottab-DUTY
authored andcommitted
SWM: Ported xrEngine
1 parent be8a221 commit 7124ea7

27 files changed

+180
-12
lines changed

src/Layers/xrRender/SkeletonRigid.cpp

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ void CKinematics::LL_ClearAdditionalTransform(u16 bone_id)
171171
}
172172

173173
void CKinematics::BuildBoneMatrix(
174-
const CBoneData* bd, CBoneInstance& bi, const Fmatrix* parent, u8 /*channel_mask = (1<<0)*/)
174+
const CBoneData* bd, CBoneInstance& bi, const Fmatrix* parent, u8 channel_mask /*= (1<<0)*/)
175175
{
176176
bi.mTransform.mul_43(*parent, bd->bind_transform);
177177
CalculateBonesAdditionalTransforms(bd, bi, parent, channel_mask); //--#SM+#--
@@ -182,18 +182,14 @@ void CKinematics::CalculateBonesAdditionalTransforms(
182182
const CBoneData* bd, CBoneInstance& bi, const Fmatrix* parent, u8 channel_mask /* = (1<<0)*/)
183183
{
184184
// bi.mTransform.c - содержит смещение относительно первой кости модели\центра сцены (0, 0, 0)
185-
BONE_TRANSFORM_VECTOR_IT it = m_bones_offsets.begin();
186-
while (it != m_bones_offsets.end())
185+
for (auto& it : m_bones_offsets)
187186
{
188-
if (it->m_bone_id == bd->GetSelfID())
187+
if (it.m_bone_id == bd->GetSelfID())
189188
{
190-
Fvector vOldPos = bi.mTransform.c;
191-
bi.mTransform.mulB_43(it->m_transform); // Rotation
192-
bi.mTransform.c.add(vOldPos, it->m_transform.c); // Translation
189+
const Fvector vOldPos = bi.mTransform.c;
190+
bi.mTransform.mulB_43(it.m_transform); // Rotation
191+
bi.mTransform.c.add(vOldPos, it.m_transform.c); // Translation
193192
}
194-
195-
// next
196-
++it;
197193
}
198194
}
199195

src/Layers/xrRender/r__dsgraph_render.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ class hud_transform_helper
357357
FTold = Device.mFullTransform;
358358

359359
// XXX: Xottab_DUTY: custom FOV. Implement it someday
360-
// It should something like this:
360+
// It should be something like this:
361361
// float customFOV;
362362
// if (isCustomFOV)
363363
// customFOV = V->getVisData().obj_data->m_hud_custom_fov;

src/Layers/xrRenderPC_GL/rgl.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,8 @@ void CRender::OnFrame()
468468
}
469469
}
470470

471+
void CRender::BeforeWorldRender() {}
472+
void CRender::AfterWorldRender() {}
471473

472474
// Implementation
473475
IRender_ObjectSpecific* CRender::ros_create(IRenderable* parent) { return new CROS_impl(); }

src/Layers/xrRenderPC_GL/rgl.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,9 @@ class CRender : public D3DXRenderBase
368368
void ScreenshotAsyncEnd(CMemoryWriter& memory_writer) override;
369369
void OnFrame() override;
370370

371+
void BeforeWorldRender() override; //--#SM+#-- +SecondVP+ Вызывается перед началом рендера мира и пост-эффектов
372+
void AfterWorldRender() override; //--#SM+#-- +SecondVP+ Вызывается после рендера мира и перед UI
373+
371374
// Render mode
372375
void rmNear() override;
373376
void rmFar() override;

src/Layers/xrRenderPC_R1/FStaticRender.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,9 @@ void CRender::OnFrame()
149149
Models->DeleteQueue();
150150
}
151151

152+
void CRender::BeforeWorldRender() {}
153+
void CRender::AfterWorldRender() {}
154+
152155
// Implementation
153156
IRender_ObjectSpecific* CRender::ros_create(IRenderable* parent) { return new CROS_impl(); }
154157
void CRender::ros_destroy(IRender_ObjectSpecific*& p) { xr_delete(p); }

src/Layers/xrRenderPC_R1/FStaticRender.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,9 @@ class CRender : public D3DXRenderBase
188188
virtual void ScreenshotAsyncEnd(CMemoryWriter& memory_writer) override;
189189
virtual void OnFrame() override;
190190

191+
void BeforeWorldRender() override; //--#SM+#-- +SecondVP+ Вызывается перед началом рендера мира и пост-эффектов
192+
void AfterWorldRender() override; //--#SM+#-- +SecondVP+ Вызывается после рендера мира и перед UI
193+
191194
// Render mode
192195
virtual void rmNear() override;
193196
virtual void rmFar() override;

src/Layers/xrRenderPC_R2/r2.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,9 @@ void CRender::OnFrame()
421421
}
422422
}
423423

424+
void CRender::BeforeWorldRender() {}
425+
void CRender::AfterWorldRender() {}
426+
424427
// Implementation
425428
IRender_ObjectSpecific* CRender::ros_create(IRenderable* parent) { return new CROS_impl(); }
426429
void CRender::ros_destroy(IRender_ObjectSpecific*& p) { xr_delete(p); }

src/Layers/xrRenderPC_R2/r2.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,9 @@ class CRender : public D3DXRenderBase
313313
virtual void ScreenshotAsyncEnd(CMemoryWriter& memory_writer);
314314
virtual void OnFrame();
315315

316+
void BeforeWorldRender() override; //--#SM+#-- +SecondVP+ Вызывается перед началом рендера мира и пост-эффектов
317+
void AfterWorldRender() override; //--#SM+#-- +SecondVP+ Вызывается после рендера мира и перед UI
318+
316319
// Render mode
317320
virtual void rmNear();
318321
virtual void rmFar();

src/Layers/xrRenderPC_R3/r3.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -545,6 +545,9 @@ void CRender::OnFrame()
545545
}
546546
}
547547

548+
void CRender::BeforeWorldRender() {}
549+
void CRender::AfterWorldRender() {}
550+
548551
// Implementation
549552
IRender_ObjectSpecific* CRender::ros_create(IRenderable* parent) { return new CROS_impl(); }
550553
void CRender::ros_destroy(IRender_ObjectSpecific*& p) { xr_delete(p); }

src/Layers/xrRenderPC_R3/r3.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,9 @@ class CRender : public D3DXRenderBase
351351
virtual void ScreenshotAsyncEnd(CMemoryWriter& memory_writer);
352352
virtual void OnFrame();
353353

354+
void BeforeWorldRender() override; //--#SM+#-- +SecondVP+ Вызывается перед началом рендера мира и пост-эффектов
355+
void AfterWorldRender() override; //--#SM+#-- +SecondVP+ Вызывается после рендера мира и перед UI
356+
354357
// Render mode
355358
virtual void rmNear();
356359
virtual void rmFar();

src/Layers/xrRenderPC_R4/r4.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -557,6 +557,9 @@ void CRender::OnFrame()
557557
}
558558
}
559559

560+
void CRender::BeforeWorldRender() {}
561+
void CRender::AfterWorldRender() {}
562+
560563
// Implementation
561564
IRender_ObjectSpecific* CRender::ros_create(IRenderable* parent) { return new CROS_impl(); }
562565
void CRender::ros_destroy(IRender_ObjectSpecific*& p) { xr_delete(p); }

src/Layers/xrRenderPC_R4/r4.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,9 @@ class CRender : public D3DXRenderBase
357357
virtual void ScreenshotAsyncEnd(CMemoryWriter& memory_writer);
358358
virtual void OnFrame();
359359

360+
void BeforeWorldRender() override; //--#SM+#-- +SecondVP+ Вызывается перед началом рендера мира и пост-эффектов
361+
void AfterWorldRender() override; //--#SM+#-- +SecondVP+ Вызывается после рендера мира и перед UI
362+
360363
// Render mode
361364
virtual void rmNear();
362365
virtual void rmFar();

src/xrEngine/CameraBase.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ CCameraBase::CCameraBase(IGameObject* p, u32 flags)
2626
f_fov = 90;
2727
f_aspect = 1.f;
2828
tag = 0;
29+
m_bInputDisabled = false; //--#SM+#--
2930
}
3031

3132
CCameraBase::~CCameraBase() {}

src/xrEngine/CameraBase.h

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ class ENGINE_API CCameraBase
3838
float f_fov;
3939
float f_aspect;
4040

41+
bool m_bInputDisabled; //--#SM+#-- Флаг, запрещающий любые повороты камеры игроком [flag for disable all user input]
42+
4143
IC Fvector Position() const { return vPosition; }
4244
IC Fvector Direction() const { return vDirection; }
4345
IC Fvector Up() const { return vNormal; }
@@ -83,6 +85,33 @@ class ENGINE_API CCameraBase
8385
virtual float CheckLimYaw();
8486
virtual float CheckLimPitch();
8587
virtual float CheckLimRoll();
88+
89+
private: //--#SM+#--
90+
float saved_yaw, saved_pitch, saved_roll;
91+
Fvector vSavedPosition;
92+
Fvector vSavedDirection;
93+
Fvector vSavedNormal;
94+
95+
public: //--#SM+#--
96+
virtual void SaveCamVec()
97+
{
98+
saved_yaw = yaw;
99+
saved_pitch = pitch;
100+
saved_roll = roll;
101+
vSavedPosition = vPosition;
102+
vSavedDirection = vDirection;
103+
vSavedNormal = vNormal;
104+
}
105+
virtual void RestoreCamVec()
106+
{
107+
yaw = saved_yaw;
108+
pitch = saved_pitch;
109+
roll = saved_roll;
110+
vPosition = vSavedPosition;
111+
vDirection = vSavedDirection;
112+
vNormal = vSavedNormal;
113+
}
114+
virtual IGameObject* GetOwner() { return parent; }
86115
};
87116

88117
template <typename T>

src/xrEngine/IGame_ObjectPool.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ IGameObject* IGame_ObjectPool::create(LPCSTR name)
4646
IGameObject* O = smart_cast<IGameObject*>(NEW_INSTANCE(CLS));
4747
O->cNameSect_set(name);
4848
O->Load(name);
49+
O->PostLoad(name); //--#SM+#--
4950
return O;
5051
}
5152

src/xrEngine/IGame_Persistent.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ IGame_Persistent::IGame_Persistent()
3939
pEnvironment = new editor::environment::manager();
4040
else
4141
pEnvironment = new CEnvironment();
42+
43+
m_pGShaderConstants = new ShadersExternalData(); //--#SM+#--
4244
}
4345

4446
IGame_Persistent::~IGame_Persistent()
@@ -51,6 +53,8 @@ IGame_Persistent::~IGame_Persistent()
5153
#ifndef _EDITOR
5254
xr_delete(pEnvironment);
5355
#endif
56+
57+
xr_delete(m_pGShaderConstants); //--#SM+#--
5458
}
5559

5660
void IGame_Persistent::OnAppActivate() {}

src/xrEngine/IGame_Persistent.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "EngineAPI.h"
1313
#include "IGame_ObjectPool.h"
1414
#endif
15+
#include "ShadersExternalData.h" //--#SM+#--
1516

1617
class IRenderVisual;
1718
class IMainMenu;
@@ -97,6 +98,8 @@ class ENGINE_API IGame_Persistent :
9798

9899
ParticleStatistics stats;
99100

101+
ShadersExternalData* m_pGShaderConstants; //--#SM+#--
102+
100103
const ParticleStatistics& GetStats() { return stats; }
101104
virtual bool OnRenderPPUI_query() { return FALSE; }; // should return true if we want to have second function called
102105
virtual void OnRenderPPUI_main(){};

src/xrEngine/Render.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,9 @@ class ENGINE_API IRender
364364
virtual void Calculate() = 0;
365365
virtual void Render() = 0;
366366

367+
virtual void BeforeWorldRender() = 0; //--#SM+#-- Перед рендерингом мира
368+
virtual void AfterWorldRender() = 0; //--#SM+#-- После рендеринга мира (до UI)
369+
367370
virtual void Screenshot(ScreenshotMode mode = SM_NORMAL, LPCSTR name = 0) = 0;
368371
virtual void Screenshot(ScreenshotMode mode, CMemoryWriter& memory_writer) = 0;
369372
virtual void ScreenshotAsyncBegin() = 0;
@@ -377,6 +380,7 @@ class ENGINE_API IRender
377380

378381
// Constructor/destructor
379382
virtual ~IRender() {}
383+
380384
protected:
381385
virtual void ScreenshotImpl(ScreenshotMode mode, LPCSTR name, CMemoryWriter* memory_writer) = 0;
382386

src/xrEngine/ShadersExternalData.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#pragma once
2+
3+
// Хранилище внешних шейдерных параметров, которые читаются в Blender_Recorder_StandartBinding.cpp
4+
class ShadersExternalData //--#SM+#--
5+
{
6+
public:
7+
Fmatrix m_script_params; // Матрица, значения которой доступны из Lua
8+
Fvector4 hud_params; // [zoom_rotate_factor, secondVP_zoom_factor, NULL, NULL] - Параметры худа оружия
9+
Fvector4 m_blender_mode; // x\y = [0 - default, 1 - night vision, 2 - thermo vision, ... см. common.h] - Режимы рендеринга
10+
// x - основной вьюпорт, y - второй вьюпорт, z = ?, w = [0 - идёт рендер обычного объекта, 1 - идёт рендер детальных объектов (трава, мусор)]
11+
12+
ShadersExternalData()
13+
{
14+
m_script_params = Fmatrix();
15+
hud_params.set(0.f, 0.f, 0.f, 0.f);
16+
m_blender_mode.set(0.f, 0.f, 0.f, 0.f);
17+
}
18+
};

src/xrEngine/vis_common.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,30 @@
44
#include "xrCore/_sphere.h"
55
#include "xrCore/_fbox.h"
66

7+
#include "vis_object_data.h" //--#SM+#--
8+
79
#pragma pack(push, 4)
810
struct vis_data
911
{
12+
private:
13+
vis_object_data obj_data_self; //--#SM+#-- Свои собственные объектные данные [personal shaders data of this model]
14+
15+
public:
1016
Fsphere sphere; //
1117
Fbox box; //
1218
u32 marker; // for different sub-renders
1319
u32 accept_frame; // when it was requisted accepted for main render
1420
u32 hom_frame; // when to perform test - shedule
1521
u32 hom_tested; // when it was last time tested
1622

23+
vis_object_data* obj_data; //--#SM+#-- Объектные данные, используемые при рендере этой модели [shaders data which
24+
//will be used at render for this model]
25+
26+
vis_data::vis_data() //--#SM+#--
27+
{
28+
obj_data = &obj_data_self;
29+
}
30+
1731
IC void clear()
1832
{
1933
sphere.P.set(0, 0, 0);

src/xrEngine/vis_object_data.h

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#pragma once
2+
3+
// Структура, хранящие уникальные данные для конкретного визуала --#SM+#--
4+
// PS: Не оптимально хранить эти данные для каждой модели (и её составных), но ради удобства приходится жертвовать немного ОЗУ
5+
struct vis_object_data
6+
{
7+
// == Weapons == //
8+
int m_max_bullet_bones; // Максимальное число костей в модели с привязкой к числу патронов (0 по дефолту)
9+
10+
// == HUD == //
11+
float m_hud_custom_fov; // Кастомный FOV для рендера этой модели в режиме худа (-1.f по дефолту)
12+
13+
// == Generic == //
14+
Fmatrix sh_camo_data; // Данные для камуфляжа (передаются в шейдеры)
15+
Fvector4 sh_custom_data; // Кастомные данные, содержимое которых зависит от использующих их шейдеров и кода (передаются в шейдеры)
16+
Fvector4 sh_entity_data; // Параметры "живых" объектов (передаются в шейдеры)
17+
/*
18+
1) health - здоровье объекта (-2 если такого параметра нет у объекта)
19+
2) radiation - радиация объекта (-2 если такого параметра нет у объекта)
20+
3) condition - кондишион объекта (-2 если такого параметра нет у объекта)
21+
4) irnv value - коэффициент "теплового излучения" модели (0.0 - 1.0)
22+
*/
23+
24+
// Инициализируем начальные данные
25+
vis_object_data()
26+
{
27+
m_max_bullet_bones = 0;
28+
m_hud_custom_fov = -1.f;
29+
30+
sh_camo_data = Fmatrix();
31+
sh_custom_data.set(0.f, 0.f, 0.f, 0.f);
32+
sh_entity_data.set(-2.f, -2.f, -2.f, 0.f);
33+
}
34+
};

src/xrEngine/xrEngine.vcxproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,7 @@
251251
<ClInclude Include="Rain.h" />
252252
<ClInclude Include="Render.h" />
253253
<ClInclude Include="splash.h" />
254+
<ClInclude Include="ShadersExternalData.h" />
254255
<ClInclude Include="StatGraph.h" />
255256
<ClInclude Include="Stats.h" />
256257
<ClInclude Include="stdafx.h" />
@@ -259,6 +260,7 @@
259260
<ClInclude Include="thunderbolt.h" />
260261
<ClInclude Include="tntQAVI.h" />
261262
<ClInclude Include="vis_common.h" />
263+
<ClInclude Include="vis_object_data.h" />
262264
<ClInclude Include="WaveForm.h" />
263265
<ClInclude Include="xrHemisphere.h" />
264266
<ClInclude Include="xrImage_Resampler.h" />

src/xrEngine/xrEngine.vcxproj.filters

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,12 @@
559559
<ClInclude Include="splash.h">
560560
<Filter>General</Filter>
561561
</ClInclude>
562+
<ClInclude Include="vis_object_data.h">
563+
<Filter>Render\Visibility</Filter>
564+
</ClInclude>
565+
<ClInclude Include="ShadersExternalData.h">
566+
<Filter>Render\Visibility</Filter>
567+
</ClInclude>
562568
</ItemGroup>
563569
<ItemGroup>
564570
<ClCompile Include="defines.cpp">

0 commit comments

Comments
 (0)