Browse Source

Replace all vector<tuple> definitions with properly named structs.

legacy
Sam Hocevar 5 years ago
parent
commit
c0e82bacc2
4 changed files with 76 additions and 54 deletions
  1. +46
    -26
      src/easymesh/easymeshrender.cpp
  2. +5
    -5
      src/scene.cpp
  3. +10
    -15
      src/t/math/quat.cpp
  4. +15
    -8
      src/tileset.cpp

+ 46
- 26
src/easymesh/easymeshrender.cpp View File

@@ -333,13 +333,14 @@ void GpuEasyMeshData::SetupVertexData(uint16_t vflags, std::shared_ptr<EasyMesh>
VertexUsage::Color, VertexUsage::Color,
VertexUsage::TexCoord)); VertexUsage::TexCoord));


std::vector<std::tuple<vec3, vec3, u8vec4, vec4>> vertexlist;
struct vertex_def { vec3 pos, normal; u8vec4 color; vec4 uv; };
std::vector<vertex_def> vertexlist;
for (int i = 0; i < src_mesh->m_vert.count(); i++) for (int i = 0; i < src_mesh->m_vert.count(); i++)
vertexlist.push_back(std::make_tuple(
vertexlist.push_back(vertex_def{
src_mesh->m_vert[i].m_coord, src_mesh->m_vert[i].m_coord,
src_mesh->m_vert[i].m_normal, src_mesh->m_vert[i].m_normal,
(u8vec4)(src_mesh->m_vert[i].m_color * 255.f), (u8vec4)(src_mesh->m_vert[i].m_color * 255.f),
src_mesh->m_vert[i].m_texcoord));
src_mesh->m_vert[i].m_texcoord});
COPY_VBO; COPY_VBO;
} }
else if (flagnb == 4 && has_position && has_normal && has_color && has_texcoord) else if (flagnb == 4 && has_position && has_normal && has_color && has_texcoord)
@@ -351,25 +352,31 @@ void GpuEasyMeshData::SetupVertexData(uint16_t vflags, std::shared_ptr<EasyMesh>
VertexUsage::Color, VertexUsage::Color,
VertexUsage::TexCoord)); VertexUsage::TexCoord));


std::vector<std::tuple<vec3, vec3, u8vec4, vec2>> vertexlist;
struct vertex_def { vec3 pos, normal; u8vec4 color; vec2 uv; };
std::vector<vertex_def> vertexlist;
for (int i = 0; i < src_mesh->m_vert.count(); i++) for (int i = 0; i < src_mesh->m_vert.count(); i++)
vertexlist.push_back(std::make_tuple(
vertexlist.push_back(vertex_def{
src_mesh->m_vert[i].m_coord, src_mesh->m_vert[i].m_coord,
src_mesh->m_vert[i].m_normal, src_mesh->m_vert[i].m_normal,
u8vec4(src_mesh->m_vert[i].m_color * 255.f), u8vec4(src_mesh->m_vert[i].m_color * 255.f),
vec2(src_mesh->m_vert[i].m_texcoord.xy)));
vec2(src_mesh->m_vert[i].m_texcoord.xy)});
COPY_VBO; COPY_VBO;
} }
else if (flagnb == 4 && has_position && has_color && has_texcoord && has_texcoordExt) else if (flagnb == 4 && has_position && has_color && has_texcoord && has_texcoordExt)
{ {
new_vdecl = std::make_shared<VertexDeclaration>(VertexStream<vec3,vec4,vec4>(VertexUsage::Position, VertexUsage::Color, VertexUsage::TexCoord));
new_vdecl = std::make_shared<VertexDeclaration>(
VertexStream<vec3,vec4,vec4>(
VertexUsage::Position,
VertexUsage::Color,
VertexUsage::TexCoord));


std::vector<std::tuple<vec3, vec4, vec4>> vertexlist;
struct vertex_def { vec3 pos; vec4 color; vec4 uv; };
std::vector<vertex_def> vertexlist;
for (int i = 0; i < src_mesh->m_vert.count(); i++) for (int i = 0; i < src_mesh->m_vert.count(); i++)
vertexlist.push_back(std::make_tuple(
vertexlist.push_back(vertex_def{
src_mesh->m_vert[i].m_coord, src_mesh->m_vert[i].m_coord,
src_mesh->m_vert[i].m_color, src_mesh->m_vert[i].m_color,
src_mesh->m_vert[i].m_texcoord));
src_mesh->m_vert[i].m_texcoord});
COPY_VBO; COPY_VBO;
} }
else if (flagnb == 3 && has_position && has_normal && has_color) else if (flagnb == 3 && has_position && has_normal && has_color)
@@ -380,49 +387,62 @@ void GpuEasyMeshData::SetupVertexData(uint16_t vflags, std::shared_ptr<EasyMesh>
VertexUsage::Normal, VertexUsage::Normal,
VertexUsage::Color)); VertexUsage::Color));


