@@ -167,8 +167,9 @@ class SortingNodeStruct
167167 unsigned short vertex_count; // Number of vertices used in vb
168168};
169169
170- static std::list<SortingNodeStruct*> sorted_list;
171- static std::list<SortingNodeStruct*> clean_list;
170+ typedef std::list<SortingNodeStruct*> SortingNodeStructList;
171+ static SortingNodeStructList sorted_list;
172+ static SortingNodeStructList clean_list;
172173static unsigned total_sorting_vertices;
173174
174175static SortingNodeStruct* Get_Sorting_Struct ()
@@ -245,31 +246,6 @@ void SortingRendererClass::Insert_Triangles(
245246 WWASSERT (vertex_buffer);
246247 WWASSERT (state->vertex_count <=vertex_buffer->Get_Vertex_Count ());
247248
248- D3DXMATRIX mtx=(D3DXMATRIX &)state->sorting_state .world *(D3DXMATRIX &)state->sorting_state .view ;
249- D3DXVECTOR3 vec=(D3DXVECTOR3 &)state->bounding_sphere .Center ;
250- D3DXVECTOR4 transformed_vec;
251- D3DXVec3Transform (
252- &transformed_vec,
253- &vec,
254- &mtx);
255- state->transformed_center =Vector3 (transformed_vec[0 ],transformed_vec[1 ],transformed_vec[2 ]);
256-
257-
258- // / @todo lorenzen sez use a bucket sort here... and stop copying so much data so many times
259-
260- std::list<SortingNodeStruct*>::iterator node = sorted_list.begin ();
261- while (node != sorted_list.end ()) {
262- if (state->transformed_center .Z > (*node)->transformed_center .Z ) {
263- sorted_list.insert (node, state);
264- break ;
265- }
266- ++node;
267- }
268- if (node == sorted_list.end ())
269- {
270- sorted_list.push_back (state);
271- }
272-
273249#ifdef WWDEBUG
274250 unsigned short * indices=nullptr ;
275251 SortingIndexBufferClass* index_buffer=static_cast <SortingIndexBufferClass*>(state->sorting_state .index_buffer );
@@ -288,6 +264,28 @@ void SortingRendererClass::Insert_Triangles(
288264 WWASSERT (idx3<state->vertex_count );
289265 }
290266#endif // WWDEBUG
267+
268+ D3DXMATRIX mtx=(D3DXMATRIX &)state->sorting_state .world *(D3DXMATRIX &)state->sorting_state .view ;
269+ D3DXVECTOR3 vec=(D3DXVECTOR3 &)state->bounding_sphere .Center ;
270+ D3DXVECTOR4 transformed_vec;
271+ D3DXVec3Transform (
272+ &transformed_vec,
273+ &vec,
274+ &mtx);
275+ state->transformed_center =Vector3 (transformed_vec[0 ],transformed_vec[1 ],transformed_vec[2 ]);
276+
277+
278+ // / @todo lorenzen sez use a bucket sort here... and stop copying so much data so many times
279+
280+ for (SortingNodeStructList::iterator node = sorted_list.begin (); node != sorted_list.end (); ++node)
281+ {
282+ if (state->transformed_center .Z > (*node)->transformed_center .Z ) {
283+ sorted_list.insert (node, state);
284+ return ;
285+ }
286+ }
287+
288+ sorted_list.push_back (state);
291289}
292290
293291// ----------------------------------------------------------------------------
@@ -715,16 +713,13 @@ void SortingRendererClass::Insert_VolumeParticle(
715713
716714 // / @todo lorenzen sez use a bucket sort here... and stop copying so much data so many times
717715
718- std::list<SortingNodeStruct*>:: iterator node = sorted_list.begin ();
719- while (node != sorted_list. end ()) {
716+ for (SortingNodeStructList:: iterator node = sorted_list.begin (); node != sorted_list. end (); ++node)
717+ {
720718 if (state->transformed_center .Z > (*node)->transformed_center .Z ) {
721719 sorted_list.insert (node, state);
722- break ;
720+ return ;
723721 }
724- ++node;
725- }
726- if (node == sorted_list.end ())
727- {
728- sorted_list.push_back (state);
729722 }
723+
724+ sorted_list.push_back (state);
730725}
0 commit comments