|
|
@@ -87,6 +87,7 @@ void compile(Filesystem& fs, const char* resource_path, File* out_file)
|
|
|
List<StringId32> m_names(default_allocator());
|
|
|
List<FrameData> m_regions(default_allocator());
|
|
|
List<float> m_vertices(default_allocator());
|
|
|
+ List<uint16_t> m_indices(default_allocator());
|
|
|
|
|
|
// Read width/height
|
|
|
width = root.key("width").float_value();
|
|
|
@@ -100,26 +101,27 @@ void compile(Filesystem& fs, const char* resource_path, File* out_file)
|
|
|
parse_frame(frames[i], m_names, m_regions);
|
|
|
}
|
|
|
|
|
|
+ uint32_t num_idx = 0;
|
|
|
for (uint32_t i = 0; i < num_frames; i++)
|
|
|
{
|
|
|
const FrameData& fd = m_regions[i];
|
|
|
|
|
|
// Compute uv coords
|
|
|
- float u0 = fd.x0;
|
|
|
- float v0 = fd.y0;
|
|
|
- float u1 = fd.x0 + fd.x1;
|
|
|
- float v1 = fd.y0 + fd.y1;
|
|
|
+ const float u0 = fd.x0;
|
|
|
+ const float v0 = fd.y0;
|
|
|
+ const float u1 = fd.x0 + fd.x1;
|
|
|
+ const float v1 = fd.y0 + fd.y1;
|
|
|
|
|
|
- float aspect = (fd.x1 * width) / (fd.y1 * height);
|
|
|
+ const float aspect = (fd.x1 * width) / (fd.y1 * height);
|
|
|
|
|
|
// Compute positions
|
|
|
- float w = aspect;
|
|
|
- float h = 1;
|
|
|
+ const float w = aspect;
|
|
|
+ const float h = 1;
|
|
|
|
|
|
- float x0 = fd.scale_x * (-w * 0.5) + fd.offset_x;
|
|
|
- float y0 = fd.scale_y * (-h * 0.5) + fd.offset_y;
|
|
|
- float x1 = fd.scale_x * ( w * 0.5) + fd.offset_x;
|
|
|
- float y1 = fd.scale_y * ( h * 0.5) + fd.offset_y;
|
|
|
+ const float x0 = fd.scale_x * (-w * 0.5) + fd.offset_x;
|
|
|
+ const float y0 = fd.scale_y * (-h * 0.5) + fd.offset_y;
|
|
|
+ const float x1 = fd.scale_x * ( w * 0.5) + fd.offset_x;
|
|
|
+ const float y1 = fd.scale_y * ( h * 0.5) + fd.offset_y;
|
|
|
|
|
|
m_vertices.push_back(x0); m_vertices.push_back(y0); // position
|
|
|
m_vertices.push_back(u0); m_vertices.push_back(v0); // uv
|
|
|
@@ -132,6 +134,10 @@ void compile(Filesystem& fs, const char* resource_path, File* out_file)
|
|
|
|
|
|
m_vertices.push_back(x0); m_vertices.push_back(y1); // position
|
|
|
m_vertices.push_back(u0); m_vertices.push_back(v1); // uv
|
|
|
+
|
|
|
+ m_indices.push_back(num_idx); m_indices.push_back(num_idx + 1); m_indices.push_back(num_idx + 2);
|
|
|
+ m_indices.push_back(num_idx); m_indices.push_back(num_idx + 2); m_indices.push_back(num_idx + 3);
|
|
|
+ num_idx += 4;
|
|
|
}
|
|
|
|
|
|
fs.close(file);
|
|
|
@@ -139,14 +145,18 @@ void compile(Filesystem& fs, const char* resource_path, File* out_file)
|
|
|
|
|
|
SpriteHeader h;
|
|
|
h.num_frames = m_names.size();
|
|
|
+ h.num_vertices = m_vertices.size() / 4; // 4 components per vertex
|
|
|
+ h.num_indices = m_indices.size();
|
|
|
|
|
|
uint32_t offt = sizeof(SpriteHeader);
|
|
|
- h.frame_names_offset = offt; offt += sizeof(StringId32) * h.num_frames;
|
|
|
- h.frame_vertices_offset = offt; // offt += sizeof(float) * 16 * h.num_frames; <- not necessary, just for future reference
|
|
|
+ /*h.frame_names_offset = offt*/; offt += sizeof(StringId32) * h.num_frames;
|
|
|
+ h.vertices_offset = offt; offt += sizeof(float) * m_vertices.size();
|
|
|
+ h.indices_offset = offt; offt += sizeof(uint16_t) * m_indices.size();
|
|
|
|
|
|
out_file->write((char*) &h, sizeof(SpriteHeader));
|
|
|
out_file->write((char*) m_names.begin(), sizeof(StringId32) * m_names.size());
|
|
|
- out_file->write((char*) m_vertices.begin(), sizeof(float) * 16 * m_vertices.size());
|
|
|
+ out_file->write((char*) m_vertices.begin(), sizeof(float) * m_vertices.size());
|
|
|
+ out_file->write((char*) m_indices.begin(), sizeof(uint16_t) * m_indices.size());
|
|
|
}
|
|
|
|
|
|
} // namespace sprite_resource
|