jak-project/goal_src/jak2/engine/gfx/sprite/sprite-h.gc
ManDude 42f995b059
reduce glow renderer vram usage + raise glow sprite limit (#3194)
Makes the glow sprite renderer flush when full capacity is reached,
instead of at the end. Also allows us to reduce the textures used for it
(finally). Worst case scenario there's 4-5 flushes per frame.

Fixes incessant flickering in the dig.
2023-11-12 00:11:50 +00:00

92 lines
3.5 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
;; name: sprite-h.gc
;; name in dgo: sprite-h
;; dgos: ENGINE, GAME
(define-extern sprite-init-distorter (function dma-buffer none))
(define-extern sprite-draw-distorters (function dma-buffer none))
(define-extern sprite-glow-init-engine (function dma-buffer none))
(define-extern sprite-glow-draw (function dma-buffer none))
(#when PC_BIG_MEMORY (defconstant SPRITE_MAX_AMOUNT_MULT 12))
;; DECOMP BEGINS
(deftype sprite-vec-data-2d (structure)
((x-y-z-sx vector :inline)
(flag-rot-sy vector :inline)
(r-g-b-a vector :inline)
(x float :overlay-at (-> x-y-z-sx data 0))
(y float :overlay-at (-> x-y-z-sx data 1))
(z float :overlay-at (-> x-y-z-sx data 2))
(sx float :overlay-at (-> x-y-z-sx data 3))
(sy float :overlay-at (-> flag-rot-sy data 3))
(rot float :overlay-at (-> flag-rot-sy data 2))
(flag int32 :overlay-at (-> flag-rot-sy data 0))
(matrix int32 :overlay-at (-> flag-rot-sy data 1))
(warp-turns int32 :overlay-at (-> flag-rot-sy data 0))
(r float :overlay-at (-> r-g-b-a data 0))
(g float :overlay-at (-> r-g-b-a data 1))
(b float :overlay-at (-> r-g-b-a data 2))
(a float :overlay-at (-> r-g-b-a data 3))
(trans vector3s :inline :overlay-at (-> x-y-z-sx data 0))
(color rgbaf :inline :overlay-at (-> r-g-b-a data 0))
(data uint128 1 :overlay-at (-> x-y-z-sx data 0))
(data64 uint64 6 :overlay-at (-> x-y-z-sx data 0))
)
)
(deftype sprite-array-2d (basic)
((num-sprites int32 2)
(num-valid int32 2)
(vec-data pointer)
(adgif-data (inline-array adgif-shader))
(pad uint128 4)
(data uint128 1)
)
(:methods
(new (symbol type int int) _type_)
)
)
(deftype sprite-vec-data-3d (structure)
((x-y-z-sx vector :inline)
(qx-qy-qz-sy vector :inline)
(r-g-b-a vector :inline)
(x float :overlay-at (-> x-y-z-sx data 0))
(y float :overlay-at (-> x-y-z-sx data 1))
(z float :overlay-at (-> x-y-z-sx data 2))
(sx float :overlay-at (-> x-y-z-sx data 3))
(sy float :overlay-at (-> qx-qy-qz-sy data 3))
(qx float :overlay-at (-> qx-qy-qz-sy data 0))
(qy float :overlay-at (-> qx-qy-qz-sy data 1))
(qz float :overlay-at (-> qx-qy-qz-sy data 2))
(r float :overlay-at (-> r-g-b-a data 0))
(g float :overlay-at (-> r-g-b-a data 1))
(b float :overlay-at (-> r-g-b-a data 2))
(a float :overlay-at (-> r-g-b-a data 3))
(trans vector3s :inline :overlay-at (-> x-y-z-sx data 0))
(rot vector3s :inline :overlay-at (-> qx-qy-qz-sy data 0))
(color rgbaf :inline :overlay-at (-> r-g-b-a data 0))
(data uint128 1 :overlay-at (-> x-y-z-sx data 0))
)
)
(deftype sprite-array-3d (basic)
((num-sprites int32 2)
(num-valid int32 2)
(vec-data pointer)
(adgif-data (inline-array adgif-shader))
(data uint128 1)
)
(:methods
(new (symbol type int int) _type_)
)
)