std::vector<std::tuple<vec3,vec3,u8vec4>> vertexlist;
struct vertex_def { vec3 pos, normal; u8vec4 color; };
std::vector<vertex_def> vertexlist;
for (int i = 0; i < src_mesh->m_vert.count(); i++) for (int i = 0; i < src_mesh->m_vert.count(); i++)
vertexlist.push_back(std::make_tuple(
vertexlist.push_back(vertex_def{
src_mesh->m_vert[i].m_coord, src_mesh->m_vert[i].m_coord,
src_mesh->m_vert[i].m_normal, src_mesh->m_vert[i].m_normal,
(u8vec4)(src_mesh->m_vert[i].m_color * 255.f)));
(u8vec4)(src_mesh->m_vert[i].m_color * 255.f)});
COPY_VBO; COPY_VBO;
} }
else if (flagnb == 3 && has_position && has_texcoord && has_texcoordExt) else if (flagnb == 3 && has_position && has_texcoord && has_texcoordExt)
{ {
new_vdecl = std::make_shared<VertexDeclaration>(VertexStream<vec3,vec4>(VertexUsage::Position, VertexUsage::TexCoord));
new_vdecl = std::make_shared<VertexDeclaration>(
VertexStream<vec3,vec4>(
VertexUsage::Position,
VertexUsage::TexCoord));


std::vector<std::tuple<vec3, vec4>> vertexlist;
struct vertex_def { vec3 pos; vec4 uv; };
std::vector<vertex_def> vertexlist;
for (int i = 0; i < src_mesh->m_vert.count(); i++) for (int i = 0; i < src_mesh->m_vert.count(); i++)
vertexlist.push_back(std::make_tuple(
vertexlist.push_back(vertex_def{
src_mesh->m_vert[i].m_coord, src_mesh->m_vert[i].m_coord,
src_mesh->m_vert[i].m_texcoord));
src_mesh->m_vert[i].m_texcoord});
COPY_VBO; COPY_VBO;
} }
else if (flagnb == 2 && has_position && has_texcoord) else if (flagnb == 2 && has_position && has_texcoord)
{ {
new_vdecl = std::make_shared<VertexDeclaration>(VertexStream<vec3,vec2>(VertexUsage::Position, VertexUsage::TexCoord));
new_vdecl = std::make_shared<VertexDeclaration>(
VertexStream<vec3,vec2>(
VertexUsage::Position,
VertexUsage::TexCoord));


std::vector<std::tuple<vec3, vec2>> vertexlist;
struct vertex_def { vec3 pos; vec2 uv; };
std::vector<vertex_def> vertexlist;
for (int i = 0; i < src_mesh->m_vert.count(); i++) for (int i = 0; i < src_mesh->m_vert.count(); i++)
vertexlist.push_back(std::make_tuple(
vertexlist.push_back(vertex_def{
src_mesh->m_vert[i].m_coord, src_mesh->m_vert[i].m_coord,
vec2(src_mesh->m_vert[i].m_texcoord.xy)));
vec2(src_mesh->m_vert[i].m_texcoord.xy)});
COPY_VBO; COPY_VBO;
} }
else if (flagnb == 2 && has_position && has_color) else if (flagnb == 2 && has_position && has_color)
{ {
new_vdecl = std::make_shared<VertexDeclaration>(VertexStream<vec3,u8vec4>(VertexUsage::Position, VertexUsage::Color));
new_vdecl = std::make_shared<VertexDeclaration>(
VertexStream<vec3,u8vec4>(
VertexUsage::Position,
VertexUsage::Color));


std::vector<std::tuple<vec3, u8vec4>> vertexlist;
struct vertex_def { vec3 pos; u8vec4 color; };
std::vector<vertex_def> vertexlist;
for (int i = 0; i < src_mesh->m_vert.count(); i++) for (int i = 0; i < src_mesh->m_vert.count(); i++)
vertexlist.push_back(std::make_tuple(
vertexlist.push_back(vertex_def{
src_mesh->m_vert[i].m_coord, src_mesh->m_vert[i].m_coord,
u8vec4(src_mesh->m_vert[i].m_color * 255.f)));
u8vec4(src_mesh->m_vert[i].m_color * 255.f)});
COPY_VBO; COPY_VBO;
} }
else else
ASSERT(0, "no Vertex Declaration combination for 0x%04x", vflags);
ASSERT(0, "no known Vertex Declaration combination for 0x%04x", vflags);


