mirror of
https://github.com/Cesarus85/ringfall-mjolnir-vr.git
synced 2026-10-23 00:00:32 +02:00
126 lines
3.1 KiB
C
126 lines
3.1 KiB
C
/*
|
|
CONNECTED_GEOMETRY.C
|
|
|
|
symbols in this file:
|
|
000F2CD0 0030:
|
|
_connected_geometry_new (0000)
|
|
000F2D00 0050:
|
|
_connected_geometry_delete (0000)
|
|
000F2D50 00d0:
|
|
_connected_geometry_group_recursive (0000)
|
|
000F2E20 00c0:
|
|
_code_000f2e20 (0000)
|
|
000F2EE0 00f0:
|
|
_code_000f2ee0 (0000)
|
|
000F2FD0 00b0:
|
|
_plane3d_from_points (0000)
|
|
000F3080 01a0:
|
|
_connected_geometry_add_triangle (0000)
|
|
000F3220 0180:
|
|
_code_000f3220 (0000)
|
|
000F33A0 0080:
|
|
_connected_geometry_add_intermediate_triangle (0000)
|
|
000F3420 0130:
|
|
_connected_geometry_group_coplanar (0000)
|
|
00279CB0 0079:
|
|
??_C@_0HJ@CCKALPEO@?$CD?$CD?$CD?5WARNING?3?5found?5duplicate?5tri@ (0000)
|
|
00279D30 0008:
|
|
__real@3f847ae140000000 (0000)
|
|
004561B3 0001:
|
|
_bss_004561b3 (0000)
|
|
*/
|
|
|
|
/* ---------- headers */
|
|
|
|
#include "memory/array.h"
|
|
|
|
/* ---------- constants */
|
|
|
|
/* ---------- macros */
|
|
|
|
/* ---------- structures */
|
|
|
|
struct connected_geometry_point
|
|
{
|
|
float x;
|
|
float y;
|
|
float z;
|
|
};
|
|
|
|
struct connected_geometry_edge
|
|
{
|
|
struct dynamic_array triangle_indices;
|
|
long point_indices[2];
|
|
long unused[2];
|
|
};
|
|
|
|
struct connected_geometry_triangle
|
|
{
|
|
long edge_designators[3];
|
|
long coplanar_group_index;
|
|
long unused[2];
|
|
};
|
|
|
|
struct connected_geometry
|
|
{
|
|
struct dynamic_array points;
|
|
struct dynamic_array edges;
|
|
struct dynamic_array triangles;
|
|
};
|
|
|
|
typedef char connected_geometry_dynamic_array_size_assert[
|
|
sizeof(struct dynamic_array) == 0xC ? 1 : -1];
|
|
typedef char connected_geometry_point_size_assert[
|
|
sizeof(struct connected_geometry_point) == 0xC ? 1 : -1];
|
|
typedef char connected_geometry_edge_size_assert[
|
|
sizeof(struct connected_geometry_edge) == 0x1C ? 1 : -1];
|
|
typedef char connected_geometry_edge_point_indices_offset_assert[
|
|
offsetof(struct connected_geometry_edge, point_indices) == 0xC ? 1 : -1];
|
|
typedef char connected_geometry_triangle_size_assert[
|
|
sizeof(struct connected_geometry_triangle) == 0x18 ? 1 : -1];
|
|
typedef char connected_geometry_size_assert[
|
|
sizeof(struct connected_geometry) == 0x24 ? 1 : -1];
|
|
typedef char connected_geometry_edges_offset_assert[
|
|
offsetof(struct connected_geometry, edges) == 0xC ? 1 : -1];
|
|
typedef char connected_geometry_triangles_offset_assert[
|
|
offsetof(struct connected_geometry, triangles) == 0x18 ? 1 : -1];
|
|
|
|
/* ---------- prototypes */
|
|
|
|
/* ---------- globals */
|
|
|
|
/* ---------- public code */
|
|
|
|
void connected_geometry_new(
|
|
struct connected_geometry *geometry)
|
|
{
|
|
dynamic_array_new(&geometry->points, sizeof(struct connected_geometry_point));
|
|
dynamic_array_new(&geometry->edges, sizeof(struct connected_geometry_edge));
|
|
dynamic_array_new(&geometry->triangles, sizeof(struct connected_geometry_triangle));
|
|
|
|
return;
|
|
}
|
|
|
|
void connected_geometry_delete(
|
|
struct connected_geometry *geometry)
|
|
{
|
|
long edge_index;
|
|
|
|
for (edge_index = 0; edge_index < geometry->edges.count; edge_index++)
|
|
{
|
|
struct connected_geometry_edge *edge = dynamic_array_get_element(
|
|
&geometry->edges,
|
|
edge_index,
|
|
sizeof(*edge));
|
|
dynamic_array_delete(&edge->triangle_indices);
|
|
}
|
|
|
|
dynamic_array_delete(&geometry->points);
|
|
dynamic_array_delete(&geometry->edges);
|
|
dynamic_array_delete(&geometry->triangles);
|
|
|
|
return;
|
|
}
|
|
|
|
/* ---------- private code */
|