mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2025-10-30 08:01:01 +00:00
fix graph node reset memory corruption
by only resetting permanent models (which is all that needs to be reset anyway).
This commit is contained in:
parent
b9db3d5416
commit
d4ca501a5c
3 changed files with 13 additions and 0 deletions
|
|
@ -979,6 +979,7 @@ struct GraphNode* DynOS_Model_StoreGeo(u32* aId, enum ModelPool aModelPool, void
|
|||
struct GraphNode* DynOS_Model_GetGeo(u32 aId);
|
||||
u32 DynOS_Model_GetIdFromAsset(void* asset);
|
||||
u32 DynOS_Model_GetIdFromGraphNode(struct GraphNode* aNode);
|
||||
enum ModelPool DynOS_Model_GetModelPoolFromGraphNode(struct GraphNode* aNode);
|
||||
void DynOS_Model_OverwriteSlot(u32 srcSlot, u32 dstSlot);
|
||||
void DynOS_Model_ClearPool(enum ModelPool aModelPool);
|
||||
|
||||
|
|
|
|||
|
|
@ -276,6 +276,7 @@ size_t get_graph_node_size(s16 nodeType) {
|
|||
|
||||
void DynOS_Actor_RegisterModifiedGraphNode(GraphNode *aNode) {
|
||||
if (sModifiedGraphNodes.find(aNode) == sModifiedGraphNodes.end()) {
|
||||
if (DynOS_Model_GetModelPoolFromGraphNode(aNode) != MODEL_POOL_PERMANENT) { return; } // Only need to reset permanent models
|
||||
size_t size = get_graph_node_size(aNode->type);
|
||||
if (size == 0) { return; } // Unexpected
|
||||
GraphNode *graphNodeCopy = (GraphNode *) malloc(size);
|
||||
|
|
|
|||
|
|
@ -237,6 +237,17 @@ u32 DynOS_Model_GetIdFromAsset(void* asset) {
|
|||
return MODEL_ERROR_MODEL;
|
||||
}
|
||||
|
||||
enum ModelPool DynOS_Model_GetModelPoolFromGraphNode(struct GraphNode* aNode) {
|
||||
for (auto& it : sIdMap) {
|
||||
if (!it.second.size() || it.second.empty()) { continue; }
|
||||
auto& node = it.second.back();
|
||||
if (aNode == node.graphNode) {
|
||||
return node.modelPool;
|
||||
}
|
||||
}
|
||||
return MODEL_POOL_MAX;
|
||||
}
|
||||
|
||||
void DynOS_Model_OverwriteSlot(u32 srcSlot, u32 dstSlot) {
|
||||
sOverwriteMap[srcSlot] = dstSlot;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue