@@ -57,15 +57,10 @@ void D3DXRenderBase::r_dsgraph_insert_dynamic(dxRender_Visual* pVisual, Fvector&
5757 // a) Allow to optimize RT order
5858 // b) Should be rendered to special distort buffer in another pass
5959 VERIFY (pVisual->shader ._get ());
60- ShaderElement* sh_d = &*pVisual->shader ->E [4 ];
60+ ShaderElement* sh_d = &*pVisual->shader ->E [4 ]; // 4=L_special
6161 if (RImplementation.o .distortion && sh_d && sh_d->flags .bDistort && pmask[sh_d->flags .iPriority / 2 ])
6262 {
63- mapSorted_Node* N = mapDistort.insertInAnyWay (distSQ);
64- N->val .ssa = SSA;
65- N->val .pObject = RI.val_pObject ;
66- N->val .pVisual = pVisual;
67- N->val .Matrix = *RI.val_pTransform ;
68- N->val .se = sh_d; // 4=L_special
63+ mapDistort.emplace_back (std::make_pair (distSQ, _MatrixItemS ({ SSA, RI.val_pObject , pVisual, *RI.val_pTransform , sh_d }))); // sh_d -> L_special
6964 }
7065
7166 // Select shader
@@ -75,62 +70,35 @@ void D3DXRenderBase::r_dsgraph_insert_dynamic(dxRender_Visual* pVisual, Fvector&
7570 if (!pmask[sh->flags .iPriority / 2 ])
7671 return ;
7772
78- // Create common node
79- // NOTE: Invisible elements exist only in R1
80- _MatrixItem item = {SSA, RI.val_pObject , pVisual, *RI.val_pTransform };
81-
8273 // HUD rendering
8374 if (RI.val_bHUD )
8475 {
8576 if (sh->flags .bStrictB2F )
8677 {
87- mapSorted_Node* N = mapSorted.insertInAnyWay (distSQ);
88- N->val .ssa = SSA;
89- N->val .pObject = RI.val_pObject ;
90- N->val .pVisual = pVisual;
91- N->val .Matrix = *RI.val_pTransform ;
92- N->val .se = sh;
93- return ;
78+ mapSorted.emplace_back (std::make_pair (distSQ, _MatrixItemS ({ SSA, RI.val_pObject , pVisual, *RI.val_pTransform , sh })));
9479 }
9580 else
9681 {
97- mapHUD_Node* N = mapHUD.insertInAnyWay (distSQ);
98- N->val .ssa = SSA;
99- N->val .pObject = RI.val_pObject ;
100- N->val .pVisual = pVisual;
101- N->val .Matrix = *RI.val_pTransform ;
102- N->val .se = sh;
82+ mapHUD.emplace_back (std::make_pair (distSQ, _MatrixItemS ({ SSA, RI.val_pObject , pVisual, *RI.val_pTransform , sh })));
10383#if RENDER != R_R1
10484 if (sh->flags .bEmissive )
105- {
106- mapSorted_Node* N2 = mapHUDEmissive.insertInAnyWay (distSQ);
107- N2->val .ssa = SSA;
108- N2->val .pObject = RI.val_pObject ;
109- N2->val .pVisual = pVisual;
110- N2->val .Matrix = *RI.val_pTransform ;
111- N2->val .se = &*pVisual->shader ->E [4 ]; // 4=L_special
112- }
113- #endif // RENDER!=R_R1
114- return ;
85+ mapHUDEmissive.emplace_back (std::make_pair (distSQ, _MatrixItemS ({ SSA, RI.val_pObject , pVisual, *RI.val_pTransform , sh_d }))); // sh_d -> L_special
86+ #endif // RENDER!=R_R1
11587 }
88+ return ;
11689 }
11790
11891// Shadows registering
11992#if RENDER == R_R1
120- RI.L_Shadows ->add_element (item );
93+ RI.L_Shadows ->add_element (_MatrixItem{ SSA, RI. val_pObject , pVisual, *RI. val_pTransform } );
12194#endif
12295 if (RI.val_bInvisible )
12396 return ;
12497
12598 // strict-sorting selection
12699 if (sh->flags .bStrictB2F )
127100 {
128- mapSorted_Node* N = mapSorted.insertInAnyWay (distSQ);
129- N->val .ssa = SSA;
130- N->val .pObject = RI.val_pObject ;
131- N->val .pVisual = pVisual;
132- N->val .Matrix = *RI.val_pTransform ;
133- N->val .se = sh;
101+ mapSorted.emplace_back (std::make_pair (distSQ, _MatrixItemS ({ SSA, RI.val_pObject , pVisual, *RI.val_pTransform , sh })));
134102 return ;
135103 }
136104
@@ -142,25 +110,19 @@ void D3DXRenderBase::r_dsgraph_insert_dynamic(dxRender_Visual* pVisual, Fvector&
142110 // d) Should be rendered to accumulation buffer in the second pass
143111 if (sh->flags .bEmissive )
144112 {
145- mapSorted_Node* N = mapEmissive.insertInAnyWay (distSQ);
146- N->val .ssa = SSA;
147- N->val .pObject = RI.val_pObject ;
148- N->val .pVisual = pVisual;
149- N->val .Matrix = *RI.val_pTransform ;
150- N->val .se = &*pVisual->shader ->E [4 ]; // 4=L_special
113+ mapEmissive.emplace_back (std::make_pair (distSQ, _MatrixItemS ({ SSA, RI.val_pObject , pVisual, *RI.val_pTransform , sh_d }))); // sh_d -> L_special
151114 }
152115 if (sh->flags .bWmark && pmask_wmark)
153116 {
154- mapSorted_Node* N = mapWmark.insertInAnyWay (distSQ);
155- N->val .ssa = SSA;
156- N->val .pObject = RI.val_pObject ;
157- N->val .pVisual = pVisual;
158- N->val .Matrix = *RI.val_pTransform ;
159- N->val .se = sh;
117+ mapWmark.emplace_back (std::make_pair (distSQ, _MatrixItemS ({ SSA, RI.val_pObject , pVisual, *RI.val_pTransform , sh })));
160118 return ;
161119 }
162120#endif
163121
122+ // Create common node
123+ // NOTE: Invisible elements exist only in R1
124+ _MatrixItem item = { SSA, RI.val_pObject , pVisual, *RI.val_pTransform };
125+
164126 for (u32 iPass = 0 ; iPass < sh->passes .size (); ++iPass)
165127 {
166128 auto &pass = *sh->passes [iPass];
@@ -262,15 +224,10 @@ void D3DXRenderBase::r_dsgraph_insert_static(dxRender_Visual* pVisual)
262224 // a) Allow to optimize RT order
263225 // b) Should be rendered to special distort buffer in another pass
264226 VERIFY (pVisual->shader ._get ());
265- ShaderElement* sh_d = &*pVisual->shader ->E [4 ];
227+ ShaderElement* sh_d = &*pVisual->shader ->E [4 ]; // 4=L_special
266228 if (RImplementation.o .distortion && sh_d && sh_d->flags .bDistort && pmask[sh_d->flags .iPriority / 2 ])
267229 {
268- mapSorted_Node* N = mapDistort.insertInAnyWay (distSQ);
269- N->val .ssa = SSA;
270- N->val .pObject = nullptr ;
271- N->val .pVisual = pVisual;
272- N->val .Matrix = Fidentity;
273- N->val .se = &*pVisual->shader ->E [4 ]; // 4=L_special
230+ mapDistort.emplace_back (std::make_pair (distSQ, _MatrixItemS ({ SSA, nullptr , pVisual, Fidentity, sh_d }))); // sh_d -> L_special
274231 }
275232
276233 // Select shader
@@ -283,11 +240,9 @@ void D3DXRenderBase::r_dsgraph_insert_static(dxRender_Visual* pVisual)
283240 // strict-sorting selection
284241 if (sh->flags .bStrictB2F )
285242 {
286- mapSorted_Node* N = mapSorted.insertInAnyWay (distSQ);
287- N->val .pObject = nullptr ;
288- N->val .pVisual = pVisual;
289- N->val .Matrix = Fidentity;
290- N->val .se = sh;
243+ // TODO: Выяснить, почему в единственном месте параметр ssa не используется
244+ // Визуально различий не замечено
245+ mapSorted.emplace_back (std::make_pair (distSQ, _MatrixItemS ({ /* 0*/ SSA, nullptr , pVisual, Fidentity, sh })));
291246 return ;
292247 }
293248
@@ -299,21 +254,11 @@ void D3DXRenderBase::r_dsgraph_insert_static(dxRender_Visual* pVisual)
299254 // d) Should be rendered to accumulation buffer in the second pass
300255 if (sh->flags .bEmissive )
301256 {
302- mapSorted_Node* N = mapEmissive.insertInAnyWay (distSQ);
303- N->val .ssa = SSA;
304- N->val .pObject = NULL ;
305- N->val .pVisual = pVisual;
306- N->val .Matrix = Fidentity;
307- N->val .se = &*pVisual->shader ->E [4 ]; // 4=L_special
257+ mapEmissive.emplace_back (std::make_pair (distSQ, _MatrixItemS ({ SSA, nullptr , pVisual, Fidentity, sh_d }))); // sh_d -> L_special
308258 }
309259 if (sh->flags .bWmark && pmask_wmark)
310260 {
311- mapSorted_Node* N = mapWmark.insertInAnyWay (distSQ);
312- N->val .ssa = SSA;
313- N->val .pObject = NULL ;
314- N->val .pVisual = pVisual;
315- N->val .Matrix = Fidentity;
316- N->val .se = sh;
261+ mapWmark.emplace_back (std::make_pair (distSQ, _MatrixItemS ({ SSA, nullptr , pVisual, Fidentity, sh })));
317262 return ;
318263 }
319264#endif
@@ -323,14 +268,14 @@ void D3DXRenderBase::r_dsgraph_insert_static(dxRender_Visual* pVisual)
323268
324269 counter_S++;
325270
326- _NormalItem item = {SSA, pVisual};
271+ _NormalItem item = { SSA, pVisual };
327272
328273 for (u32 iPass = 0 ; iPass < sh->passes .size (); ++iPass)
329274 {
330275 auto &pass = *sh->passes [iPass];
331276 auto &map = mapNormalPasses[sh->flags .iPriority / 2 ][iPass];
332277
333- #if defined( USE_OGL)
278+ #ifdef USE_OGL
334279 auto &Nvs = map[pass.vs ->vs ];
335280 auto &Ngs = Nvs[pass.gs ->gs ];
336281 auto &Nps = Ngs[pass.ps ->ps ];
@@ -351,7 +296,6 @@ void D3DXRenderBase::r_dsgraph_insert_static(dxRender_Visual* pVisual)
351296#else
352297 auto &Ncs = Nps[pass.constants ._get ()];
353298#endif
354- // auto &Nstate = Ncs[pass.state->state];
355299 auto &Nstate = Ncs[&*pass.state ];
356300 auto &Ntex = Nstate[pass.T ._get ()];
357301 Ntex.push_back (item);
@@ -375,7 +319,7 @@ void D3DXRenderBase::r_dsgraph_insert_static(dxRender_Visual* pVisual)
375319 {
376320 Nps.ssa = SSA;
377321#endif
378- #if defined(USE_DX10) || defined(USE_DX11)
322+ #if defined(USE_DX10) || defined(USE_DX11) || defined(USE_OGL)
379323 if (SSA > Ngs.ssa )
380324 {
381325 Ngs.ssa = SSA;
@@ -384,7 +328,7 @@ void D3DXRenderBase::r_dsgraph_insert_static(dxRender_Visual* pVisual)
384328 {
385329 Nvs.ssa = SSA;
386330 }
387- #if defined(USE_DX10) || defined(USE_DX11)
331+ #if defined(USE_DX10) || defined(USE_DX11) || defined(USE_OGL)
388332 }
389333#endif
390334 }
0 commit comments