static void pass_sample_separated_get_weights(struct gl_shader_cache *sc, struct scaler *scaler) { gl_sc_uniform_sampler(sc, "lut", scaler->gl_target, TEXUNIT_SCALERS + scaler->index); // Define a new variable to cache the corrected fcoord. GLSLF("float fcoord_lut = LUT_POS(fcoord, %d.0);\n", scaler->lut_size); int N = scaler->kernel->size; if (N == 2) { GLSL(vec2 c1 = texture(lut, vec2(0.5, fcoord_lut)).RG;)
static void update_osd(struct vo *vo) { struct priv *p = vo->priv; if (!p->enable_osd) return; mpgl_osd_generate(p->osd, p->osd_res, p->osd_pts, 0, 0); int64_t osd_change_counter = mpgl_get_change_counter(p->osd); if (p->osd_change_counter == osd_change_counter) { p->skip_osd = true; return; } p->osd_change_counter = osd_change_counter; MP_STATS(vo, "start rpi_osd"); p->egl.gl->ClearColor(0, 0, 0, 0); p->egl.gl->Clear(GL_COLOR_BUFFER_BIT); for (int n = 0; n < MAX_OSD_PARTS; n++) { enum sub_bitmap_format fmt = mpgl_osd_get_part_format(p->osd, n); if (!fmt) continue; gl_sc_uniform_sampler(p->sc, "osdtex", GL_TEXTURE_2D, 0); switch (fmt) { case SUBBITMAP_RGBA: { GLSLF("// OSD (RGBA)\n"); GLSL(color = texture(osdtex, texcoord).bgra;) break; } case SUBBITMAP_LIBASS: { GLSLF("// OSD (libass)\n"); GLSL(color = vec4(ass_color.rgb, ass_color.a * texture(osdtex, texcoord).r);) break; } default: abort(); }