diff --git a/game/graphics/opengl_renderer/BucketRenderer.h b/game/graphics/opengl_renderer/BucketRenderer.h index c73cc00fe8..3493c42f92 100644 --- a/game/graphics/opengl_renderer/BucketRenderer.h +++ b/game/graphics/opengl_renderer/BucketRenderer.h @@ -36,7 +36,6 @@ struct SharedRenderState { bool use_sky_cpu = true; bool use_occlusion_culling = true; - bool render_debug = false; bool enable_merc_xgkick = true; bool enable_generic_xgkick = true; bool use_direct2 = true; diff --git a/game/graphics/opengl_renderer/Loader.cpp b/game/graphics/opengl_renderer/Loader.cpp index 37377e4ff4..df07d0fd84 100644 --- a/game/graphics/opengl_renderer/Loader.cpp +++ b/game/graphics/opengl_renderer/Loader.cpp @@ -505,6 +505,9 @@ void Loader::update(std::string& status_out, TexturePool& texture_pool) { auto& lev = it->second; // we're the only place that erases, so it's okay to unlock and hold a reference lk.unlock(); + if (!lev.data.tfrag_load_done) { + did_gpu_stuff = true; + } if (upload_textures(loader_timer, lev.data, texture_pool)) { if (init_tie(loader_timer, lev.data)) { if (init_tfrag(loader_timer, lev.data)) { @@ -533,6 +536,7 @@ void Loader::update(std::string& status_out, TexturePool& texture_pool) { texture_pool.unload_texture(tex.debug_name, lev.second.data.textures.at(i)); } } + lk.unlock(); for (auto tex : lev.second.data.textures) { if (EXTRA_TEX_DEBUG) { for (auto& slot : texture_pool.all_textures()) { diff --git a/game/graphics/opengl_renderer/MercProgram.cpp b/game/graphics/opengl_renderer/MercProgram.cpp index 2e09fda282..a95bec9270 100644 --- a/game/graphics/opengl_renderer/MercProgram.cpp +++ b/game/graphics/opengl_renderer/MercProgram.cpp @@ -3,11 +3,7 @@ void MercRenderer::mscal(int enter_address, SharedRenderState* render_state, ScopedProfilerNode& prof) { - if (render_state->render_debug) { - mscal_impl(enter_address, render_state, prof); - } else { - mscal_impl(enter_address, render_state, prof); - } + mscal_impl(enter_address, render_state, prof); } static inline REALLY_INLINE float erleng(const Vf& in) { diff --git a/game/graphics/opengl_renderer/OpenGLRenderer.cpp b/game/graphics/opengl_renderer/OpenGLRenderer.cpp index 1f17ed8f88..af93a866ab 100644 --- a/game/graphics/opengl_renderer/OpenGLRenderer.cpp +++ b/game/graphics/opengl_renderer/OpenGLRenderer.cpp @@ -289,7 +289,7 @@ void OpenGLRenderer::render(DmaFollower dma, const RenderOptions& settings) { { auto prof = m_profiler.root()->make_scoped_child("loader"); - if (m_last_pmode_alp == 0 && settings.pmode_alp_register != 0) { + if (m_last_pmode_alp == 0 && settings.pmode_alp_register != 0 && m_enable_fast_blackout_loads) { // blackout, load everything and don't worry about frame rate m_render_state.loader->update_blocking(m_render_state.load_status_debug, *m_render_state.texture_pool); @@ -355,9 +355,9 @@ void OpenGLRenderer::draw_renderer_selection_window() { ImGui::SliderFloat("Fog Adjust", &m_render_state.fog_intensity, 0, 10); ImGui::Checkbox("Sky CPU", &m_render_state.use_sky_cpu); ImGui::Checkbox("Occlusion Cull", &m_render_state.use_occlusion_culling); - ImGui::Checkbox("Render Debug (slower)", &m_render_state.render_debug); ImGui::Checkbox("Merc XGKICK", &m_render_state.enable_merc_xgkick); ImGui::Checkbox("Generic XGKICK", &m_render_state.enable_generic_xgkick); + ImGui::Checkbox("Blackout Loads", &m_enable_fast_blackout_loads); ImGui::Checkbox("Direct 2", &m_render_state.use_direct2); ImGui::Checkbox("Generic 2", &m_render_state.use_generic2); diff --git a/game/graphics/opengl_renderer/OpenGLRenderer.h b/game/graphics/opengl_renderer/OpenGLRenderer.h index 3471c807b2..bc2e5e98b9 100644 --- a/game/graphics/opengl_renderer/OpenGLRenderer.h +++ b/game/graphics/opengl_renderer/OpenGLRenderer.h @@ -60,4 +60,5 @@ class OpenGLRenderer { FullScreenDraw m_blackout_renderer; float m_last_pmode_alp = 1.; + bool m_enable_fast_blackout_loads = true; }; diff --git a/game/graphics/opengl_renderer/ShadowRenderer.h b/game/graphics/opengl_renderer/ShadowRenderer.h index 5ab3332596..16f7e4647a 100644 --- a/game/graphics/opengl_renderer/ShadowRenderer.h +++ b/game/graphics/opengl_renderer/ShadowRenderer.h @@ -109,8 +109,8 @@ class ShadowRenderer : public BucketRenderer { }; static_assert(sizeof(Vertex) == 16); - static constexpr int MAX_VERTICES = 8192; - static constexpr int MAX_INDICES = 8192; + static constexpr int MAX_VERTICES = 8192 * 3; + static constexpr int MAX_INDICES = 8192 * 3; Vertex m_vertices[MAX_VERTICES]; u32 m_front_indices[MAX_INDICES];