fragmentShaderYUV420.glsl 858 B

123456789101112131415161718192021222324
  1. #version 330 core
  2. in vec3 vertexColor; //输入颜色数据
  3. in vec2 TexCoord; //输入纹理坐标数据
  4. out vec4 FragColor; //输出颜色数据
  5. uniform sampler2D textureY; //Y分量纹理采样器
  6. uniform sampler2D textureU; //U分量纹理采样器
  7. uniform sampler2D textureV;
  8. void main()
  9. {
  10. //在着色器里取出某个位置上的像素值,rgba四分量,单通道只有r有效
  11. //y的范围是[0, 1],u和v的范围是[-0.5, 0.5]
  12. float y = texture(textureY, TexCoord).r;
  13. //uv只有y分量的四分之一,映射到屏幕上的范围是[-0.5-0.5],所以需要减去0.5
  14. float u = texture(textureU, TexCoord).r - 0.5;
  15. float v = texture(textureV, TexCoord).r - 0.5;
  16. float r = y + 1.402 * v;
  17. float g = y - 0.344136 * u - 0.714136 * v;
  18. float b = y + 1.772 * u;
  19. FragColor = vec4(r, g, b, 1.0);
  20. }