You've already forked Microtransactions64
mirror of
https://github.com/Print-and-Panic/Microtransactions64.git
synced 2026-01-21 10:17:19 -08:00
Fix huge stack allocation in surface loading functions (#569)
This commit is contained in:
@@ -675,12 +675,12 @@ static void get_optimal_coll_dist(struct Object *obj) {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static TerrainData sVertexData[600];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Transform an object's vertices, reload them, and render the object.
|
* Transform an object's vertices, reload them, and render the object.
|
||||||
*/
|
*/
|
||||||
void load_object_collision_model(void) {
|
void load_object_collision_model(void) {
|
||||||
TerrainData vertexData[600];
|
|
||||||
|
|
||||||
TerrainData *collisionData = o->collisionData;
|
TerrainData *collisionData = o->collisionData;
|
||||||
f32 marioDist = o->oDistanceToMario;
|
f32 marioDist = o->oDistanceToMario;
|
||||||
|
|
||||||
@@ -709,11 +709,11 @@ void load_object_collision_model(void) {
|
|||||||
&& !(o->activeFlags & ACTIVE_FLAG_IN_DIFFERENT_ROOM)
|
&& !(o->activeFlags & ACTIVE_FLAG_IN_DIFFERENT_ROOM)
|
||||||
) {
|
) {
|
||||||
collisionData++;
|
collisionData++;
|
||||||
transform_object_vertices(&collisionData, vertexData);
|
transform_object_vertices(&collisionData, sVertexData);
|
||||||
|
|
||||||
// TERRAIN_LOAD_CONTINUE acts as an "end" to the terrain data.
|
// TERRAIN_LOAD_CONTINUE acts as an "end" to the terrain data.
|
||||||
while (*collisionData != TERRAIN_LOAD_CONTINUE) {
|
while (*collisionData != TERRAIN_LOAD_CONTINUE) {
|
||||||
load_object_surfaces(&collisionData, vertexData, TRUE);
|
load_object_surfaces(&collisionData, sVertexData, TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
COND_BIT((marioDist < o->oDrawingDistance), o->header.gfx.node.flags, GRAPH_RENDER_ACTIVE);
|
COND_BIT((marioDist < o->oDrawingDistance), o->header.gfx.node.flags, GRAPH_RENDER_ACTIVE);
|
||||||
@@ -723,7 +723,6 @@ void load_object_collision_model(void) {
|
|||||||
* Transform an object's vertices and add them to the static surface pool.
|
* Transform an object's vertices and add them to the static surface pool.
|
||||||
*/
|
*/
|
||||||
void load_object_static_model(void) {
|
void load_object_static_model(void) {
|
||||||
TerrainData vertexData[600];
|
|
||||||
TerrainData *collisionData = o->collisionData;
|
TerrainData *collisionData = o->collisionData;
|
||||||
u32 surfacePoolData;
|
u32 surfacePoolData;
|
||||||
|
|
||||||
@@ -734,11 +733,11 @@ void load_object_static_model(void) {
|
|||||||
gSurfacesAllocated = gNumStaticSurfaces;
|
gSurfacesAllocated = gNumStaticSurfaces;
|
||||||
|
|
||||||
collisionData++;
|
collisionData++;
|
||||||
transform_object_vertices(&collisionData, vertexData);
|
transform_object_vertices(&collisionData, sVertexData);
|
||||||
|
|
||||||
// TERRAIN_LOAD_CONTINUE acts as an "end" to the terrain data.
|
// TERRAIN_LOAD_CONTINUE acts as an "end" to the terrain data.
|
||||||
while (*collisionData != TERRAIN_LOAD_CONTINUE) {
|
while (*collisionData != TERRAIN_LOAD_CONTINUE) {
|
||||||
load_object_surfaces(&collisionData, vertexData, FALSE);
|
load_object_surfaces(&collisionData, sVertexData, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
surfacePoolData = (uintptr_t)gCurrStaticSurfacePoolEnd - (uintptr_t)gCurrStaticSurfacePool;
|
surfacePoolData = (uintptr_t)gCurrStaticSurfacePoolEnd - (uintptr_t)gCurrStaticSurfacePool;
|
||||||
|
|||||||
Reference in New Issue
Block a user