diff --git a/game/graphics/opengl_renderer/OpenGLRenderer.cpp b/game/graphics/opengl_renderer/OpenGLRenderer.cpp index e54bba8ae4..0d6d6cc0a6 100644 --- a/game/graphics/opengl_renderer/OpenGLRenderer.cpp +++ b/game/graphics/opengl_renderer/OpenGLRenderer.cpp @@ -135,6 +135,7 @@ void OpenGLRenderer::init_bucket_renderers_jak3() { m_blit_displays = init_bucket_renderer("blit", BucketCategory::OTHER, BucketId::BLIT_START); + init_bucket_renderer("vis", BucketCategory::OTHER, BucketId::BUCKET_2); // 4 init_bucket_renderer("tex-lcom-sky-pre", BucketCategory::TEX, @@ -286,8 +287,12 @@ void OpenGLRenderer::init_bucket_renderers_jak3() { init_bucket_renderer("tex-hud-hud-alpha", BucketCategory::TEX, BucketId::TEX_HUD_HUD_ALPHA, texture_animator); - // init_bucket_renderer("tex-hud-hud-alpha", BucketCategory::TEX, - // BucketId::TEX_HUD_HUD_ALPHA, texture_animator); + init_bucket_renderer("tex-hud-hud-alpha", BucketCategory::TEX, + BucketId::TEX_HUD_HUD_ALPHA, texture_animator); + init_bucket_renderer("tex-hud-pris2", BucketCategory::TEX, + BucketId::TEX_HUD_PRIS2, texture_animator); + init_bucket_renderer("hud-draw-hud-alpha", BucketCategory::OTHER, + BucketId::HUD_DRAW_HUD_ALPHA, 0x1000); // 583 init_bucket_renderer("debug", BucketCategory::OTHER, BucketId::DEBUG, 0x8000); diff --git a/game/graphics/opengl_renderer/background/Shrub.cpp b/game/graphics/opengl_renderer/background/Shrub.cpp index 623d5bb4f0..6747719347 100644 --- a/game/graphics/opengl_renderer/background/Shrub.cpp +++ b/game/graphics/opengl_renderer/background/Shrub.cpp @@ -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; diff --git a/goal_src/jak3/engine/draw/drawable.gc b/goal_src/jak3/engine/draw/drawable.gc index 09e38b57aa..dfe68875c1 100644 --- a/goal_src/jak3/engine/draw/drawable.gc +++ b/goal_src/jak3/engine/draw/drawable.gc @@ -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* diff --git a/goal_src/jak3/engine/gfx/background/background.gc b/goal_src/jak3/engine/gfx/background/background.gc index ba5fa103bc..0172bb5671 100644 --- a/goal_src/jak3/engine/gfx/background/background.gc +++ b/goal_src/jak3/engine/gfx/background/background.gc @@ -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) ) diff --git a/goal_src/jak3/engine/gfx/foreground/foreground.gc b/goal_src/jak3/engine/gfx/foreground/foreground.gc index eaad9d82c8..f2d64d5a70 100644 --- a/goal_src/jak3/engine/gfx/foreground/foreground.gc +++ b/goal_src/jak3/engine/gfx/foreground/foreground.gc @@ -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)