hlsl/color_heavy.fx
| r11576 | r11577 | |
| 129 | 129 | float4 ps_main(PS_INPUT Input) : COLOR |
| 130 | 130 | { |
| 131 | 131 | // -- Bandwidth Subsampling -- |
| 132 | | float YSubsampleWidth = (RawWidth * 2.0f) / YSubsampleLength; |
| 133 | | float ISubsampleWidth = (RawWidth * 2.0f) / ISubsampleLength; |
| 134 | | float QSubsampleWidth = (RawWidth * 2.0f) / QSubsampleLength; |
| 135 | | float3 SubsampleWidth = float3(YSubsampleWidth, ISubsampleWidth, QSubsampleWidth); |
| 136 | | float3 SubsampleFrac = frac(Input.TexCoord.x * SubsampleWidth); |
| 137 | | float3 SubsampleCoord = (Input.TexCoord.x * SubsampleWidth - SubsampleFrac) / SubsampleWidth + SubsampleFrac / (SubsampleWidth * 2.0f); |
| 138 | | |
| 132 | float3 SubsampleWidth = float3(YSubsampleLength, ISubsampleLength, QSubsampleLength); |
| 133 | SubsampleWidth = (RawWidth * 2.0f) / SubsampleWidth; |
| 134 | float3 SubsampleCoord = Input.TexCoord.x; |
| 135 | float3 SubsampleFrac = frac(SubsampleCoord * SubsampleWidth); // Fraction is in subsample width units! |
| 136 | SubsampleCoord = (SubsampleCoord * SubsampleWidth - SubsampleFrac) / SubsampleWidth; |
| 137 | |
| 139 | 138 | float4 BaseTexel = tex2D(DiffuseSampler, Input.TexCoord); |
| 140 | 139 | |
| 141 | 140 | float3 YTexel = tex2D(DiffuseSampler, float2(SubsampleCoord.x, Input.TexCoord.y)).rgb; |
| 142 | 141 | float3 ITexel = tex2D(DiffuseSampler, float2(SubsampleCoord.y, Input.TexCoord.y)).rgb; |
| 143 | 142 | float3 QTexel = tex2D(DiffuseSampler, float2(SubsampleCoord.z, Input.TexCoord.y)).rgb; |
| 144 | 143 | |
| 145 | | float3 LastYTexel = tex2D(DiffuseSampler, float2(SubsampleCoord.x - SubsampleFrac.x / RawWidth, Input.TexCoord.y)).rgb; |
| 146 | | float3 LastITexel = tex2D(DiffuseSampler, float2(SubsampleCoord.y - SubsampleFrac.y / RawWidth, Input.TexCoord.y)).rgb; |
| 147 | | float3 LastQTexel = tex2D(DiffuseSampler, float2(SubsampleCoord.z - SubsampleFrac.z / RawWidth, Input.TexCoord.y)).rgb; |
| 144 | float3 LastYTexel = tex2D(DiffuseSampler, float2(SubsampleCoord.x + YSubsampleLength / (RawWidth * 2.0f), Input.TexCoord.y)).rgb; |
| 145 | float3 LastITexel = tex2D(DiffuseSampler, float2(SubsampleCoord.y + ISubsampleLength / (RawWidth * 2.0f), Input.TexCoord.y)).rgb; |
| 146 | float3 LastQTexel = tex2D(DiffuseSampler, float2(SubsampleCoord.z + QSubsampleLength / (RawWidth * 2.0f), Input.TexCoord.y)).rgb; |
| 148 | 147 | |
| 149 | | YTexel = lerp(LastYTexel, YTexel, SubsampleFrac.x); |
| 150 | | ITexel = lerp(LastITexel, ITexel, SubsampleFrac.y); |
| 151 | | QTexel = lerp(LastQTexel, QTexel, SubsampleFrac.z); |
| 148 | YTexel = lerp(YTexel, LastYTexel, SubsampleFrac.x); |
| 149 | ITexel = lerp(ITexel, LastITexel, SubsampleFrac.y); |
| 150 | QTexel = lerp(QTexel, LastQTexel, SubsampleFrac.z); |
| 152 | 151 | |
| 153 | 152 | // -- RGB Tint & Shift -- |
| 154 | 153 | float ShiftedRedY = dot(YTexel, float3(RedFromRed, RedFromGrn, RedFromBlu)); |
| r11576 | r11577 | |
| 199 | 198 | |
| 200 | 199 | // -- Final Pixel -- |
| 201 | 200 | float4 Output = lerp(Input.Color, float4(OutRGB, BaseTexel.a) * Input.Color, Input.ExtraInfo.x); |
| 202 | | |
| 203 | | return BaseTexel; |
| 201 | |
| 202 | return Output; |
| 204 | 203 | } |
| 205 | 204 | |
| 206 | 205 | //----------------------------------------------------------------------------- |