diff options
| author | emilybrooks <emilybrooksemilybrooks@gmail.com> | 2023-07-29 10:46:30 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-07-29 13:46:30 -0400 |
| commit | be09c72d0ca03972fb3c43a858002a41a8e1c474 (patch) | |
| tree | 1c4fe14a14ebcd45cb4cad113257d6ec8125c498 /src/code/THA_GA.c | |
| parent | ea9f4c68bb2afee5529aa1027b6762542d20bb8f (diff) | |
TwoHeadArena, THA_GA, sys_matrix OK (#18)
* matched TwoHeadArena and THA_GA
* header files
* started sys_matrix.c
* more functions matched
* sys_matrix matching
* imported data
* imported bss
* cleanup
* more cleanup
* last cleanup
* formatting
* moved prototypes
* add back ultra64.h
* remove dlabel jlabel temp fix
Diffstat (limited to 'src/code/THA_GA.c')
| -rw-r--r-- | src/code/THA_GA.c | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/src/code/THA_GA.c b/src/code/THA_GA.c new file mode 100644 index 0000000..51d5c28 --- /dev/null +++ b/src/code/THA_GA.c @@ -0,0 +1,102 @@ +/** + * @file THA_GA.c + * + * This file implements a particular use of the double-ended stack allocator from TwoHeadArena.c for graphics data. + * + * Display list commands are allocated from the head while other graphics data such as matrices and vertices are + * allocated from the tail end. + * + * @see TwoHeadArena.c + */ + +#include "global.h" +#include "THA_GA.h" + +void THA_GA_ct(TwoHeadGfxArena* thga, void* start, size_t size) { + THA_ct(&thga->tha, start, size); +} + +void THGA_dt(TwoHeadGfxArena* thga) { + THA_dt(&thga->tha); +} + +u32 THA_GA_isCrash(TwoHeadGfxArena* thga) { + return THA_isCrash(&thga->tha); +} + +void THA_GA_init(TwoHeadGfxArena* thga) { + THA_init(&thga->tha); +} + +s32 THA_GA_getFreeBytes(TwoHeadGfxArena* thga) { + return THA_getFreeBytes(&thga->tha); +} + +Gfx* THA_GA_getHeadPtr(TwoHeadGfxArena* thga) { + return THA_getHeadPtr(&thga->tha); +} + +void THA_GA_setHeadPtr(TwoHeadGfxArena* thga, Gfx* newHead) { + THA_setHeadPtr(&thga->tha, newHead); +} + +void* THA_GA_getTailPtr(TwoHeadGfxArena* thga) { + return THA_getTailPtr(&thga->tha); +} + +/** + * Allocates a display list of `num` Gfx commands to the head of the Two Head Gfx Arena. + */ +Gfx* THA_GA_nextPtrN(TwoHeadGfxArena* thga, size_t num) { + THA_nextPtrN(&thga->tha, num * sizeof(Gfx)); +} + +/** + * Allocates a single Gfx command to the head of the Two Head Gfx Arena. + */ +Gfx* THA_GA_nextPtr1(TwoHeadGfxArena* thga) { + return THA_GA_nextPtrN(thga, 1); +} + +/** + * Allocates a single Gfx command to the head of the Two Head Gfx Arena. + */ +Gfx* THA_GA_NEXT_DISP(TwoHeadGfxArena* thga) { + return THA_GA_nextPtr1(thga); +} + +/** + * Allocates to the end of the Two Head Gfx Arena. Intended for data complementary to the display lists such as + * matrices and vertices that are only needed for a single graphics task. + */ +void* THA_GA_alloc(TwoHeadGfxArena* thga, size_t size) { + return THA_alloc(&thga->tha, size); +} + +/** + * Allocates `num` matrices to the tail end of the Two Head Gfx Arena. + */ +Mtx* THA_GA_allocMtxN(TwoHeadGfxArena* thga, size_t num) { + return THA_GA_alloc(thga, num * sizeof(Mtx)); +} + +/** + * Allocates a matrix to the tail end of the Two Head Gfx Arena. + */ +Mtx* THA_GA_allocMtx1(TwoHeadGfxArena* thga) { + return THA_GA_alloc(thga, sizeof(Mtx)); +} + +/** + * Allocates `num` vertices to the tail end of the Two Head Gfx Arena. + */ +Vtx* THA_GA_allocVtxN(TwoHeadGfxArena* thga, u32 num) { + return THA_GA_alloc(thga, num * sizeof(Vtx)); +} + +/** + * Allocates a vertex to the tail end of the Two Head Gfx Arena. + */ +Vtx* THA_GA_allocVtx1(TwoHeadGfxArena* thga) { + return THA_GA_alloc(thga, sizeof(Vtx)); +} |
