mirror of
https://github.com/open-goal/jak-project
synced 2026-07-31 00:14:38 -04:00
6a06291e6e
Ports the `get-texture` macro added in Jak 3 to Jak 1 and 2.
770 lines
30 KiB
Common Lisp
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") |