add background data to pc renderers

This commit is contained in:
Hat Kid
2024-04-06 00:45:42 +02:00
parent 2ef23b2786
commit 76ee24f2b1
5 changed files with 143 additions and 22 deletions
@@ -135,6 +135,7 @@ void OpenGLRenderer::init_bucket_renderers_jak3() {
m_blit_displays =
init_bucket_renderer<BlitDisplays>("blit", BucketCategory::OTHER, BucketId::BLIT_START);
init_bucket_renderer<VisDataHandler>("vis", BucketCategory::OTHER, BucketId::BUCKET_2);
// 4
init_bucket_renderer<TextureUploadHandler>("tex-lcom-sky-pre", BucketCategory::TEX,
@@ -286,8 +287,12 @@ void OpenGLRenderer::init_bucket_renderers_jak3() {
init_bucket_renderer<TextureUploadHandler>("tex-hud-hud-alpha", BucketCategory::TEX,
BucketId::TEX_HUD_HUD_ALPHA, texture_animator);
// init_bucket_renderer<TextureUploadHandler>("tex-hud-hud-alpha", BucketCategory::TEX,
// BucketId::TEX_HUD_HUD_ALPHA, texture_animator);
init_bucket_renderer<TextureUploadHandler>("tex-hud-hud-alpha", BucketCategory::TEX,
BucketId::TEX_HUD_HUD_ALPHA, texture_animator);
init_bucket_renderer<TextureUploadHandler>("tex-hud-pris2", BucketCategory::TEX,
BucketId::TEX_HUD_PRIS2, texture_animator);
init_bucket_renderer<ProgressRenderer>("hud-draw-hud-alpha", BucketCategory::OTHER,
BucketId::HUD_DRAW_HUD_ALPHA, 0x1000);
// 583
init_bucket_renderer<DirectRenderer>("debug", BucketCategory::OTHER, BucketId::DEBUG, 0x8000);
@@ -45,7 +45,7 @@ void Shrub::render(DmaFollower& dma, SharedRenderState* render_state, ScopedProf
memcpy(&m_pc_port_data, pc_port_data.data, sizeof(TfragPcPortData));
m_pc_port_data.level_name[11] = '\0';
if (render_state->version == GameVersion::Jak2) {
if (render_state->version >= GameVersion::Jak2) {
// jak 2 proto visibility
auto proto_mask_data = dma.read_and_advance();
m_proto_vis_data = proto_mask_data.data;
+11 -11
View File
@@ -1501,17 +1501,17 @@
(reset! *prim-work*)
; ;; update wind/time of day prior to drawing.
; (let ((gp-2 (-> pp clock)))
; (if (= (-> *time-of-day-context* mode) (time-of-day-palette-id unk3))
; (set! (-> pp clock) (-> *display* bg-clock))
; (set! (-> pp clock) (-> *display* real-clock))
; )
; (if (not (paused?))
; (update-wind *wind-work* *wind-scales*)
; )
; (update-time-of-day *time-of-day-context*)
; (set! (-> pp clock) gp-2)
; )
(let ((gp-2 (-> pp clock)))
(if (= (-> *time-of-day-context* mode) (time-of-day-palette-id unk3))
(set! (-> pp clock) (-> *display* bg-clock))
(set! (-> pp clock) (-> *display* real-clock))
)
; (if (not (paused?))
; (update-wind *wind-work* *wind-scales*)
; )
(update-time-of-day *time-of-day-context*)
(set! (-> pp clock) gp-2)
)
; ;; draw sky
; (with-profiler 'sky *profile-sky-color*
@@ -60,13 +60,6 @@
(set! (-> data-ptr 5) (-> lev mood-context itimes 1 quad))
(set! (-> data-ptr 6) (-> lev mood-context itimes 2 quad))
(set! (-> data-ptr 7) (-> lev mood-context itimes 3 quad))
;; HACK:
(let ((vec (new 'static 'vector4w :x #x70707070 :y #x70707070 :z #x70707070 :w #x70707070)))
(set! (-> data-ptr 4) (-> vec quad))
(set! (-> data-ptr 5) (-> vec quad))
(set! (-> data-ptr 6) (-> vec quad))
(set! (-> data-ptr 7) (-> vec quad))
)
(set! (-> data-ptr 8) (-> *math-camera* camera-temp vector 0 quad))
(set! (-> data-ptr 9) (-> *math-camera* camera-temp vector 1 quad))
(set! (-> data-ptr 10) (-> *math-camera* camera-temp vector 2 quad))
@@ -229,9 +222,132 @@
(none)
)
(defun add-pc-camera-data ((dma-buf dma-buffer))
"Add PC-port specific camera data. used as fallback for collide mesh renderer.
Same as add-pc-trag3-data but level-specific data is left undefined."
(let ((packet (the-as dma-packet (-> dma-buf base))))
(set! (-> packet dma) (new 'static 'dma-tag :id (dma-tag-id cnt) :qwc 24))
(set! (-> packet vif0) (new 'static 'vif-tag))
(set! (-> packet vif1) (new 'static 'vif-tag :cmd (vif-cmd pc-port)))
(set! (-> dma-buf base) (the pointer (&+ packet 16)))
)
;; first 4 quadwords are planes, then itimes
(let ((data-ptr (the-as (pointer uint128) (-> dma-buf base))))
;; the "use-camera-other" flag is set to "move" entire levels,
;; like the rotating city below in the throne room.
(set! (-> data-ptr 0) (-> *math-camera* plane 0 quad))
(set! (-> data-ptr 1) (-> *math-camera* plane 1 quad))
(set! (-> data-ptr 2) (-> *math-camera* plane 2 quad))
(set! (-> data-ptr 3) (-> *math-camera* plane 3 quad))
;; (set! (-> data-ptr 4) (-> lev mood-context itimes 0 quad))
;; (set! (-> data-ptr 5) (-> lev mood-context itimes 1 quad))
;; (set! (-> data-ptr 6) (-> lev mood-context itimes 2 quad))
;; (set! (-> data-ptr 7) (-> lev mood-context itimes 3 quad))
(set! (-> data-ptr 8) (-> *math-camera* camera-temp vector 0 quad))
(set! (-> data-ptr 9) (-> *math-camera* camera-temp vector 1 quad))
(set! (-> data-ptr 10) (-> *math-camera* camera-temp vector 2 quad))
(set! (-> data-ptr 11) (-> *math-camera* camera-temp vector 3 quad))
(set! (-> data-ptr 12) (-> *math-camera* hvdf-off quad))
(let ((vec (-> (the (inline-array vector) data-ptr) 13)))
(set! (-> vec x) (-> *math-camera* pfog0))
(set! (-> vec y) (-> *math-camera* fog-min))
(set! (-> vec z) (-> *math-camera* fog-max))
)
(set! (-> data-ptr 14) (-> *math-camera* trans quad))
(set! (-> data-ptr 15) (-> *math-camera* camera-rot vector 0 quad))
(set! (-> data-ptr 16) (-> *math-camera* camera-rot vector 1 quad))
(set! (-> data-ptr 17) (-> *math-camera* camera-rot vector 2 quad))
(set! (-> data-ptr 18) (-> *math-camera* camera-rot vector 3 quad))
(set! (-> data-ptr 19) (-> *math-camera* perspective vector 0 quad))
(set! (-> data-ptr 20) (-> *math-camera* perspective vector 1 quad))
(set! (-> data-ptr 21) (-> *math-camera* perspective vector 2 quad))
(set! (-> data-ptr 22) (-> *math-camera* perspective vector 3 quad))
(charp<-string (the (pointer uint8) (&-> data-ptr 23)) (symbol->string #f))
)
(&+! (-> dma-buf base) (* 16 24))
)
(defun add-pc-port-background-data ((dma-buf dma-buffer))
"PC Port added"
;; loop over levels
(dotimes (lev-idx (-> *level* length))
(let ((lev (-> *level* draw-level lev-idx))
(dma-start (-> dma-buf base)))
(cond
((and lev (= (-> lev status) 'active))
;; the level is active.
(let ((packet (the-as dma-packet (-> dma-buf base))))
(set! (-> packet dma) (new 'static 'dma-tag :id (dma-tag-id cnt) :qwc 128))
(set! (-> packet vif0) (the-as vif-tag *fog-color*))
(set! (-> packet vif1) (new 'static 'vif-tag :cmd (vif-cmd pc-port)))
(set! (-> dma-buf base) (the pointer (&+ packet 16)))
)
(quad-copy! (-> dma-buf base) (-> lev vis-bits) 128)
(&+! (-> dma-buf base) (* 16 128))
)
(else
(let ((packet (the-as dma-packet (-> dma-buf base))))
(set! (-> packet dma) (new 'static 'dma-tag :id (dma-tag-id cnt) :qwc 1))
(set! (-> packet vif0) (the-as vif-tag *fog-color*))
(set! (-> packet vif1) (new 'static 'vif-tag :cmd (vif-cmd pc-port)))
(set! (-> dma-buf base) (the pointer (&+ packet 16)))
)
(set! (-> (the (pointer uint128) (-> dma-buf base))) (the uint128 0))
(&+! (-> dma-buf base) (* 16 1))
)
)
(let ((a3-3 (-> dma-buf base)))
(let ((v1-38 (the-as object (-> dma-buf base))))
(set! (-> (the-as dma-packet v1-38) dma) (new 'static 'dma-tag :id (dma-tag-id next)))
(set! (-> (the-as dma-packet v1-38) vif0) (new 'static 'vif-tag))
(set! (-> (the-as dma-packet v1-38) vif1) (new 'static 'vif-tag))
(set! (-> dma-buf base) (&+ (the-as pointer v1-38) 16))
)
(dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) bucket-group)
(bucket-id bucket2)
dma-start
(the-as (pointer dma-tag) a3-3)
)
)
)
)
(let* ((dma-buff (-> *display* frames (-> *display* on-screen) global-buf))
(dma-start (-> dma-buff base)))
(add-pc-camera-data dma-buff)
(let ((a3-22 (-> dma-buff base)))
(let ((v1-57 (the-as object (-> dma-buff base))))
(set! (-> (the-as dma-packet v1-57) dma) (new 'static 'dma-tag :id (dma-tag-id next)))
(set! (-> (the-as dma-packet v1-57) vif0) (new 'static 'vif-tag))
(set! (-> (the-as dma-packet v1-57) vif1) (new 'static 'vif-tag))
(set! (-> dma-buff base) (&+ (the-as pointer v1-57) 16))
)
(dma-bucket-insert-tag
(-> *display* frames (-> *display* on-screen) bucket-group)
(bucket-id bucket2)
dma-start
(the-as (pointer dma-tag) a3-22)
)
)
)
(the-as pointer 0)
)
;; WARN: Function finish-background has a return type of none, but the expression builder found a return statement.
(defun finish-background ()
"Run all renderers for background data added."
(#when PC_PORT
(add-pc-port-background-data
(-> *display* frames (-> *display* on-screen) global-buf)
)
)
(if (get-menu-mode *blit-displays-work*)
(return #f)
)
@@ -21,7 +21,7 @@
;; DECOMP BEGINS
(define foreground-vu0-block (new 'static 'vu-function :length 9 :qlength 5))
(define foreground-vu0-block (new 'static 'vu-function #|:length 9 :qlength 5|#))
(define *bucket-map* (new 'static 'array bucket-id-16 462
(bucket-id-16 merc-l0-tfrag)