Fix a bug

This commit is contained in:
Miloslav Ciz 2025-03-31 16:23:52 +02:00
parent fb5d9d118e
commit 1454ae446e
3 changed files with 138 additions and 8 deletions

View file

@ -114,6 +114,49 @@ struct
with color stored in this variable. */
} LCR_renderer;
void aaa(void)
{
printf("BAD TRIS (%d):\n",LCR_renderer.mapModel.triangleCount);
for (int i = 0; i < LCR_renderer.mapModel.triangleCount; ++i)
{
TPE_Unit sss =
TPE_max(
TPE_abs(LCR_renderer.mapModel.vertices[
LCR_renderer.mapModel.triangles[i * 3] * 3] -
LCR_renderer.mapModel.vertices[
LCR_renderer.mapModel.triangles[i * 3 + 1] * 3]),
TPE_abs(LCR_renderer.mapModel.vertices[
LCR_renderer.mapModel.triangles[i * 3 + 1] * 3] -
LCR_renderer.mapModel.vertices[
LCR_renderer.mapModel.triangles[i * 3 + 2] * 3])
);
if (sss > LCR_RENDERER_UNIT * 2)
printf(" - %d (%d %d %d, %d %d %d, %d %d %d) %d %d %d\n",i,
LCR_renderer.mapModel.vertices[LCR_renderer.mapModel.triangles[3 * i]],
LCR_renderer.mapModel.vertices[LCR_renderer.mapModel.triangles[3 * i] + 1],
LCR_renderer.mapModel.vertices[LCR_renderer.mapModel.triangles[3 * i] + 2],
LCR_renderer.mapModel.vertices[LCR_renderer.mapModel.triangles[3 * i + 1]],
LCR_renderer.mapModel.vertices[LCR_renderer.mapModel.triangles[3 * i + 1] + 1],
LCR_renderer.mapModel.vertices[LCR_renderer.mapModel.triangles[3 * i + 1] + 2],
LCR_renderer.mapModel.vertices[LCR_renderer.mapModel.triangles[3 * i + 2]],
LCR_renderer.mapModel.vertices[LCR_renderer.mapModel.triangles[3 * i + 2] + 1],
LCR_renderer.mapModel.vertices[LCR_renderer.mapModel.triangles[3 * i + 2] + 2],
LCR_renderer.mapModel.triangles[3 * i],
LCR_renderer.mapModel.triangles[3 * i + 1],
LCR_renderer.mapModel.triangles[3 * i + 2]
);
}
}
void _LCR_rendererSetModelTransform(S3L_Model3D *model,
LCR_GameUnit position[3], LCR_GameUnit rotation[3])
{
@ -923,6 +966,12 @@ uint8_t _LCR_buildMapModel(void)
LCR_mapGetBlockShape(blockType,LCR_mapBlockGetTransform(block),
blockShapeBytes,&blockShapeByteCount);
// When nearing limit, cull (can't be inside the loop sadly, trust me).
if (
LCR_renderer.mapModel.vertexCount >= LCR_SETTING_MAX_MAP_VERTICES - 16 ||
LCR_renderer.mapModel.triangleCount >= LCR_SETTING_MAX_MAP_TRIANGLES - 16)
_LCR_cullHiddenMapTris();
for (int i = 0; i < blockShapeByteCount; ++i)
{
if (vi == 0)
@ -950,10 +999,6 @@ uint8_t _LCR_buildMapModel(void)
vi++;
else // 3 indices => create and add triangle
{
if (LCR_renderer.mapModel.triangleCount >=
LCR_SETTING_MAX_MAP_TRIANGLES)
_LCR_cullHiddenMapTris();
// don't add triangles completely at the boundary of the map
if (!edgeBits)
{
@ -1040,6 +1085,7 @@ uint8_t _LCR_buildMapModel(void)
}
_LCR_cullHiddenMapTris();
LCR_LOG1("map model built, verts/tris:");
LCR_LOG1_NUM(LCR_renderer.mapModel.vertexCount);
LCR_LOG1_NUM(LCR_renderer.mapModel.triangleCount);