[graphics] add missing blend used in final boss fight (#1406)

This commit is contained in:
water111
2022-06-01 21:00:47 -04:00
committed by GitHub
parent 5165a7c185
commit f89054baad
3 changed files with 15 additions and 9 deletions
@@ -184,8 +184,8 @@ class Generic2 : public BucketRenderer {
u32 dma_tags = 0;
} m_stats;
static constexpr int ALPHA_MODE_COUNT = 6;
bool m_alpha_draw_enable[ALPHA_MODE_COUNT] = {true, true, true, true, true, true};
static constexpr int ALPHA_MODE_COUNT = 7;
bool m_alpha_draw_enable[ALPHA_MODE_COUNT] = {true, true, true, true, true, true, true};
struct {
GLuint vao;
@@ -155,10 +155,12 @@ void Generic2::determine_draw_modes() {
} else if (a == GsAlpha::BlendMode::SOURCE && b == GsAlpha::BlendMode::ZERO_OR_FIXED &&
c == GsAlpha::BlendMode::DEST && d == GsAlpha::BlendMode::DEST) {
current_mode.set_alpha_blend(DrawMode::AlphaBlend::SRC_0_DST_DST);
} else if (a == GsAlpha::BlendMode::SOURCE && b == GsAlpha::BlendMode::ZERO_OR_FIXED &&
c == GsAlpha::BlendMode::ZERO_OR_FIXED && d == GsAlpha::BlendMode::DEST) {
current_mode.set_alpha_blend(DrawMode::AlphaBlend::SRC_0_FIX_DST);
} else {
// unsupported blend: a 0 b 2 c 2 d 1
// lg::error("unsupported blend: a {} b {} c {} d {}", (int)a, (int)b, (int)c, (int)d);
// ASSERT(false);
fmt::print("unsupported blend: a {} b {} c {} d {}\n", (int)a, (int)b, (int)c, (int)d);
// ASSERT(false);
}
}
}
@@ -152,7 +152,10 @@ void Generic2::setup_opengl_for_draw_mode(const DrawMode& draw_mode,
// (Cs - 0) * Ad + Cd
glBlendFunc(GL_DST_ALPHA, GL_ONE);
glBlendEquation(GL_FUNC_ADD);
color_mult = 0.5f; // HACK, should probably be 0.5
color_mult = 0.5f;
} else if (draw_mode.get_alpha_blend() == DrawMode::AlphaBlend::SRC_0_FIX_DST) {
glBlendEquation(GL_FUNC_ADD);
glBlendFuncSeparate(GL_ONE, GL_ONE, GL_ONE, GL_ZERO);
} else {
ASSERT(false);
}
@@ -296,9 +299,10 @@ void Generic2::do_draws(SharedRenderState* render_state, ScopedProfilerNode& pro
opengl_bind_and_setup_proj(render_state);
constexpr DrawMode::AlphaBlend alpha_order[ALPHA_MODE_COUNT] = {
DrawMode::AlphaBlend::SRC_SRC_SRC_SRC, DrawMode::AlphaBlend::SRC_DST_SRC_DST,
DrawMode::AlphaBlend::SRC_0_SRC_DST, DrawMode::AlphaBlend::ZERO_SRC_SRC_DST,
DrawMode::AlphaBlend::SRC_DST_FIX_DST, DrawMode::AlphaBlend::SRC_0_DST_DST,
DrawMode::AlphaBlend::SRC_0_FIX_DST, DrawMode::AlphaBlend::SRC_SRC_SRC_SRC,
DrawMode::AlphaBlend::SRC_DST_SRC_DST, DrawMode::AlphaBlend::SRC_0_SRC_DST,
DrawMode::AlphaBlend::ZERO_SRC_SRC_DST, DrawMode::AlphaBlend::SRC_DST_FIX_DST,
DrawMode::AlphaBlend::SRC_0_DST_DST,
};
for (int i = 0; i < ALPHA_MODE_COUNT; i++) {