46 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#ifndef SHADER_H
 | 
						|
#define SHADER_H
 | 
						|
#include <string_view>
 | 
						|
constexpr std::string_view vSource = R"(
 | 
						|
    #version 330 core
 | 
						|
 | 
						|
    layout (location = 0) in vec3 aPos;
 | 
						|
    layout (location = 1) in vec2 aTexCoord;
 | 
						|
 | 
						|
    out vec2 TexCoord;
 | 
						|
 | 
						|
    void main()
 | 
						|
    {
 | 
						|
        gl_Position = vec4(aPos, 1.0);
 | 
						|
        TexCoord = vec2(aTexCoord.x, aTexCoord.y);
 | 
						|
    }
 | 
						|
)";
 | 
						|
constexpr std::string_view fSource = R"(
 | 
						|
    #version 330 core
 | 
						|
 | 
						|
    out vec4 FragColor;
 | 
						|
 | 
						|
    in vec2 TexCoord;
 | 
						|
 | 
						|
    uniform sampler2D textureY;
 | 
						|
    uniform sampler2D textureU;
 | 
						|
    uniform sampler2D textureV;
 | 
						|
 | 
						|
    void main(){
 | 
						|
        vec3 yuv, rgb;
 | 
						|
        vec3 yuv2r = vec3(1.164, 0.0, 1.596);
 | 
						|
        vec3 yuv2g = vec3(1.164, -0.391, -0.813);
 | 
						|
        vec3 yuv2b = vec3(1.164, 2.018, 0.0);
 | 
						|
        yuv.x = texture(textureY, TexCoord).r - 0.0625;
 | 
						|
        yuv.y = texture(textureU, TexCoord).r - 0.5;
 | 
						|
        yuv.z = texture(textureV, TexCoord).r - 0.5;
 | 
						|
 | 
						|
        rgb.x = dot(yuv, yuv2r);
 | 
						|
        rgb.y = dot(yuv, yuv2g);
 | 
						|
        rgb.z = dot(yuv, yuv2b);
 | 
						|
 | 
						|
        FragColor = vec4(rgb, 1.0);
 | 
						|
    }
 | 
						|
)";
 | 
						|
 | 
						|
#endif |