Skip to content
This repository has been archived by the owner on Jan 12, 2024. It is now read-only.

Commit

Permalink
chore(PxMesh): add polygon-based API
Browse files Browse the repository at this point in the history
  • Loading branch information
lmichaelis committed Oct 24, 2023
1 parent 1e95396 commit a157d69
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 1 deletion.
24 changes: 24 additions & 0 deletions include/phoenix/cffi/Mesh.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,20 @@ typedef phoenix::mesh PxMesh;
typedef struct PxInternal_Mesh PxMesh;
#endif

typedef struct {
std::uint8_t is_portal;
std::uint8_t is_occluder;
std::uint8_t is_sector;
std::uint8_t should_relight;
std::uint8_t is_outdoor;
std::uint8_t is_ghost_occluder;
std::uint8_t is_dynamically_lit;
std::int16_t sector_index;

uint8_t is_lod;
uint8_t normal_axis;
} PxPolygonFlags;

// TODO: Lightmaps
PXC_API PxMesh* pxMshLoad(PxBuffer* buffer);
PXC_API PxMesh* pxMshLoadFromVfs(PxVfs const* vfs, char const* name);
Expand All @@ -31,3 +45,13 @@ PXC_API void pxMshGetFeature(PxMesh const* msh, uint32_t i, PxVec2* texture, uin
PXC_API uint32_t const* pxMshGetPolygonMaterialIndices(PxMesh const* msh, uint32_t* length);
PXC_API uint32_t const* pxMshGetPolygonFeatureIndices(PxMesh const* msh, uint32_t* length);
PXC_API uint32_t const* pxMshGetPolygonVertexIndices(PxMesh const* msh, uint32_t* length);

PXC_API uint32_t pxMshGetPolygonCount(PxMesh const* msh);
PXC_API void pxMshGetPolygon(PxMesh const* msh,
uint32_t idx,
uint32_t* materialIndex,
int32_t* lightmapIndex,
PxPolygonFlags* flags,
uint32_t const** vertexIndices,
uint32_t const** featureIndices,
uint32_t* vertexCount);
31 changes: 31 additions & 0 deletions src/Mesh.cc
Original file line number Diff line number Diff line change
Expand Up @@ -97,3 +97,34 @@ uint32_t const* pxMshGetPolygonVertexIndices(PxMesh const* msh, uint32_t* length
*length = (uint32_t) polys.vertex_indices.size();
return polys.vertex_indices.data();
}

uint32_t pxMshGetPolygonCount(PxMesh const* msh) {
return msh->geometry.size();
}

void pxMshGetPolygon(PxMesh const* msh,
uint32_t idx,
uint32_t* materialIndex,
int32_t* lightmapIndex,
PxPolygonFlags* flags,
uint32_t const** vertexIndices,
uint32_t const** featureIndices,
uint32_t* vertexCount) {
auto& poly = msh->geometry[idx];
*materialIndex = poly.material;
*lightmapIndex = poly.lightmap;
*vertexIndices = poly.vertices.data();
*featureIndices = poly.features.data();
*vertexCount = poly.vertices.size();

flags->is_portal = poly.flags.is_portal;
flags->is_occluder = poly.flags.is_occluder;
flags->is_sector = poly.flags.is_sector;
flags->should_relight = poly.flags.should_relight;
flags->is_outdoor = poly.flags.is_outdoor;
flags->is_ghost_occluder = poly.flags.is_ghost_occluder;
flags->is_dynamically_lit = poly.flags.is_dynamically_lit;
flags->sector_index = poly.flags.sector_index;
flags->is_lod = poly.flags.is_lod;
flags->normal_axis = poly.flags.normal_axis;
}
2 changes: 1 addition & 1 deletion vendor/phoenix

0 comments on commit a157d69

Please sign in to comment.