m_vdata.push(vflags, new_vdecl, new_vbo); m_vdata.push(vflags, new_vdecl, new_vbo);
} }


+ 5
- 5
src/scene.cpp View File

@@ -708,7 +708,7 @@ void Scene::render_lines(float seconds)
if (!m_line_api.m_shader) if (!m_line_api.m_shader)
m_line_api.m_shader = Shader::Create(LOLFX_RESOURCE_NAME(gpu_line)); m_line_api.m_shader = Shader::Create(LOLFX_RESOURCE_NAME(gpu_line));


std::vector<std::tuple<vec4, vec4, vec4, vec4>> buff;
std::vector<std::array<vec4,4>> buff;
buff.resize(linecount); buff.resize(linecount);
int real_linecount = 0; int real_linecount = 0;
mat4 const inv_view_proj = inverse(GetCamera()->GetProjection() * GetCamera()->GetView()); mat4 const inv_view_proj = inverse(GetCamera()->GetProjection() * GetCamera()->GetView());
@@ -717,10 +717,10 @@ void Scene::render_lines(float seconds)
{ {
if (m_line_api.m_lines[i].mask & m_line_api.m_debug_mask) if (m_line_api.m_lines[i].mask & m_line_api.m_debug_mask)
{ {
std::get<0>(buff[real_linecount]) = vec4(m_line_api.m_lines[i].a, (float)m_line_api.m_lines[i].wtf1);
std::get<1>(buff[real_linecount]) = m_line_api.m_lines[i].col;
std::get<2>(buff[real_linecount]) = vec4(m_line_api.m_lines[i].b, (float)m_line_api.m_lines[i].wtf2);
std::get<3>(buff[real_linecount]) = m_line_api.m_lines[i].col;
buff[real_linecount][0] = vec4(m_line_api.m_lines[i].a, (float)m_line_api.m_lines[i].wtf1);
buff[real_linecount][1] = m_line_api.m_lines[i].col;
buff[real_linecount][2] = vec4(m_line_api.m_lines[i].b, (float)m_line_api.m_lines[i].wtf2);
buff[real_linecount][3] = m_line_api.m_lines[i].col;
real_linecount++; real_linecount++;
} }
m_line_api.m_lines[i].duration -= seconds; m_line_api.m_lines[i].duration -= seconds;


+ 10
- 15
src/t/math/quat.cpp View File

@@ -31,16 +31,16 @@ lolunit_declare_fixture(quaternion_test)
void setup() void setup()
{ {
/* Generate identity quaternions */ /* Generate identity quaternions */
push_vector_pair(vec3::axis_x, vec3::axis_x);
push_vector_pair(2.f * vec3::axis_x, 3.f * vec3::axis_x);
m_vectorpairs.push_back({ vec3::axis_x, vec3::axis_x });
m_vectorpairs.push_back({ 2.f * vec3::axis_x, 3.f * vec3::axis_x });


/* Generate 90-degree rotations */ /* Generate 90-degree rotations */
push_vector_pair(vec3::axis_x, vec3::axis_y);
push_vector_pair(2.f * vec3::axis_x, 3.f * vec3::axis_y);
m_vectorpairs.push_back({ vec3::axis_x, vec3::axis_y });
m_vectorpairs.push_back({ 2.f * vec3::axis_x, 3.f * vec3::axis_y });


/* Generate 180-degree rotations */ /* Generate 180-degree rotations */
push_vector_pair(vec3::axis_x, -vec3::axis_x);
push_vector_pair(2.f * vec3::axis_x, -3.f * vec3::axis_x);
m_vectorpairs.push_back({ vec3::axis_x, -vec3::axis_x });
m_vectorpairs.push_back({ 2.f * vec3::axis_x, -3.f * vec3::axis_x });


/* Fill array with random test values */ /* Fill array with random test values */
for (int i = 0; i < 10000; ++i) for (int i = 0; i < 10000; ++i)
@@ -49,7 +49,7 @@ lolunit_declare_fixture(quaternion_test)
* vec3(rand(-1.f, 1.f), rand(-1.f, 1.f), rand(-1.f, 1.f)); * vec3(rand(-1.f, 1.f), rand(-1.f, 1.f), rand(-1.f, 1.f));
vec3 v2 = pow(10.f, rand(-5.f, 5.f)) vec3 v2 = pow(10.f, rand(-5.f, 5.f))
* vec3(rand(-1.f, 1.f), rand(-1.f, 1.f), rand(-1.f, 1.f)); * vec3(rand(-1.f, 1.f), rand(-1.f, 1.f), rand(-1.f, 1.f));
push_vector_pair(v1, v2);
m_vectorpairs.push_back({ v1, v2 });
} }
} }


