Skip to content

Commit

Permalink
FF7: Fix 3D model drawn over UI on BATTLE mode if lighting enabled
Browse files Browse the repository at this point in the history
Fixes #131
  • Loading branch information
CosmosXIII authored and julianxhokaxhiu committed Oct 30, 2022
1 parent d15c03d commit 0ed8263
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 3 deletions.
10 changes: 8 additions & 2 deletions src/ff7/battle/menu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,14 @@ namespace ff7::battle
void battle_menu_enter()
{
*ff7_externals.g_do_render_menu = 0;
if(!enable_lighting)
newRenderer.clearDepthBuffer();
battle_depth_clear();
}

void battle_depth_clear()
{
if(gl_defer_battle_depth_clear()) return;

newRenderer.clearDepthBuffer();
}

void update_battle_menu()
Expand Down
1 change: 1 addition & 0 deletions src/ff7/battle/menu.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,5 @@ namespace ff7::battle
void display_cait_sith_slots_handler();
void display_battle_arena_menu_handler();
void delay_battle_target_pointer_animation_type();
void battle_depth_clear();
}
2 changes: 2 additions & 0 deletions src/gl.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ enum DrawCallType
DCT_BLIT,
DCT_DRAW,
DCT_DRAW_MOVIE,
DCT_BATTLE_DEPTH_CLEAR,
DCT_ZOOM
};

Expand Down Expand Up @@ -118,6 +119,7 @@ uint32_t gl_defer_sorted_draw(uint32_t primitivetype, uint32_t vertextype, struc
uint32_t gl_defer_blit_framebuffer(struct texture_set *texture_set, struct tex_header *tex_header);
uint32_t gl_defer_clear_buffer(uint32_t clear_color, uint32_t clear_depth, struct game_obj *game_object);
uint32_t gl_defer_yuv_frame(uint32_t buffer_index);
uint32_t gl_defer_battle_depth_clear();
uint32_t gl_defer_zoom();
void gl_draw_deferred(draw_field_shadow_callback shadow_callback);
struct boundingbox calculateSceneAabb();
Expand Down
42 changes: 41 additions & 1 deletion src/gl/deferred.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#include "../log.h"
#include "../common.h"
#include "../video/movies.h"
#include "../ff7/battle/menu.h"

#include "ff7/widescreen.h"

Expand Down Expand Up @@ -273,7 +274,41 @@ uint32_t gl_defer_zoom()

num_deferred++;

if (trace_all) ffnx_trace("gl_defer_yuv_frame: return true\n");
if (trace_all) ffnx_trace("gl_defer_zoom: return true\n");

return true;
}

uint32_t gl_defer_battle_depth_clear()
{
if (ff8 || !enable_lighting)
{
return false;
}

if (trace_all) ffnx_trace("gl_defer_battle_depth_clear");

if (!deferred_draws) deferred_draws = (deferred_draw*)driver_calloc(sizeof(*deferred_draws), DEFERRED_MAX);

// global disable
if (nodefer) {
if (trace_all) ffnx_trace("gl_defer_battle_depth_clear: nodefer true\n");
return false;
}

if (num_deferred + 1 > DEFERRED_MAX)
{
if (trace_all) ffnx_trace("gl_defer_battle_depth_clear: deferred draw queue overflow - num_deferred: %u - count: 1 - DEFERRED_MAX: %u\n", num_deferred, DEFERRED_MAX);
return false;
}

uint32_t defer = num_deferred;

deferred_draws[defer].draw_call_type = DCT_BATTLE_DEPTH_CLEAR;

num_deferred++;

if (trace_all) ffnx_trace("gl_defer_battle_depth_clear: return true\n");

return true;
}
Expand Down Expand Up @@ -477,6 +512,11 @@ void gl_draw_deferred(draw_field_shadow_callback shadow_callback)
ff7_field_draw_gray_quads_sub_644E90();
continue;
}
else if(deferred_draws[i].draw_call_type == DCT_BATTLE_DEPTH_CLEAR)
{
ff7::battle::battle_depth_clear();
continue;
}

if (deferred_draws[i].vertices == nullptr)
{
Expand Down

0 comments on commit 0ed8263

Please sign in to comment.