[jak2] a few small graphics fixes (#2424)

- better handling of the `disable-fog` settings for merc, should fix the
spotlights. There's a setting in the merc effect, and also a runtime
flag for the draw-control. I'm not actually sure what reads these, but
the draw-control one is definitely used to disable fog on the
spotlights.
- increase merc draw limit to try to fix the issue about partially drawn
citizens in the city
- remove useless debug prints (it's okay to die in init, and the medium
load buffer size mode is understood now)
This commit is contained in:
water111
2023-03-26 12:30:35 -04:00
committed by GitHub
parent 7170db51ea
commit 9e087cbfcb
11 changed files with 103 additions and 26 deletions
+9 -4
View File
@@ -136,7 +136,7 @@ MercCtrl extract_merc_ctrl(const LinkedObjectFile& file,
auto tr = typed_ref_from_basic(ref, dts);
MercCtrl ctrl;
ctrl.from_ref(tr, dts); // the merc data import
ctrl.from_ref(tr, dts, file.version); // the merc data import
return ctrl;
}
@@ -228,7 +228,8 @@ void update_mode_from_alpha1(GsAlpha reg, DrawMode& mode) {
DrawMode process_draw_mode(const MercShader& info,
bool enable_alpha_test,
bool enable_alpha_blend,
bool depth_write) {
bool depth_write,
bool fge) {
DrawMode mode;
/*
* (new 'static 'gs-test
@@ -270,6 +271,8 @@ DrawMode process_draw_mode(const MercShader& info,
mode.set_clamp_s_enable(info.clamp & 0b1);
mode.set_clamp_t_enable(info.clamp & 0b100);
mode.set_fog(fge);
return mode;
}
@@ -769,7 +772,8 @@ ConvertedMercEffect convert_merc_effect(const MercEffect& input_effect,
}
if (input_effect.extra_info.shader) {
result.has_envmap = true;
result.envmap_mode = process_draw_mode(*input_effect.extra_info.shader, false, false, false);
result.envmap_mode =
process_draw_mode(*input_effect.extra_info.shader, false, false, false, false);
result.envmap_mode.set_ab(true);
u32 new_tex = remap_texture(input_effect.extra_info.shader->original_tex, map);
ASSERT(result.envmap_mode.get_tcc_enable());
@@ -910,8 +914,9 @@ ConvertedMercEffect convert_merc_effect(const MercEffect& input_effect,
for (size_t i = 0; i < frag.fp_header.shader_cnt; i++) {
const auto& shader = frag.shaders.at(i);
// update merc state from shader (will hold over to next fragment, if needed)
bool fog = ctrl_header.disable_fog == 0;
merc_state.merc_draw_mode.mode =
process_draw_mode(shader, result.has_envmap, use_alpha_blend, depth_write);
process_draw_mode(shader, result.has_envmap, use_alpha_blend, depth_write, fog);
if (!merc_state.merc_draw_mode.mode.get_tcc_enable()) {
ASSERT(false);
}