fix broken interaction of ReimuB gaps with powersurge effect (visual)

This commit is contained in:
Andrei Alexeyev 2019-08-23 18:29:40 +03:00
parent a6d0327e49
commit 5d535bb93c
No known key found for this signature in database
GPG key ID: 363707CD4C7FE8A4
3 changed files with 25 additions and 9 deletions

View file

@ -22,6 +22,7 @@ UNIFORM(3) vec2 gap_size;
UNIFORM(4) vec2 gaps[NUM_GAPS];
UNIFORM(8) float gap_angles[NUM_GAPS];
UNIFORM(12) int gap_links[NUM_GAPS];
UNIFORM(16) int draw_background;
VARYING(0) vec2 texCoord;
VARYING(1) vec2 gap_views[NUM_GAPS];

View file

@ -31,8 +31,11 @@ void drawGap(inout vec4 frag_color, vec2 frag_loc, int i) {
}
void main(void) {
vec4 bg = texture(tex, texCoord);
fragColor = bg;
if(draw_background != 0) {
fragColor = texture(tex, texCoord);
} else {
fragColor = vec4(0);
}
vec2 frag_loc = texCoord * viewport;
frag_loc.y = viewport.y - frag_loc.y;

View file

@ -220,16 +220,26 @@ static void reimu_dream_gap_renderer_visual(Enemy *e, int t, bool render) {
}
FBPair *framebuffers = stage_get_fbpair(FBPAIR_FG);
bool render_to_fg = r_framebuffer_current() == framebuffers->back;
fbpair_swap(framebuffers);
Framebuffer *target_fb = framebuffers->back;
if(render_to_fg) {
fbpair_swap(framebuffers);
Framebuffer *target_fb = framebuffers->back;
// This change must propagate
r_state_pop();
r_framebuffer(target_fb);
r_state_push();
// This change must propagate
r_state_pop();
r_framebuffer(target_fb);
r_state_push();
r_shader("reimu_gap");
r_uniform_int("draw_background", true);
r_blend(BLEND_NONE);
} else {
r_shader("reimu_gap");
r_uniform_int("draw_background", false);
r_blend(BLEND_PREMUL_ALPHA);
}
r_shader("reimu_gap");
r_uniform_vec2("viewport", VIEWPORT_W, VIEWPORT_H);
r_uniform_float("time", t / (float)FPS);
r_uniform_vec2("gap_size", GAP_WIDTH/2.0, GAP_LENGTH/2.0);
@ -238,6 +248,8 @@ static void reimu_dream_gap_renderer_visual(Enemy *e, int t, bool render) {
r_uniform_int_array("gap_links[0]", 0, NUM_GAPS, links);
draw_framebuffer_tex(framebuffers->front, VIEWPORT_W, VIEWPORT_H);
r_blend(BLEND_PREMUL_ALPHA);
FOR_EACH_GAP(gap) {
r_mat_push();
r_mat_translate(creal(gap->pos), cimag(gap->pos), 0);