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 15, 2023
1 parent 74ea741 commit 11781c5
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 0 deletions.
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 : 2;
std::uint8_t is_occluder : 1;
std::uint8_t is_sector : 1;
std::uint8_t should_relight : 1;
std::uint8_t is_outdoor : 1;
std::uint8_t is_ghost_occluder : 1;
std::uint8_t is_dynamically_lit : 1;
std::int16_t sector_index : 16;

uint8_t is_lod : 1;
uint8_t normal_axis : 2;
} 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);
32 changes: 32 additions & 0 deletions src/Mesh.cc
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ PxMesh* pxMshLoadFromVfs(PxVfs const* vfs, char const* name) {
return result;
}


void pxMshDestroy(PxMesh* msh) {
delete msh;
}
Expand Down Expand Up @@ -97,3 +98,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;
}

0 comments on commit 11781c5

Please sign in to comment.