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
	
	 Isaac0-dev
						Isaac0-dev