static void glw_bloom_render(glw_t *w, const glw_rctx_t *rc) { glw_bloom_t *b = (void *)w; float a = rc->rc_alpha * w->glw_alpha; glw_rctx_t rc0; glw_t *c; rc0 = *rc; rc0.rc_alpha = a; TAILQ_FOREACH(c, &w->glw_childs, glw_parent_link) glw_render0(c, &rc0); if(b->b_glow < 0.01) return; b->b_need_render = a > 0.01; if(!b->b_need_render) return; if(glw_is_focusable(w)) glw_store_matrix(w, rc); rc0 = *rc; glw_Scalef(&rc0, 1.0 + EDGE_SIZE / rc->rc_width, 1.0 + EDGE_SIZE / rc->rc_height, 1.0); #if 0 glw_render(&b->b_render, w->glw_root, &rc0, GLW_RENDER_MODE_QUADS, GLW_RENDER_ATTRIBS_TEX, &glw_rtt_texture(&b->b_rtt[0]), 1, 1, 1, a); #endif a *= b->b_glow; glw_blendmode(w->glw_root, GLW_BLEND_ADDITIVE); glw_renderer_draw(&b->b_render, w->glw_root, &rc0, &glw_rtt_texture(&b->b_rtt[0]), NULL, NULL, a * 0.50, 0, NULL); glw_renderer_draw(&b->b_render, w->glw_root, &rc0, &glw_rtt_texture(&b->b_rtt[1]), NULL, NULL, a * 0.44, 0, NULL); glw_renderer_draw(&b->b_render, w->glw_root, &rc0, &glw_rtt_texture(&b->b_rtt[2]), NULL, NULL, a * 0.33, 0, NULL); glw_blendmode(w->glw_root, GLW_BLEND_NORMAL); }
static void glw_fx_texrot_render(glw_t *w, glw_rctx_t *rc) { glw_fx_texrot_t *fx = (void *)w; glw_loadable_texture_t *glt = fx->fx_tex; float a = rc->rc_alpha * w->glw_alpha; fx->fx_need_render = a > 0.01; if(glt != NULL && glt->glt_state == GLT_STATE_VALID && a > 0.01) { glw_renderer_draw(&fx->fx_render, w->glw_root, rc, &glw_rtt_texture(&fx->fx_rtt), NULL, NULL, a); } }