Use bitset for set_dynamic_light vertex visit tracking

This commit is contained in:
Kp 2015-10-18 21:01:19 +00:00
parent 6259e80206
commit c5f6878f72

View file

@ -24,6 +24,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
*/
#include <algorithm>
#include <bitset>
#include <numeric>
#include <stdio.h>
#include <string.h> // for memset()
@ -486,7 +487,7 @@ void set_dynamic_light(render_state_t &rstate)
return;
light_time = light_time - (F1_0/60);
array<int8_t, MAX_VERTICES> render_vertex_flags{};
std::bitset<MAX_VERTICES> render_vertex_flags;
// Create list of vertices that need to be looked at for setting of ambient light.
uint_fast32_t n_render_vertices = 0;
@ -500,22 +501,19 @@ void set_dynamic_light(render_state_t &rstate)
Int3(); //invalid vertex number
continue; //ignore it, and go on to next one
}
if (!render_vertex_flags[vnum]) {
render_vertex_flags[vnum] = 1;
auto &&b = render_vertex_flags[vnum];
if (!b)
{
b = true;
render_vertices[n_render_vertices] = vnum;
vert_segnum_list[n_render_vertices] = segnum;
n_render_vertices++;
Dynamic_light[vnum] = {};
}
}
}
}
range_for (const auto vertnum, partial_range(render_vertices, n_render_vertices))
{
Assert(vertnum >= 0 && vertnum <= Highest_vertex_index);
Dynamic_light[vertnum] = {};
}
cast_muzzle_flash_light(n_render_vertices, render_vertices, vert_segnum_list);
range_for (const auto objnum, highest_valid(Objects))