Зачем брать [...] 0,5 и 0,5 в первой части?
U и V хранятся в зеленом и синем цветовом канале текстура. Значения в цветовых каналах хранятся в диапазоне [0,0, 1,0]. Для вычислений значения должны отображаться в диапазоне [-0,5, 0,5]:
yuv.g = texture(tex_u, TexCoord).r - 0.5;
yuv.b = texture(tex_v, TexCoord).r - 0.5;
Вычитание 0.0625
из канала красного цвета является просто оптимизацией. Таким образом, его не нужно вычитать отдельно в каждом выражении позже.
Алгоритм такой же, как в Как преобразовать RGB -> YUV -> RGB (в обоих направлениях) или различные книги.