Skip to content

Commit

Permalink
Dump some debug info when #17 happens
Browse files Browse the repository at this point in the history
  • Loading branch information
Metapyziks committed Jul 29, 2024
1 parent 302a16a commit 5aecdf3
Showing 1 changed file with 66 additions and 56 deletions.
122 changes: 66 additions & 56 deletions Code/2D/Sdf2DMeshWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -488,36 +488,31 @@ private void InitPolyMeshBuilder( PolygonMeshBuilder builder, int offset, int co
}
}

private string PrintEdgeLoops( int offset, int count, out Vector2 pos )
private record DebugDump(
string Exception,
string EdgeLoops,
EdgeStyle EdgeStyle,
float EdgeWidth,
int EdgeFaces );

private DebugDump GenerateDebugDump( int offset, int count )
{
var writer = new StringWriter();

pos = 0f;
var vertexCount = 0;

for ( var i = 0; i < count; ++i )
{
var edgeLoop = EdgeLoops[offset + i];

for ( var j = 0; j < edgeLoop.Count; ++j )
{
var vertex = SourceVertices[edgeLoop.FirstIndex + j];
writer.Write( $"({vertex.x:R}, {vertex.y:R})," );

pos += vertex;
writer.Write($"{vertex.x:R},{vertex.y:R};");
}

vertexCount += edgeLoop.Count;

writer.WriteLine();
}

if ( vertexCount > 0 )
{
pos /= vertexCount;
writer.Write("\n");
}

return writer.ToString();
return new DebugDump( null, writer.ToString(), EdgeStyle.Sharp, 0, 0 );
}

private void WriteRenderMesh( Sdf2DLayer layer )
Expand Down Expand Up @@ -550,54 +545,69 @@ private void WriteRenderMesh( Sdf2DLayer layer )
{
InitPolyMeshBuilder( polyMeshBuilder, offset, count );

if ( allSameMaterial )
try
{
polyMeshBuilder.Extrude( (layer.Depth * 0.5f - edgeRadius) / scale );
}
if ( allSameMaterial )
{
polyMeshBuilder.Extrude( (layer.Depth * 0.5f - edgeRadius) / scale );
}

switch ( layer.EdgeStyle )
{
case EdgeStyle.Sharp:
polyMeshBuilder.Fill();
break;

case EdgeStyle.Bevel:
polyMeshBuilder.Bevel( bevelScale, bevelScale );
polyMeshBuilder.Fill();
break;

case EdgeStyle.Round:
polyMeshBuilder.Arc( bevelScale, bevelScale, layer.EdgeFaces );
polyMeshBuilder.Fill();
break;
}
switch ( layer.EdgeStyle )
{
case EdgeStyle.Sharp:
polyMeshBuilder.Fill();
break;

if ( allSameMaterial )
{
polyMeshBuilder.Mirror();
case EdgeStyle.Bevel:
polyMeshBuilder.Bevel( bevelScale, bevelScale );
polyMeshBuilder.Fill();
break;

_frontMeshWriter.AddFaces( polyMeshBuilder,
new Vector3( 0f, 0f, layer.Offset ),
new Vector3( scale, scale, scale ),
layer.TexCoordSize );
case EdgeStyle.Round:
polyMeshBuilder.Arc( bevelScale, bevelScale, layer.EdgeFaces );
polyMeshBuilder.Fill();
break;
}

continue;
}
if ( allSameMaterial )
{
polyMeshBuilder.Mirror();

if ( layer.FrontFaceMaterial != null )
{
_frontMeshWriter.AddFaces( polyMeshBuilder,
new Vector3( 0f, 0f, layer.Depth * 0.5f + layer.Offset - edgeRadius ),
new Vector3( scale, scale, scale ),
layer.TexCoordSize );
}
_frontMeshWriter.AddFaces( polyMeshBuilder,
new Vector3( 0f, 0f, layer.Offset ),
new Vector3( scale, scale, scale ),
layer.TexCoordSize );

continue;
}

if ( layer.BackFaceMaterial != null )
if ( layer.FrontFaceMaterial != null )
{
_frontMeshWriter.AddFaces( polyMeshBuilder,
new Vector3( 0f, 0f, layer.Depth * 0.5f + layer.Offset - edgeRadius ),
new Vector3( scale, scale, scale ),
layer.TexCoordSize );
}

if ( layer.BackFaceMaterial != null )
{
_backMeshWriter.AddFaces( polyMeshBuilder,
new Vector3( 0f, 0f, layer.Depth * -0.5f + layer.Offset + edgeRadius ),
new Vector3( scale, scale, -scale ),
layer.TexCoordSize );
}
}
catch ( Exception e )
{
_backMeshWriter.AddFaces( polyMeshBuilder,
new Vector3( 0f, 0f, layer.Depth * -0.5f + layer.Offset + edgeRadius ),
new Vector3( scale, scale, -scale ),
layer.TexCoordSize );
Log.Error( $"Internal error in PolygonMeshBuilder!\n\n" +
$"Please paste the info below in this thread:\nhttps://github.com/Facepunch/sbox-sdf/issues/17\n\n" +
$"{Json.Serialize( GenerateDebugDump( offset, count ) with
{
Exception = e.ToString(),
EdgeStyle = layer.EdgeStyle,
EdgeWidth = bevelScale,
EdgeFaces = layer.EdgeFaces
} )}" );
}
}

Expand Down

0 comments on commit 5aecdf3

Please sign in to comment.