looking-glass/obs/effect/rgb24.effect

54 lines
1.1 KiB
Text
Raw Normal View History

uniform float4x4 ViewProj;
uniform texture2d image;
uniform float2 outputSize;
uniform int swap;
struct VertData
{
float4 pos : POSITION;
float2 uv : TEXCOORD0;
};
VertData VSDefault(VertData vert_in)
{
VertData vert_out;
vert_out.pos = mul(float4(vert_in.pos.xyz, 1.0), ViewProj);
vert_out.uv = vert_in.uv;
return vert_out;
}
float4 PSColorFilter(VertData vert_in) : TARGET
{
uvec2 outputPos = uvec2(vert_in.uv * outputSize);
uint fst = outputPos.x * 3u / 4u;
vec4 color_0 = texelFetch(image, ivec2(fst, outputPos.y), 0);
uint snd = (outputPos.x * 3u + 1u) / 4u;
vec4 color_1 = texelFetch(image, ivec2(snd, outputPos.y), 0);
uint trd = (outputPos.x * 3u + 2u) / 4u;
vec4 color_2 = texelFetch(image, ivec2(trd, outputPos.y), 0);
vec4 result = vec4(
color_0.barg[outputPos.x % 4u],
color_1.gbar[outputPos.x % 4u],
color_2.rgba[outputPos.x % 4u],
1.0
);
if (swap == 1)
return result.rgba;
else
return result.bgra;
}
technique Draw
{
pass
{
vertex_shader = VSDefault(vert_in);
pixel_shader = PSColorFilter(vert_in);
}
}