Files
jak-project/goal_src/jak2/engine/gfx/texture/texture-h.gc
T
Hat Kid 6a06291e6e jak1, jak2: add get-texture macro (#3778)
Ports the `get-texture` macro added in Jak 3 to Jak 1 and 2.
2024-11-26 11:29:34 +01:00

770 lines
30 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
;; name: texture-h.gc
;; name in dgo: texture-h
;; dgos: ENGINE, GAME
(declare-type texture-page basic)
(declare-type texture-pool basic)
(declare-type fog-texture-work structure)
(declare-type adgif-shader structure)
(declare-type texture basic)
(declare-type texture-id uint32)
(declare-type texture-anim-array array)
(declare-type texture-anim structure)
(define-extern adgif-shader<-texture-simple! (function adgif-shader texture adgif-shader))
(define-extern lookup-texture-by-id-fast (function texture-id texture))
(define-extern *edit-shader* texture-id)
(define-extern adgif-shader-update! (function adgif-shader texture none))
(declare-type texture-page-dir basic)
(define-extern texture-page-dir-inspect (function texture-page-dir symbol none))
(define-extern *texture-pool* texture-pool)
(define-extern *fog-texture-work* fog-texture-work)
(define-extern *skull-gem-texture-anim-array* (texture-anim-array texture-anim))
(defenum tex-upload-mode
(none -3)
(seg0-1 -2)
(seg0-1-2 -1)
(seg0 0)
(seg2 2)
)
;; DECOMP BEGINS
;; unique identifier for a texture, as the tpage number and index of the texture within the tpage
(deftype texture-id (uint32)
((index uint16 :offset 8 :size 12)
(page uint16 :offset 20 :size 12)
)
)
;; a chunk of vram.
(deftype texture-pool-segment (structure)
((dest uint32)
(size uint32)
)
:pack-me
:allow-misaligned
)
;; the manager for the VRAM.
(deftype texture-pool (basic)
((top int32)
(cur int32)
(allocate-func (function texture-pool texture-page kheap int texture-page))
(font-palette int32)
(segment texture-pool-segment 4 :inline)
(segment-near texture-pool-segment :inline :overlay-at (-> segment 0))
(segment-common texture-pool-segment :inline :overlay-at (-> segment 1))
(common-page texture-page 32)
(common-page-mask int32)
(update-sprites-flag symbol)
(update-flag symbol)
(texture-enable-user texture-enable-mask)
(texture-enable-user-menu texture-enable-mask)
(ids uint32 128)
)
(:methods
(new (symbol type) _type_)
(initialize! (_type_) _type_)
(print-usage (_type_) _type_)
(setup-font-texture (_type_) none)
(allocate-defaults (_type_) none)
(login-level-textures (_type_ level int (pointer texture-id)) none)
(add-level-tpage-dma (_type_ level tpage-category bucket-id) none)
(allocate-vram-words! (_type_ int) int)
(allocate-segment (_type_ texture-pool-segment int) texture-pool-segment)
(unload-page (_type_ texture-page) none)
(get-common-page-slot-by-id (_type_ int) int)
(update-warp-and-hud (_type_) none)
(update-sprites (_type_) none)
(mark-hud-warp-sprite-dirty (_type_) none)
(lay-out-sprite-tex (_type_) none)
(lay-out-hud-tex (_type_) none)
(lay-out-warp-tex (_type_) none)
(clear-ids (_type_) none)
)
)
;; mask where each bit indicates if some part of a tpage is used, by a texture.
;; additionally, the w component holds a minimum distance. The texture is only needed
;; if the distance to the object is smaller than this.
(deftype texture-mask (structure)
((mask vector4w :inline)
(dist float :overlay-at (-> mask data 3))
(long uint64 2 :overlay-at (-> mask data 0))
(quad uint128 :overlay-at (-> mask data 0))
)
)
;; grouping of three masks, corresponding to the 3 segments of the texture.
;; so mask 0 is needed if segment 0 of the texture is needed, etc...
(deftype texture-masks (structure)
((data texture-mask 3 :inline)
)
)
;; group of all texture-masks for a given tpage
(deftype texture-masks-array (inline-array-class)
((data texture-masks :inline :dynamic)
)
)
(set! (-> texture-masks-array heap-base) (the-as uint 48))
;; these globals are used during login. The level loading system sets this to the appropriate
;; mask/mask array, and the login methods of drawables will fill these out.
(define *texture-masks* (the-as texture-masks #f))
(define *texture-masks-array* (the-as texture-masks-array #f))
;; metadata for a texture.
(deftype texture (basic)
((w int16)
(h int16)
(num-mips uint8)
(tex1-control uint8)
(psm gs-psm)
(mip-shift uint8)
(clutpsm uint16)
(dest uint16 7)
(clutdest uint16)
(width uint8 7)
(name string)
(size uint32)
(uv-dist float)
(pad uint32 3)
(masks texture-masks :inline)
)
)
;; metadata for a "segment" of a texture page.
;; Each texture page has 3 segments - smaller number segments have higher detail
;; mips.
(deftype texture-page-segment (structure)
((block-data pointer)
(size uint32)
(dest uint32)
)
:pack-me
:allow-misaligned
)
(defun texture-mip->segment ((arg0 int) (arg1 int))
"Figure out which segment of a tpage a given mip level of a texture will be in.
arg0 is the mip level, arg1 is the total number of mips.
higher mip level is lower detail."
(if (>= 2 arg1)
(+ (- -1 arg0) arg1)
(max 0 (- 2 arg0))
)
)
;; a collection of textures. there is a tpage per category per level.
;; these tpages are loaded from the DVD.
;; eg: prison tfrag is its own tpage.
;; the tpage has multiple textures, and 3 segments. lower number segments
;; are larger and have hi-res versions of textures.
(deftype texture-page (basic)
((info file-info)
(name string)
(id uint32)
(length int32)
(mip0-size uint32)
(size uint32)
(segment texture-page-segment 3 :inline)
(dram-size uint32)
(pad uint32 15)
(data texture :dynamic)
)
(:methods
(relocate (_type_ kheap (pointer uint8)) texture-page :replace)
(remove-data-from-heap (_type_ kheap) _type_)
(get-leftover-block-count (_type_ int int) int)
(relocate-dests! (_type_ int int) none)
(add-to-dma-buffer (_type_ dma-buffer tex-upload-mode) int)
(upload-now! (_type_ tex-upload-mode) none)
)
)
;; a pointer to an adgif-shader, stored in bits 8-32. This allows them to fit into
;; an adgif shader easily.
(deftype shader-ptr (uint32)
((first-8 uint8 :offset 0 :size 8)
(shader uint32 :offset 8 :size 24)
)
)
;; an overlay structure containing a shader-ptr that points to the next adgif shader
;; in a linked list.
(deftype texture-link (structure)
((next shader-ptr 1)
)
)
;; an entry for a texture in the texture-page-dir.
;; the texture-page-dir contains an entry for each tpage.
;; Each entry contains a reference to the tpage, and a linked list of shaders
;; using it.
(deftype texture-page-dir-entry (structure)
((length int16)
(status uint16)
(page texture-page)
(link texture-link)
)
:pack-me
:allow-misaligned
)
;; the list of all texture pages.
;; this is static data loaded from the DVD at boot.
(deftype texture-page-dir (basic)
((length int32)
(entries texture-page-dir-entry 1 :inline)
)
(:methods
(relocate (_type_ kheap (pointer uint8)) none :replace)
(unlink-shaders-in-heap (_type_ kheap) int)
)
)
;; unused in jak 2, but metadata for postponing tpage copies until a second frame, to have a smaller
;; impact on frame times when loading.
(deftype texture-relocate-later (basic)
((memcpy symbol)
(dest uint32)
(source uint32)
(move uint32)
(entry texture-page-dir-entry)
(page texture-page)
)
)
(define *texture-relocate-later* (new 'global 'texture-relocate-later))
(set! (-> *texture-relocate-later* memcpy) #f)
(define *texture-page-dir* (the-as texture-page-dir #f))
(defenum link-test-flags
:type uint32
:bitfield #t
(needs-log-in 8)
(bit-9 9)
(backup-sprite-tex 10) ;; set when particle-setup-adgif fails texture lookup.
)
;; GS texturing/blending settings, called adgif-shader.
;; these are used by many different renderers and partially managed by the texture system.
;; for example, the texture system will automatically update tbp to point to the location
;; of texture.
(deftype adgif-shader (structure)
((quad qword 5 :inline)
(prims gs-reg64 10 :overlay-at quad)
(reg-0 uint8 :overlay-at (-> quad 0 data 2))
(reg-1 uint8 :overlay-at (-> prims 3))
(reg-2 uint8 :overlay-at (-> prims 5))
(reg-3 uint8 :overlay-at (-> prims 7))
(reg-4-u32 gs-reg32 :overlay-at (-> prims 9))
(reg-4 uint8 :overlay-at reg-4-u32)
(tex0 gs-tex0 :overlay-at (-> quad 0 data 0))
(tex1 gs-tex1 :overlay-at (-> prims 2))
(miptbp1 gs-miptbp :overlay-at (-> prims 4))
(clamp gs-clamp :overlay-at (-> prims 6))
(clamp-reg gs-reg64 :overlay-at reg-3)
(alpha gs-alpha :overlay-at (-> prims 8))
(alpha-as-miptb2 gs-miptbp :overlay-at alpha)
(link-test link-test-flags :overlay-at (-> quad 0 data 2))
(texture-id texture-id :overlay-at reg-1)
(next shader-ptr :overlay-at reg-2)
)
)
(deftype adgif-shader-array (inline-array-class)
((data adgif-shader :inline :dynamic)
)
)
(set! (-> adgif-shader-array heap-base) (the-as uint 80))
;; metadata about an area of vram set aside for fancy dynamic texture effects (sky, eye, etc)
(deftype texture-base (structure)
((vram-page uint32)
(vram-block uint32)
(vram-word uint32)
)
)
;; GS swizzling tables.
(define ct32-24-block-table
(new 'static 'boxed-array :type int32
0 1 4 5 16 17 20 21 2 3 6 7 18 19 22 23
8 9 12 13 24 25 28 29 10 11 14 15 26 27
30 31 )
)
(define mz32-24-block-table
(new 'static 'boxed-array :type int32
16 17 20 21 0 1 4 5 18 19 22 23 2 3 6 7
24 25 28 29 8 9 12 13 26 27 30 31 10 11
14 15 )
)
(define ct16-block-table
(new 'static 'boxed-array :type int32
0 2 8 10 1 3 9 11 4 6 12 14 5 7 13 15 16 18
24 26 17 19 25 27 20 22 28 30 21 23 29 31
)
)
(define ct16s-block-table
(new 'static 'boxed-array :type int32
0 2 16 18 1 3 17 19 8 10 24 26 9 11 25 27
4 6 20 22 5 7 21 23 12 14 28 30 13 15 29 31
)
)
(define mz16-block-table
(new 'static 'boxed-array :type int32
16 18 24 26 17 19 25 27 20 22 28 30 21 23 29
31 0 2 8 10 1 3 9 11 4 6 12 14 5 7 13 15)
)
(define mz16s-block-table
(new 'static 'boxed-array :type int32
16 18 0 2 17 19 1 3 24 26 8 10 25 27 9 11
20 22 4 6 21 23 5 7 28 30 12 14 29 31 13
15
)
)
(define mt8-block-table
(new 'static 'boxed-array :type int32
0 1 4 5 16 17 20 21 2 3 6 7 18 19 22 23 8 9
12 13 24 25 28 29 10 11 14 15 26 27 30 31
)
)
(define mt4-block-table
(new 'static 'boxed-array :type int32
0 2 8 10 1 3 9 11 4 6 12 14 5 7 13 15 16 18
24 26 17 19 25 27 20 22 28 30 21 23 29 31
)
)
(deftype texture-page-translate-item (structure)
((bucket bucket-id)
(level-index uint32)
(level-texture-page tpage-category-u32)
(texture-user texture-enable-mask-u32)
)
)
;; the order of all texture uploads in a frame.
;; this is used by the texture system to figure out if anything can be reused
;; or if it needs to be uploaded at a certain time.
(define *texture-page-translate*
(new 'static 'boxed-array :type texture-page-translate-item
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-lcom-sky-pre)
:level-index #x6
:level-texture-page (tpage-category-u32 sky)
:texture-user (texture-enable-mask-u32 sky)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l0-tfrag)
:texture-user (texture-enable-mask-u32 tfrag)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l1-tfrag)
:level-index #x1
:texture-user (texture-enable-mask-u32 tfrag)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l2-tfrag)
:level-index #x2
:texture-user (texture-enable-mask-u32 tfrag)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l3-tfrag)
:level-index #x3
:texture-user (texture-enable-mask-u32 tfrag)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l4-tfrag)
:level-index #x4
:texture-user (texture-enable-mask-u32 tfrag)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l5-tfrag)
:level-index #x5
:texture-user (texture-enable-mask-u32 tfrag)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l0-shrub)
:level-texture-page (tpage-category-u32 shrub)
:texture-user (texture-enable-mask-u32 shrub)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l1-shrub)
:level-index #x1
:level-texture-page (tpage-category-u32 shrub)
:texture-user (texture-enable-mask-u32 shrub)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l2-shrub)
:level-index #x2
:level-texture-page (tpage-category-u32 shrub)
:texture-user (texture-enable-mask-u32 shrub)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l3-shrub)
:level-index #x3
:level-texture-page (tpage-category-u32 shrub)
:texture-user (texture-enable-mask-u32 shrub)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l4-shrub)
:level-index #x4
:level-texture-page (tpage-category-u32 shrub)
:texture-user (texture-enable-mask-u32 shrub)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l5-shrub)
:level-index #x5
:level-texture-page (tpage-category-u32 shrub)
:texture-user (texture-enable-mask-u32 shrub)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l0-alpha)
:level-texture-page (tpage-category-u32 alpha)
:texture-user (texture-enable-mask-u32 alpha)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l1-alpha)
:level-index #x1
:level-texture-page (tpage-category-u32 alpha)
:texture-user (texture-enable-mask-u32 alpha)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l2-alpha)
:level-index #x2
:level-texture-page (tpage-category-u32 alpha)
:texture-user (texture-enable-mask-u32 alpha)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l3-alpha)
:level-index #x3
:level-texture-page (tpage-category-u32 alpha)
:texture-user (texture-enable-mask-u32 alpha)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l4-alpha)
:level-index #x4
:level-texture-page (tpage-category-u32 alpha)
:texture-user (texture-enable-mask-u32 alpha)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l5-alpha)
:level-index #x5
:level-texture-page (tpage-category-u32 alpha)
:texture-user (texture-enable-mask-u32 alpha)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-lcom-tfrag)
:level-index #x6
:texture-user (texture-enable-mask-u32 tfrag)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-lcom-shrub)
:level-index #x6
:level-texture-page (tpage-category-u32 shrub)
:texture-user (texture-enable-mask-u32 shrub)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l0-pris)
:level-texture-page (tpage-category-u32 pris)
:texture-user (texture-enable-mask-u32 pris)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l1-pris)
:level-index #x1
:level-texture-page (tpage-category-u32 pris)
:texture-user (texture-enable-mask-u32 pris)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l2-pris)
:level-index #x2
:level-texture-page (tpage-category-u32 pris)
:texture-user (texture-enable-mask-u32 pris)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l3-pris)
:level-index #x3
:level-texture-page (tpage-category-u32 pris)
:texture-user (texture-enable-mask-u32 pris)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l4-pris)
:level-index #x4
:level-texture-page (tpage-category-u32 pris)
:texture-user (texture-enable-mask-u32 pris)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l5-pris)
:level-index #x5
:level-texture-page (tpage-category-u32 pris)
:texture-user (texture-enable-mask-u32 pris)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-lcom-pris)
:level-index #x6
:level-texture-page (tpage-category-u32 pris)
:texture-user (texture-enable-mask-u32 pris)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l0-pris2)
:level-texture-page (tpage-category-u32 pris2)
:texture-user (texture-enable-mask-u32 pris)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l1-pris2)
:level-index #x1
:level-texture-page (tpage-category-u32 pris2)
:texture-user (texture-enable-mask-u32 pris)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l2-pris2)
:level-index #x2
:level-texture-page (tpage-category-u32 pris2)
:texture-user (texture-enable-mask-u32 pris)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l3-pris2)
:level-index #x3
:level-texture-page (tpage-category-u32 pris2)
:texture-user (texture-enable-mask-u32 pris)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l4-pris2)
:level-index #x4
:level-texture-page (tpage-category-u32 pris2)
:texture-user (texture-enable-mask-u32 pris)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l5-pris2)
:level-index #x5
:level-texture-page (tpage-category-u32 pris2)
:texture-user (texture-enable-mask-u32 pris)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-lcom-pris2)
:level-index #x6
:level-texture-page (tpage-category-u32 pris2)
:texture-user (texture-enable-mask-u32 pris)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l0-water)
:level-texture-page (tpage-category-u32 water)
:texture-user (texture-enable-mask-u32 water)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l1-water)
:level-index #x1
:level-texture-page (tpage-category-u32 water)
:texture-user (texture-enable-mask-u32 water)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l2-water)
:level-index #x2
:level-texture-page (tpage-category-u32 water)
:texture-user (texture-enable-mask-u32 water)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l3-water)
:level-index #x3
:level-texture-page (tpage-category-u32 water)
:texture-user (texture-enable-mask-u32 water)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l4-water)
:level-index #x4
:level-texture-page (tpage-category-u32 water)
:texture-user (texture-enable-mask-u32 water)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-l5-water)
:level-index #x5
:level-texture-page (tpage-category-u32 water)
:texture-user (texture-enable-mask-u32 water)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-lcom-water)
:level-index #x6
:level-texture-page (tpage-category-u32 water)
:texture-user (texture-enable-mask-u32 water)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-lcom-sky-post)
:level-index #x6
:level-texture-page (tpage-category-u32 sky)
:texture-user (texture-enable-mask-u32 sky)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-all-sprite)
:level-texture-page (tpage-category-u32 sprite)
:texture-user (texture-enable-mask-u32 sprite)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-all-sprite)
:level-index #x1
:level-texture-page (tpage-category-u32 sprite)
:texture-user (texture-enable-mask-u32 sprite)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-all-sprite)
:level-index #x2
:level-texture-page (tpage-category-u32 sprite)
:texture-user (texture-enable-mask-u32 sprite)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-all-sprite)
:level-index #x3
:level-texture-page (tpage-category-u32 sprite)
:texture-user (texture-enable-mask-u32 sprite)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-all-sprite)
:level-index #x4
:level-texture-page (tpage-category-u32 sprite)
:texture-user (texture-enable-mask-u32 sprite)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-all-sprite)
:level-index #x5
:level-texture-page (tpage-category-u32 sprite)
:texture-user (texture-enable-mask-u32 sprite)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-all-sprite)
:level-index #x6
:level-texture-page (tpage-category-u32 sprite)
:texture-user (texture-enable-mask-u32 sprite)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-all-warp)
:level-texture-page (tpage-category-u32 warp)
:texture-user (texture-enable-mask-u32 warp)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-all-warp)
:level-index #x1
:level-texture-page (tpage-category-u32 warp)
:texture-user (texture-enable-mask-u32 warp)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-all-warp)
:level-index #x2
:level-texture-page (tpage-category-u32 warp)
:texture-user (texture-enable-mask-u32 warp)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-all-warp)
:level-index #x3
:level-texture-page (tpage-category-u32 warp)
:texture-user (texture-enable-mask-u32 warp)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-all-warp)
:level-index #x4
:level-texture-page (tpage-category-u32 warp)
:texture-user (texture-enable-mask-u32 warp)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-all-warp)
:level-index #x5
:level-texture-page (tpage-category-u32 warp)
:texture-user (texture-enable-mask-u32 warp)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-all-warp)
:level-index #x6
:level-texture-page (tpage-category-u32 warp)
:texture-user (texture-enable-mask-u32 warp)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-all-map)
:level-texture-page (tpage-category-u32 map)
:texture-user (texture-enable-mask-u32 map)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-all-map)
:level-index #x1
:level-texture-page (tpage-category-u32 map)
:texture-user (texture-enable-mask-u32 map)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-all-map)
:level-index #x2
:level-texture-page (tpage-category-u32 map)
:texture-user (texture-enable-mask-u32 map)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-all-map)
:level-index #x3
:level-texture-page (tpage-category-u32 map)
:texture-user (texture-enable-mask-u32 map)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-all-map)
:level-index #x4
:level-texture-page (tpage-category-u32 map)
:texture-user (texture-enable-mask-u32 map)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-all-map)
:level-index #x5
:level-texture-page (tpage-category-u32 map)
:texture-user (texture-enable-mask-u32 map)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-all-map)
:level-index #x6
:level-texture-page (tpage-category-u32 map)
:texture-user (texture-enable-mask-u32 map)
)
(new 'static 'texture-page-translate-item
:bucket (bucket-id tex-all-map)
:level-index #x6
:level-texture-page (tpage-category-u32 alpha)
:texture-user (texture-enable-mask-u32 map)
)
)
)
(define *eyes-texture-base* (new 'static 'texture-base))
(define *skull-gem-texture-base* (new 'static 'texture-base))
(define *ocean-texture-base* (new 'static 'texture-base))
(define *ocean-envmap-texture-base* (new 'static 'texture-base))
(define *grey-scale-base* (new 'static 'texture-base))
(define *map-texture-base* (new 'static 'texture-base))
(define-extern texture-page-default-allocate (function texture-pool texture-page kheap int texture-page))
(define-extern texture-page-login (function texture-id (function texture-pool texture-page kheap int texture-page) kheap texture-page-dir-entry))
(define-extern lookup-texture-by-id (function texture-id texture))
;; og:preserve-this
(defmacro get-texture (name tpage)
`(lookup-texture-by-id ,(string->symbol-format "{}-{}" name tpage)))
(import "goal_src/jak2/engine/data/tpages.gc")
(import "goal_src/jak2/engine/data/textures.gc")