summaryrefslogtreecommitdiff
path: root/src/engine/ModelLoader.cpp
diff options
context:
space:
mode:
authorcoco875 <59367621+coco875@users.noreply.github.com>2025-12-07 15:34:53 +0100
committerGitHub <noreply@github.com>2025-12-07 07:34:53 -0700
commit02ad54ca72f5baf4614cb9b7c30f8dd780764d90 (patch)
treebd2719a154830d4c538e0caf91eb845ddb45552d /src/engine/ModelLoader.cpp
parenteec7d650482134352b7cde4801b979ce1ed2044e (diff)
Refactor yaml and remove segment (#531)
* move yaml (still need to fix header path) * fix header * change kart to karts and add migration * fix include * Update migration.py * fix common_texture_debug_font extraction * Update torch * update torch and header * unduplicate texture for tumble * Update torch * Update migration.py * put the sort by default * fix replace_segmented_textures_with_o2r_textures * Update torch * fix yamls * add manual_segments in data of course * comment out replace_segmented_textures_with_o2r_textures and segment 3 * remove segment 5 * (wip) remove segment 6 still plenty of thing to do * more vtx * more change * Update torch * small fix * Update BansheeBoardwalk.cpp * fix blockFort * Delete test.yaml * fix bowser castle and simplify track sections * fix choco mountain * clean banshee * fix dk jungle * fix double deck * fix macos * fix error * fix macos ci * Update torch * Update torch * fix frappe snowland * fix kalimari desert * fix koopa troopa beach * fix luigi raceway * fix mario raceway and simplify thing * fix moo moo farm * fix rainbow road * Update torch * Update torch * hopefully fix windows error * fix a small error * fix royal raceway (and podium in theory) * fix sherbet_land * fix skyscraper * fix toads turnpike * fix wario stadium * fix yoshi valley * update torch * more clang tidy rules * REMOVE totally SEGMENT (sorry for the PR) * remove unused field in course and props and unused packed asset * fix kart texture * fix particle * fix track section and transparency * try fix mode extra * fix macos build and render * fix collision in extra * small change and try fix windows error * a little of clean * more cleanup * forget header and more clean up * Update Makefile * fix credits * fix kart texture offset * remove LoadTextures and add Unload * fix definitevely mirror mode * add unload but it's not perfect * revert a bad fix * clean no longer used python script * fix crash with player * being able to load the same course twice * add a comment on DrawWater * fix render of transparent object * better hack * add a proper migration instruction * fix number * add basic modsmanager * add meta/mods.toml * Update EditorMath.h * Update ModsManager.cpp * basic modManager (maybe I should rename it ModLoader) * use range on dependencies * add information about mods.toml * fix coment * some rename around * Delete beta-to-v1.md * Update migrations.md * Update textures-pack.md * Update modding.md * Update modding.md * clean yamls_old * move to mods in engine * rename ModsManger to ModManager * move init and unload at the top * rename ModsMetadata to ModMetadata * fix header * Update ModManager.cpp * put core mods at top
Diffstat (limited to 'src/engine/ModelLoader.cpp')
-rw-r--r--src/engine/ModelLoader.cpp94
1 files changed, 0 insertions, 94 deletions
diff --git a/src/engine/ModelLoader.cpp b/src/engine/ModelLoader.cpp
deleted file mode 100644
index b73d98aee..000000000
--- a/src/engine/ModelLoader.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-#include "ModelLoader.h"
-#include "port/Engine.h"
-#include "engine/courses/Course.h"
-
-extern "C" {
-#include "memory.h"
-}
-
-void ModelLoader::Add(LoadModelList list) {
- _deferredList.push_back(list);
-}
-
-void ModelLoader::Load() {
- if (_hasRan) { // Ensure this does not get ran multiple times
- printf("ModelLoader.cpp has already been ran once.\n");
- return;
- }
- _hasRan = true;
-
- // Set to track processed courses
- std::unordered_set<std::shared_ptr<Course>> processedCourses;
-
- for (auto& list : _deferredList) {
- // Check if the course has already been processed
- if (processedCourses.find(list.course) != processedCourses.end()) {
- continue; // Skip if already processed
- }
-
- // Process the course
- ModelLoader::Extract(list.course);
-
- // Mark this course as processed
- processedCourses.insert(list.course);
- }
-}
-
-void ModelLoader::Extract(std::shared_ptr<Course> course) {
- std::shared_ptr<Course> saveCourse = gWorldInstance.CurrentCourse;
- gWorldInstance.CurrentCourse = course; // Quick hack so that `get_texture` will find the right textures.
-
- size_t vtxSize = (ResourceGetSizeByName(course->vtx) / sizeof(CourseVtx)) * sizeof(Vtx);
- size_t texSegSize;
-
- // Convert course vtx to vtx
- Vtx* vtx = reinterpret_cast<Vtx*>(malloc(vtxSize));
- if (vtx == NULL) {
- printf("ModelLoader: Failed to allocate vertex buffer for course: %s\n", course->Props.Name);
- return;
- }
- func_802A86A8(reinterpret_cast<CourseVtx*>(LOAD_ASSET_RAW(course->vtx)), vtx, vtxSize / sizeof(Vtx));
-
- // Extract packed DLs
- u8* packed = reinterpret_cast<u8*>(LOAD_ASSET_RAW(course->gfx));
- Gfx* gfx = reinterpret_cast<Gfx*>(malloc(sizeof(Gfx) * course->gfxSize)); // Size of unpacked DLs
- if (gfx == NULL) {
- printf("ModelLoader: Failed to allocate course displaylist memory for course: %s\n", course->Props.Name);
- return;
- }
-
- displaylist_unpack(reinterpret_cast<uintptr_t*>(gfx), reinterpret_cast<uintptr_t>(packed), 0);
-
- // Now that the data has been retrieved, extract the model data and save to provided buffers.
- for (auto& list : _deferredList) {
- // Ensure the list matches the course being extracted.
- if (list.course != course) {
- return;
- }
-
- memcpy(list.vtxBuffer, &vtx[list.vtxStart], list.vtxBufferSize * sizeof(Vtx));
- memcpy(list.gfxBuffer, &gfx[list.gfxStart], list.gfxBufferSize * sizeof(Gfx));
-
- UpdateVtx(list);
-
- }
-
- free(vtx);
- free(gfx);
-
- _deferredList.clear();
- gWorldInstance.CurrentCourse = saveCourse;
-}
-
-void ModelLoader::UpdateVtx(LoadModelList list) {
- for (size_t i = 0; i < list.gfxStart + list.gfxBufferSize; i++) {
- Gfx* gfx = &list.gfxBuffer[i];
-
- // Check if the current Gfx command is G_VTX
- if (GFX_GET_OPCODE(gfx->words.w0) == (G_VTX << 24)) {
- // Re-write the vtx to point at the provided vtx buffer.
- size_t vtxIndex = (gfx->words.w1 / sizeof(Vtx)) - list.vtxStart;
- gfx->words.w1 = reinterpret_cast<uintptr_t>(&list.vtxBuffer[vtxIndex]);
- }
- }
-}