summaryrefslogtreecommitdiff
path: root/src/code/THA_GA.c
diff options
context:
space:
mode:
authoremilybrooks <emilybrooksemilybrooks@gmail.com>2023-07-29 10:46:30 -0700
committerGitHub <noreply@github.com>2023-07-29 13:46:30 -0400
commitbe09c72d0ca03972fb3c43a858002a41a8e1c474 (patch)
tree1c4fe14a14ebcd45cb4cad113257d6ec8125c498 /src/code/THA_GA.c
parentea9f4c68bb2afee5529aa1027b6762542d20bb8f (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.c102
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));
+}