@@ -212,8 +212,8 @@ lolunit_declare_fixture(quaternion_test)
{ {
for (auto pair : m_vectorpairs) for (auto pair : m_vectorpairs)
{ {
vec3 a0 = std::get<0>(pair);
vec3 b0 = std::get<1>(pair);
vec3 a0 = pair[0];
vec3 b0 = pair[1];
vec3 a = normalize(a0); vec3 a = normalize(a0);
vec3 b = normalize(b0); vec3 b = normalize(b0);


@@ -545,12 +545,7 @@ lolunit_declare_fixture(quaternion_test)
} }


private: private:
void push_vector_pair(vec3 p, vec3 q)
{
m_vectorpairs.push_back(std::make_tuple(p, q));
}

std::vector<std::tuple<vec3, vec3>> m_vectorpairs;
std::vector<std::array<vec3,2>> m_vectorpairs;
}; };


} /* namespace lol */ } /* namespace lol */


+ 15
- 8
src/tileset.cpp View File

@@ -35,13 +35,19 @@ static entity_dict<TileSet> tileset_cache;
* TileSet implementation class * TileSet implementation class
*/ */


struct tile_def
{
ibox2 pixel_coords;
box2 tex_coords;
};

class TileSetData class TileSetData
{ {
friend class TileSet; friend class TileSet;


protected: protected:
/* Pixels, then texture coordinates */ /* Pixels, then texture coordinates */
std::vector<std::tuple<ibox2, box2>> m_tiles;
std::vector<tile_def> m_tiles;
ivec2 m_tile_size; ivec2 m_tile_size;
}; };


@@ -192,9 +198,10 @@ void TileSet::clear_all()


int TileSet::define_tile(ibox2 rect) int TileSet::define_tile(ibox2 rect)
{ {
m_tileset_data->m_tiles.push_back(std::make_tuple(rect,
m_tileset_data->m_tiles.push_back(tile_def {
rect,
box2((vec2)rect.aa / (vec2)m_data->m_texture_size, box2((vec2)rect.aa / (vec2)m_data->m_texture_size,
(vec2)rect.bb / (vec2)m_data->m_texture_size)));
(vec2)rect.bb / (vec2)m_data->m_texture_size) });
return int(m_tileset_data->m_tiles.size()) - 1; return int(m_tileset_data->m_tiles.size()) - 1;
} }


@@ -223,17 +230,17 @@ int TileSet::GetTileCount() const


ivec2 TileSet::GetTileSize(int tileid) const ivec2 TileSet::GetTileSize(int tileid) const
{ {
return std::get<0>(m_tileset_data->m_tiles[tileid]).extent();
return m_tileset_data->m_tiles[tileid].pixel_coords.extent();
} }


ibox2 TileSet::GetTilePixel(int tileid) const ibox2 TileSet::GetTilePixel(int tileid) const
{ {
return std::get<0>(m_tileset_data->m_tiles[tileid]);
return m_tileset_data->m_tiles[tileid].pixel_coords;
} }


box2 TileSet::GetTileTexel(int tileid) const box2 TileSet::GetTileTexel(int tileid) const
{ {
return std::get<1>(m_tileset_data->m_tiles[tileid]);
return m_tileset_data->m_tiles[tileid].tex_coords;
} }


//Palette --------------------------------------------------------------------- //Palette ---------------------------------------------------------------------
@@ -254,8 +261,8 @@ TileSet const* TileSet::GetPalette() const


void TileSet::BlitTile(uint32_t id, mat4 model, vec3 *vertex, vec2 *texture) void TileSet::BlitTile(uint32_t id, mat4 model, vec3 *vertex, vec2 *texture)
{ {
ibox2 pixels = std::get<0>(m_tileset_data->m_tiles[id]);
box2 texels = std::get<1>(m_tileset_data->m_tiles[id]);
ibox2 pixels = m_tileset_data->m_tiles[id].pixel_coords;
box2 texels = m_tileset_data->m_tiles[id].tex_coords;
float dtx = texels.extent().x; float dtx = texels.extent().x;
float dty = texels.extent().y; float dty = texels.extent().y;
float tx = texels.aa.x; float tx = texels.aa.x;


Loading…
Cancel
Save