diff --git a/game/graphics/opengl_renderer/Warp.cpp b/game/graphics/opengl_renderer/Warp.cpp index 3b1e789813..15f2bccf72 100644 --- a/game/graphics/opengl_renderer/Warp.cpp +++ b/game/graphics/opengl_renderer/Warp.cpp @@ -12,7 +12,7 @@ void Warp::render(DmaFollower& dma, SharedRenderState* render_state, ScopedProfi render_state->render_fb_x, render_state->render_fb_y, render_state->render_fb); render_state->texture_pool->move_existing_to_vram(m_warp_src_tex, m_tbp); - m_generic->render_in_mode(dma, render_state, prof, Generic2::Mode::NORMAL); + m_generic->render_in_mode(dma, render_state, prof, Generic2::Mode::WARP); } void Warp::init_textures(TexturePool& tex_pool, GameVersion version) { diff --git a/game/graphics/opengl_renderer/foreground/Generic2.cpp b/game/graphics/opengl_renderer/foreground/Generic2.cpp index 16ecffba57..2146b43c5c 100644 --- a/game/graphics/opengl_renderer/foreground/Generic2.cpp +++ b/game/graphics/opengl_renderer/foreground/Generic2.cpp @@ -60,6 +60,7 @@ void Generic2::render_in_mode(DmaFollower& dma, auto p = prof.make_scoped_child("dma"); switch (mode) { case Mode::NORMAL: + case Mode::WARP: if (render_state->version == GameVersion::Jak1) { process_dma_jak1(dma, render_state->next_bucket); } else { @@ -80,10 +81,13 @@ void Generic2::render_in_mode(DmaFollower& dma, auto p = prof.make_scoped_child("setup"); switch (mode) { case Mode::NORMAL: - setup_draws(true); + setup_draws(true, true); break; case Mode::LIGHTNING: - setup_draws(false); + setup_draws(false, true); + break; + case Mode::WARP: + setup_draws(true, false); break; default: ASSERT_NOT_REACHED(); diff --git a/game/graphics/opengl_renderer/foreground/Generic2.h b/game/graphics/opengl_renderer/foreground/Generic2.h index 907c1cac26..fe3a06abe0 100644 --- a/game/graphics/opengl_renderer/foreground/Generic2.h +++ b/game/graphics/opengl_renderer/foreground/Generic2.h @@ -11,7 +11,7 @@ class Generic2 { u32 num_buckets = 800); ~Generic2(); - enum class Mode { NORMAL, LIGHTNING }; + enum class Mode { NORMAL, LIGHTNING, WARP }; void render_in_mode(DmaFollower& dma, SharedRenderState* render_state, @@ -33,7 +33,7 @@ class Generic2 { static_assert(sizeof(Vertex) == 32); private: - void determine_draw_modes(bool enable_at); + void determine_draw_modes(bool enable_at, bool default_fog); void build_index_buffer(); void link_adgifs_back_to_frags(); void draws_to_buckets(); @@ -42,7 +42,7 @@ class Generic2 { void process_dma_jak1(DmaFollower& dma, u32 next_bucket); void process_dma_lightning(DmaFollower& dma, u32 next_bucket); void process_dma_jak2(DmaFollower& dma, u32 next_bucket); - void setup_draws(bool enable_at); + void setup_draws(bool enable_at, bool default_fog); void do_draws(SharedRenderState* render_state, ScopedProfilerNode& prof); void do_draws_for_alpha(SharedRenderState* render_state, ScopedProfilerNode& prof, diff --git a/game/graphics/opengl_renderer/foreground/Generic2_Build.cpp b/game/graphics/opengl_renderer/foreground/Generic2_Build.cpp index 185f1dd9e2..d4f52eed5e 100644 --- a/game/graphics/opengl_renderer/foreground/Generic2_Build.cpp +++ b/game/graphics/opengl_renderer/foreground/Generic2_Build.cpp @@ -4,14 +4,14 @@ * Main function to set up Generic2 draw lists. * This function figures out which vertices belong to which draw settings. */ -void Generic2::setup_draws(bool enable_at) { +void Generic2::setup_draws(bool enable_at, bool default_fog) { if (m_next_free_frag == 0) { return; } m_gs = GsState(); link_adgifs_back_to_frags(); process_matrices(); - determine_draw_modes(enable_at); + determine_draw_modes(enable_at, default_fog); draws_to_buckets(); final_vertex_update(); build_index_buffer(); @@ -26,7 +26,7 @@ void Generic2::setup_draws(bool enable_at) { * settings, the tbp (texture vram address), and the "vertex flags" that need to be set for each * vertex. This information is used in later steps. */ -void Generic2::determine_draw_modes(bool enable_at) { +void Generic2::determine_draw_modes(bool enable_at, bool default_fog) { // initialize draw mode DrawMode current_mode; current_mode.set_at(enable_at); @@ -37,7 +37,7 @@ void Generic2::determine_draw_modes(bool enable_at) { current_mode.set_depth_test(GsTest::ZTest::GEQUAL); current_mode.set_depth_write_enable(!m_drawing_config.zmsk); current_mode.set_alpha_blend(DrawMode::AlphaBlend::SRC_SRC_SRC_SRC); - m_gs.set_fog_flag(true); + m_gs.set_fog_flag(default_fog); u32 tbp = -1;