fix broken interaction of ReimuB gaps with powersurge effect (visual)
This commit is contained in:
parent
a6d0327e49
commit
5d535bb93c
3 changed files with 25 additions and 9 deletions
|
@ -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];
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue