You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.2 KiB
GLSL
43 lines
1.2 KiB
GLSL
#version 330 core
|
|
in vec2 TexCord; // 纹理坐标
|
|
uniform int format = -1; // 像素格式
|
|
uniform sampler2D tex_y;
|
|
uniform sampler2D tex_u;
|
|
uniform sampler2D tex_v;
|
|
uniform sampler2D tex_uv;
|
|
|
|
void main()
|
|
{
|
|
vec3 yuv;
|
|
vec3 rgb;
|
|
|
|
|
|
if(format == 0) // YUV420P转RGB
|
|
{
|
|
yuv.x = texture2D(tex_y, TexCord).r;
|
|
yuv.y = texture2D(tex_u, TexCord).r-0.5;
|
|
yuv.z = texture2D(tex_v, TexCord).r-0.5;
|
|
}
|
|
else if(format == 23) // NV12转RGB
|
|
{
|
|
yuv.x = texture2D(tex_y, TexCord.st).r;
|
|
yuv.y = texture2D(tex_uv, TexCord.st).r - 0.5;
|
|
yuv.z = texture2D(tex_uv, TexCord.st).g - 0.5;
|
|
}
|
|
else if(format == 12){ //YUVJ420P (Full Range YUV) 转RGB
|
|
yuv.x = (texture2D(tex_y, TexCord).r * 255.0 - 16.0) / 219.0;
|
|
yuv.y = (texture2D(tex_u, TexCord).r * 255.0 - 128.0) / 224.0;
|
|
yuv.z = (texture2D(tex_v, TexCord).r * 255.0 - 128.0) / 224.0;
|
|
}
|
|
else
|
|
{
|
|
}
|
|
|
|
rgb = mat3(1.0, 1.0, 1.0,
|
|
0.0, -0.39465, 2.03211,
|
|
1.13983, -0.58060, 0.0) * yuv;
|
|
// gl_FragColor = vec4(rgb, 1.0);
|
|
// Clamp RGB 范围到 [0, 1],以避免溢出
|
|
gl_FragColor = vec4(clamp(rgb, 0.0, 1.0), 1.0);
|
|
}
|