Thekla: redo reduz's changes from 8b01b2e85c

But this time without messing up the code style and with proper
comments documenting changed code.
This commit is contained in:
Rémi Verschelde 2017-12-20 00:25:03 +01:00
parent eb39b7f5de
commit 3f7f65cd1c
3 changed files with 43 additions and 14 deletions

View file

@ -143,8 +143,10 @@ AtlasPacker::AtlasPacker(Atlas * atlas) : m_atlas(atlas), m_bitmap(256, 256)
m_width = 0;
m_height = 0;
m_debug_bitmap.allocate(256, 256);
m_debug_bitmap.fill(Color32(0,0,0,0));
// -- GODOT start --
//m_debug_bitmap.allocate(256, 256);
//m_debug_bitmap.fill(Color32(0,0,0,0));
// -- GODOT end --
}
AtlasPacker::~AtlasPacker()
@ -597,8 +599,10 @@ void AtlasPacker::packCharts(int quality, float texelsPerUnit, bool blockAligned
m_bitmap.clearAll();
if (approximateExtent > m_bitmap.width()) {
m_bitmap.resize(approximateExtent, approximateExtent, false);
m_debug_bitmap.resize(approximateExtent, approximateExtent);
m_debug_bitmap.fill(Color32(0,0,0,0));
// -- GODOT start --
//m_debug_bitmap.resize(approximateExtent, approximateExtent);
//m_debug_bitmap.fill(Color32(0,0,0,0));
// -- GODOT end --
}
@ -680,20 +684,24 @@ void AtlasPacker::packCharts(int quality, float texelsPerUnit, bool blockAligned
{
//nvDebug("Resize bitmap (%d, %d).\n", nextPowerOfTwo(w), nextPowerOfTwo(h));
m_bitmap.resize(nextPowerOfTwo(U32(w)), nextPowerOfTwo(U32(h)), false);
m_debug_bitmap.resize(nextPowerOfTwo(U32(w)), nextPowerOfTwo(U32(h)));
// -- GODOT start --
//m_debug_bitmap.resize(nextPowerOfTwo(U32(w)), nextPowerOfTwo(U32(h)));
// -- GODOT end --
}
//nvDebug("Add chart at (%d, %d).\n", best_x, best_y);
addChart(&chart_bitmap, w, h, best_x, best_y, best_r, /*debugOutput=*/NULL);
// -- GODOT start --
// IC: Output chart again to debug bitmap.
if (chart->isVertexMapped()) {
/*if (chart->isVertexMapped()) {
addChart(&chart_bitmap, w, h, best_x, best_y, best_r, &m_debug_bitmap);
}
else {
addChart(chart, w, h, best_x, best_y, best_r, &m_debug_bitmap);
}
}*/
// -- GODOT end --
//float best_angle = 2 * PI * best_r;
@ -842,8 +850,10 @@ void AtlasPacker::packCharts(int quality, float texelsPerUnit, bool blockAligned
nvCheck(isAligned(m_width, 4));
nvCheck(isAligned(m_height, 4));
m_debug_bitmap.resize(m_width, m_height);
m_debug_bitmap.setFormat(Image::Format_ARGB);
// -- GODOT start --
//m_debug_bitmap.resize(m_width, m_height);
//m_debug_bitmap.setFormat(Image::Format_ARGB);
// -- GODOT end --
#if DEBUG_OUTPUT
//outputDebugBitmap("debug_packer_final.tga", m_bitmap, w, h);

View file

@ -48,7 +48,9 @@ namespace nv
Atlas * m_atlas;
BitMap m_bitmap;
Image m_debug_bitmap;
// -- GODOT start --
//Image m_debug_bitmap;
// -- GODOT end --
RadixSort m_radix;
uint m_width;

View file

@ -2,6 +2,9 @@
#include "thekla_atlas.h"
#include <cfloat>
// -- GODOT start --
#include <stdio.h>
// -- GODOT end --
#include "nvmesh/halfedge/Edge.h"
#include "nvmesh/halfedge/Mesh.h"
@ -112,6 +115,8 @@ static Atlas_Output_Mesh * mesh_atlas_to_output(const HalfEdge::Mesh * mesh, con
output->index_count = face_count * 3;
output->index_array = new int[face_count * 3];
// -- GODOT start --
int face_ofs = 0;
// Set face indices.
for (int f = 0; f < face_count; f++) {
uint c = charts->faceChartAt(f);
@ -121,14 +126,26 @@ static Atlas_Output_Mesh * mesh_atlas_to_output(const HalfEdge::Mesh * mesh, con
const Chart * chart = charts->chartAt(c);
nvDebugCheck(chart->faceAt(i) == f);
if (i >= chart->chartMesh()->faceCount()) {
printf("WARNING: Faces may be missing in the final vertex, which could not be packed\n");
continue;
}
const HalfEdge::Face * face = chart->chartMesh()->faceAt(i);
const HalfEdge::Edge * edge = face->edge;
output->index_array[3*f+0] = vertexOffset + edge->vertex->id;
output->index_array[3*f+1] = vertexOffset + edge->next->vertex->id;
output->index_array[3*f+2] = vertexOffset + edge->next->next->vertex->id;
//output->index_array[3*f+0] = vertexOffset + edge->vertex->id;
//output->index_array[3*f+1] = vertexOffset + edge->next->vertex->id;
//output->index_array[3*f+2] = vertexOffset + edge->next->next->vertex->id;
output->index_array[3 * face_ofs + 0] = vertexOffset + edge->vertex->id;
output->index_array[3 * face_ofs + 1] = vertexOffset + edge->next->vertex->id;
output->index_array[3 * face_ofs + 2] = vertexOffset + edge->next->next->vertex->id;
face_ofs++;
}
output->index_count = face_ofs * 3;
// -- GODOT end --
*error = Atlas_Error_Success;
output->atlas_width = w;
output->atlas_height = h;