mirror of
https://github.com/open-goal/jak-project
synced 2026-06-30 03:49:08 -04:00
add background data to pc renderers
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user