Skip to content

Commit e08653c

Browse files
author
nitrocaster
committed
IRenderable: move data to RenderableBase.
1 parent 4ad28f0 commit e08653c

File tree

11 files changed

+71
-54
lines changed

11 files changed

+71
-54
lines changed

src/Layers/xrRender/LightTrack.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -179,15 +179,15 @@ void CROS_impl::update (IRenderable* O)
179179
if (dwFrame==Device.dwFrame) return;
180180
dwFrame = Device.dwFrame;
181181
if (0==O) return;
182-
if (0==O->renderable.visual) return;
182+
if (0==O->GetRenderData().visual) return;
183183
VERIFY (dynamic_cast<CROS_impl*> (O->renderable_ROS()));
184184
//float dt = Device.fTimeDelta;
185185

186186
CObject* _object = dynamic_cast<CObject*> (O);
187187

188188
// select sample, randomize position inside object
189-
vis_data &vis = O->renderable.visual->getVisData();
190-
Fvector position; O->renderable.xform.transform_tiny (position,vis.sphere.P);
189+
vis_data &vis = O->GetRenderData().visual->getVisData();
190+
Fvector position; O->GetRenderData().xform.transform_tiny (position,vis.sphere.P);
191191
position.y += .3f * vis.sphere.R;
192192
Fvector direction; direction.random_dir();
193193
//. position.mad(direction,0.25f*radius);
@@ -292,15 +292,15 @@ static const s32 s_iUTIdleMax = 2000;
292292
void CROS_impl::smart_update(IRenderable* O)
293293
{
294294
if (!O) return;
295-
if (0==O->renderable.visual) return;
295+
if (0==O->GetRenderData().visual) return;
296296

297297
--ticks_to_update;
298298

299299
// Acquire current position
300300
Fvector position;
301301
VERIFY(dynamic_cast<CROS_impl*> (O->renderable_ROS()));
302-
vis_data &vis = O->renderable.visual->getVisData();
303-
O->renderable.xform.transform_tiny( position, vis.sphere.P );
302+
vis_data &vis = O->GetRenderData().visual->getVisData();
303+
O->GetRenderData().xform.transform_tiny( position, vis.sphere.P );
304304

305305
if ( ticks_to_update <= 0)
306306
{
@@ -422,7 +422,7 @@ void CROS_impl::prepare_lights(Fvector& position, IRenderable* O)
422422
CObject* _object = dynamic_cast<CObject*> (O);
423423
float dt = Device.fTimeDelta;
424424

425-
vis_data &vis = O->renderable.visual->getVisData();
425+
vis_data &vis = O->GetRenderData().visual->getVisData();
426426
float radius; radius = vis.sphere.R;
427427
// light-tracing
428428
BOOL bTraceLights = MODE & IRender_ObjectSpecific::TRACE_LIGHTS;

src/Layers/xrRenderPC_R1/FStaticRender.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ void CRender::set_Object (IRenderable* O )
267267
val_pObject = O; // NULL is OK, trust me :)
268268
if (val_pObject) {
269269
VERIFY(dynamic_cast<CObject*>(O)||dynamic_cast<CPS_Instance*>(O));
270-
if (O->renderable.pROS) { VERIFY(dynamic_cast<CROS_impl*>(O->renderable.pROS)); }
270+
if (O->GetRenderData().pROS) { VERIFY(dynamic_cast<CROS_impl*>(O->GetRenderData().pROS)); }
271271
}
272272
if (PHASE_NORMAL==phase) {
273273
if (L_Shadows)
@@ -287,9 +287,9 @@ void CRender::apply_object (IRenderable* O )
287287
{
288288
if (0==O) return ;
289289
if (PHASE_NORMAL==phase && O->renderable_ROS()) {
290-
CROS_impl& LT = *((CROS_impl*)O->renderable.pROS);
290+
CROS_impl& LT = *((CROS_impl*)O->GetRenderData().pROS);
291291
VERIFY(dynamic_cast<CObject*>(O)||dynamic_cast<CPS_Instance*>(O));
292-
VERIFY(dynamic_cast<CROS_impl*>(O->renderable.pROS));
292+
VERIFY(dynamic_cast<CROS_impl*>(O->GetRenderData().pROS));
293293
float o_hemi = 0.5f*LT.get_hemi ();
294294
float o_sun = 0.5f*LT.get_sun ();
295295
RCache.set_c (c_ldynamic_props,o_sun,o_sun,o_sun,o_hemi);
@@ -483,9 +483,9 @@ void CRender::Calculate ()
483483
#endif
484484
} else {
485485
// Occlusiond
486-
vis_data& v_orig = renderable->renderable.visual->getVisData();
486+
vis_data& v_orig = renderable->GetRenderData().visual->getVisData();
487487
vis_data v_copy = v_orig;
488-
v_copy.box.xform (renderable->renderable.xform);
488+
v_copy.box.xform (renderable->GetRenderData().xform);
489489
BOOL bVisible = HOM.visible(v_copy);
490490
v_orig.accept_frame = v_copy.accept_frame;
491491
v_orig.marker = v_copy.marker;

src/Layers/xrRenderPC_R1/LightProjector.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ void CLightProjector::set_object (IRenderable* O)
6666
return;
6767
}
6868

69-
const vis_data &vis = O->renderable.visual->getVisData();
70-
Fvector C; O->renderable.xform.transform_tiny (C,vis.sphere.P);
69+
const vis_data &vis = O->GetRenderData().visual->getVisData();
70+
Fvector C; O->GetRenderData().xform.transform_tiny (C,vis.sphere.P);
7171
float R = vis.sphere.R;
7272
float D = C.distance_to (Device.vCameraPosition)+R;
7373

@@ -102,7 +102,7 @@ void CLightProjector::setup (int id)
102102
return;
103103
}
104104
recv& R = cache[id];
105-
float Rd = R.O->renderable.visual->getVisData().sphere.R;
105+
float Rd = R.O->GetRenderData().visual->getVisData().sphere.R;
106106
float dist = R.C.distance_to (Device.vCameraPosition)+Rd;
107107
float factor = _sqr(dist/clipD(Rd))*(1-ps_r1_lmodel_lerp) + ps_r1_lmodel_lerp;
108108
RCache.set_c (c_xform, R.UVgen);
@@ -145,7 +145,7 @@ void CLightProjector::calculate ()
145145
else if (cache[slot].O!=O) bValid = FALSE; // not the same object
146146
else {
147147
// seems to be valid
148-
Fbox bb; bb.xform (O->renderable.visual->getVisData().box,O->renderable.xform);
148+
Fbox bb; bb.xform (O->GetRenderData().visual->getVisData().box,O->GetRenderData().xform);
149149
if (cache[slot].BB.contains(bb)) {
150150
// inside, but maybe timelimit exceeded?
151151
if (Device.dwTimeGlobal > cache[slot].dwTimeValid) bValid = FALSE; // timeout
@@ -178,25 +178,25 @@ void CLightProjector::calculate ()
178178
int tid = taskid.back(); taskid.pop_back();
179179
recv& R = cache [c_it];
180180
IRenderable* O = receivers [tid];
181-
const vis_data& vis = O->renderable.visual->getVisData();
181+
const vis_data& vis = O->GetRenderData().visual->getVisData();
182182
CROS_impl* LT = (CROS_impl*)O->renderable_ROS();
183-
VERIFY2 (_valid(O->renderable.xform),"Invalid object transformation");
183+
VERIFY2 (_valid(O->GetRenderData().xform),"Invalid object transformation");
184184
VERIFY2 (_valid(vis.sphere.P),"Invalid object's visual sphere");
185185

186-
Fvector C; O->renderable.xform.transform_tiny (C,vis.sphere.P);
186+
Fvector C; O->GetRenderData().xform.transform_tiny (C,vis.sphere.P);
187187
R.O = O;
188188
R.C = C;
189189
R.C.y += vis.sphere.R*0.1f; //. YURA: 0.1 can be more
190-
R.BB.xform (vis.box,O->renderable.xform).scale(0.1f);
190+
R.BB.xform (vis.box,O->GetRenderData().xform).scale(0.1f);
191191
R.dwTimeValid = Device.dwTimeGlobal + ::Random.randI(time_min,time_max);
192192
LT->shadow_recv_slot = c_it;
193193

194194
// Msg ("[%f,%f,%f]-%f",C.C.x,C.C.y,C.C.z,C.O->renderable.visual->vis.sphere.R);
195195
// calculate projection-matrix
196196
Fmatrix mProject;
197-
float p_R = R.O->renderable.visual->getVisData().sphere.R * 1.1f;
197+
float p_R = R.O->GetRenderData().visual->getVisData().sphere.R * 1.1f;
198198
//VERIFY2 (p_R>EPS_L,"Object has no physical size");
199-
VERIFY3 (p_R>EPS_L,"Object has no physical size", R.O->renderable.visual->getDebugName().c_str());
199+
VERIFY3 (p_R>EPS_L,"Object has no physical size", R.O->GetRenderData().visual->getDebugName().c_str());
200200
float p_hat = p_R/P_cam_dist;
201201
float p_asp = 1.f;
202202
float p_near = P_cam_dist-EPS_L;

src/Layers/xrRenderPC_R1/LightShadows.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,8 @@ void CLightShadows::set_object (IRenderable* O)
9393
return;
9494
}
9595

96-
const vis_data &vis = O->renderable.visual->getVisData();
97-
Fvector C; O->renderable.xform.transform_tiny (C,vis.sphere.P);
96+
const vis_data &vis = O->GetRenderData().visual->getVisData();
97+
Fvector C; O->GetRenderData().xform.transform_tiny (C,vis.sphere.P);
9898
float R = vis.sphere.R;
9999
float D = C.distance_to(Device.vCameraPosition)+R;
100100
// D=0 -> P=0;
@@ -196,7 +196,7 @@ void CLightShadows::calculate ()
196196
if (_dist>EPS_L) break;
197197
Lpos.y += .01f; //. hack to avoid light-in-the-center-of-object
198198
}
199-
float _R = C.O->renderable.visual->getVisData().sphere.R+0.1f;
199+
float _R = C.O->GetRenderData().visual->getVisData().sphere.R+0.1f;
200200
//Msg ("* o-r: %f",_R);
201201
if (_dist<_R) {
202202
Fvector Ldir;
@@ -210,7 +210,7 @@ void CLightShadows::calculate ()
210210
// calculate projection-matrix
211211
Fmatrix mProject,mProjectR;
212212
float p_dist = C.C.distance_to(Lpos);
213-
float p_R = C.O->renderable.visual->getVisData().sphere.R;
213+
float p_R = C.O->GetRenderData().visual->getVisData().sphere.R;
214214
float p_hat = p_R/p_dist;
215215
float p_asp = 1.f;
216216
float p_near = p_dist-p_R-eps;
@@ -425,7 +425,7 @@ void CLightShadows::render ()
425425
// Everything, OK. Check if info is still relevant...
426426
CI = &*CI_ptr;
427427
bValid = TRUE;
428-
if (!CI->Op.similar(CI->O->renderable.xform.c)) bValid = FALSE;
428+
if (!CI->Op.similar(CI->O->GetRenderData().xform.c)) bValid = FALSE;
429429
else if (!CI->Lp.similar(CI->L->position)) bValid = FALSE;
430430
}
431431
}
@@ -484,7 +484,7 @@ void CLightShadows::render ()
484484

485485
// Remember params which builded cache item
486486
CI->O = S.O;
487-
CI->Op = CI->O->renderable.xform.c;
487+
CI->Op = CI->O->GetRenderData().xform.c;
488488
CI->L = S.L;
489489
CI->Lp = CI->L->position;
490490
CI->tcnt = tess.size();

src/Layers/xrRenderPC_R2/r2_R_render.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,9 +114,9 @@ void CRender::render_main (Fmatrix& m_ViewProjection, bool _fportals)
114114

115115
// Occlusion
116116
// casting is faster then using getVis method
117-
vis_data& v_orig = ((dxRender_Visual*)renderable->renderable.visual)->vis;
117+
vis_data& v_orig = ((dxRender_Visual*)renderable->GetRenderData().visual)->vis;
118118
vis_data v_copy = v_orig;
119-
v_copy.box.xform (renderable->renderable.xform);
119+
v_copy.box.xform (renderable->GetRenderData().xform);
120120
BOOL bVisible = HOM.visible(v_copy);
121121
v_orig.marker = v_copy.marker;
122122
v_orig.accept_frame = v_copy.accept_frame;

src/Layers/xrRenderPC_R3/r3_R_render.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,9 @@ void CRender::render_main (Fmatrix& m_ViewProjection, bool _fportals)
116116

117117
// Occlusion
118118
// casting is faster then using getVis method
119-
vis_data& v_orig = ((dxRender_Visual*)renderable->renderable.visual)->vis;
119+
vis_data& v_orig = ((dxRender_Visual*)renderable->GetRenderData().visual)->vis;
120120
vis_data v_copy = v_orig;
121-
v_copy.box.xform (renderable->renderable.xform);
121+
v_copy.box.xform (renderable->GetRenderData().xform);
122122
BOOL bVisible = HOM.visible(v_copy);
123123
v_orig.marker = v_copy.marker;
124124
v_orig.accept_frame = v_copy.accept_frame;

src/Layers/xrRenderPC_R4/r4_R_render.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,9 @@ void CRender::render_main (Fmatrix& m_ViewProjection, bool _fportals)
117117

118118
// Occlusion
119119
// casting is faster then using getVis method
120-
vis_data& v_orig = ((dxRender_Visual*)renderable->renderable.visual)->vis;
120+
vis_data& v_orig = ((dxRender_Visual*)renderable->GetRenderData().visual)->vis;
121121
vis_data v_copy = v_orig;
122-
v_copy.box.xform (renderable->renderable.xform);
122+
v_copy.box.xform (renderable->GetRenderData().xform);
123123
BOOL bVisible = HOM.visible(v_copy);
124124
v_orig.marker = v_copy.marker;
125125
v_orig.accept_frame = v_copy.accept_frame;

src/xrEngine/IRenderable.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
#include "stdafx.h"
22
#include "xrCDB/ISpatial.h"
33
#include "IRenderable.h"
4-
5-
IRenderable::IRenderable()
4+
// XXX: rename this file to RenderableBase.cpp
5+
RenderableBase::RenderableBase()
66
{
77
renderable.xform.identity();
88
renderable.visual = NULL;
@@ -13,7 +13,7 @@ IRenderable::IRenderable()
1313
}
1414

1515
extern ENGINE_API BOOL g_bRendering;
16-
IRenderable::~IRenderable()
16+
RenderableBase::~RenderableBase()
1717
{
1818
VERIFY(!g_bRendering);
1919
GlobalEnv.Render->model_Delete(renderable.visual);
@@ -22,7 +22,7 @@ IRenderable::~IRenderable()
2222
renderable.pROS = NULL;
2323
}
2424

25-
IRender_ObjectSpecific* IRenderable::renderable_ROS()
25+
IRender_ObjectSpecific* RenderableBase::renderable_ROS()
2626
{
2727
if (0 == renderable.pROS && renderable.pROS_Allowed) renderable.pROS = GlobalEnv.Render->ros_create(this);
2828
return renderable.pROS;

src/xrEngine/IRenderable.h

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,41 @@
55

66
//////////////////////////////////////////////////////////////////////////
77
// definition ("Renderable")
8-
class ENGINE_API IRenderable
8+
9+
class RenderData
10+
{
11+
public:
12+
Fmatrix xform;
13+
IRenderVisual *visual;
14+
IRender_ObjectSpecific *pROS;
15+
BOOL pROS_Allowed;
16+
};
17+
18+
class IRenderable
19+
{
20+
public:
21+
virtual ~IRenderable() = 0;
22+
virtual RenderData &GetRenderData() = 0;
23+
virtual void renderable_Render() = 0;
24+
virtual IRender_ObjectSpecific *renderable_ROS() = 0;
25+
virtual BOOL renderable_ShadowGenerate() = 0;
26+
virtual BOOL renderable_ShadowReceive() = 0;
27+
};
28+
29+
inline IRenderable::~IRenderable() {}
30+
31+
class ENGINE_API RenderableBase : public IRenderable
932
{
1033
public:
11-
struct
12-
{
13-
Fmatrix xform;
14-
IRenderVisual* visual;
15-
IRender_ObjectSpecific* pROS;
16-
BOOL pROS_Allowed;
17-
} renderable;
34+
RenderData renderable;
1835
public:
19-
IRenderable();
20-
virtual ~IRenderable();
21-
IRender_ObjectSpecific* renderable_ROS();
36+
RenderableBase();
37+
virtual ~RenderableBase();
38+
virtual RenderData &GetRenderData() override final { return renderable; }
39+
virtual IRender_ObjectSpecific *renderable_ROS() override final;
2240
BENCH_SEC_SCRAMBLEVTBL2
23-
virtual void renderable_Render() = 0;
24-
virtual BOOL renderable_ShadowGenerate() { return FALSE; };
25-
virtual BOOL renderable_ShadowReceive() { return FALSE; };
41+
virtual BOOL renderable_ShadowGenerate() override { return FALSE; }
42+
virtual BOOL renderable_ShadowReceive() override { return FALSE; }
2643
};
2744

2845
#endif // IRENDERABLE_H_INCLUDED

src/xrEngine/PS_instance.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
class ENGINE_API CPS_Instance :
99
public SpatialBase,
1010
public ScheduledBase,
11-
public IRenderable
11+
public RenderableBase
1212
{
1313
friend class IGame_Persistent;
1414

0 commit comments

Comments
 (0)