trunk/hlsl/ntsc.fx
| r253019 | r253020 | |
| 108 | 108 | |
| 109 | 109 | float4 GetCompositeYIQ(float2 TexCoord) |
| 110 | 110 | { |
| 111 | | float2 SourceTexelDims = 1.0f / SourceDims; |
| 111 | float2 SourceTexelDims = 1.0f / SourceDims; |
| 112 | 112 | float2 SourceRes = SourceDims * SourceRect; |
| 113 | 113 | |
| 114 | 114 | float2 PValueSourceTexel = float2(PValue, 0.0f) * SourceTexelDims; |
| r253019 | r253020 | |
| 131 | 131 | float4 I = float4(dot(Texel0, IDot), dot(Texel1, IDot), dot(Texel2, IDot), dot(Texel3, IDot)); |
| 132 | 132 | float4 Q = float4(dot(Texel0, QDot), dot(Texel1, QDot), dot(Texel2, QDot), dot(Texel3, QDot)); |
| 133 | 133 | |
| 134 | | float4 W = PI2 * CCValue * ScanTime; |
| 134 | float W = PI2 * CCValue * ScanTime; |
| 135 | float WoPI = W / PI; |
| 135 | 136 | |
| 136 | | float4 T = HPosition |
| 137 | | + (AValue / 360.0f * SourceRes.y) * VPosition |
| 138 | | + (BValue / 360.0f) |
| 139 | | + (SignalOffset / 360.0f); |
| 137 | float HOffset = (BValue + SignalOffset) / WoPI; |
| 138 | float VScale = (AValue * SourceRes.y) / WoPI; |
| 139 | |
| 140 | float4 T = HPosition + HOffset + VPosition * VScale; |
| 140 | 141 | float4 TW = T * W; |
| 141 | 142 | |
| 142 | 143 | float4 CompositeYIQ = Y + I * cos(TW) + Q * sin(TW); |
| r253019 | r253020 | |
| 171 | 172 | float PI2Length = PI2 / SampleCount; |
| 172 | 173 | |
| 173 | 174 | float W = PI2 * CCValue * ScanTime; |
| 174 | | |
| 175 | float WoPI = W / PI; |
| 176 | |
| 177 | float HOffset = (BValue + SignalOffset) / WoPI; |
| 178 | float VScale = (AValue * SourceRes.y) / WoPI; |
| 179 | |
| 175 | 180 | float4 YAccum = 0.0f; |
| 176 | 181 | float4 IAccum = 0.0f; |
| 177 | 182 | float4 QAccum = 0.0f; |
| r253019 | r253020 | |
| 190 | 195 | |
| 191 | 196 | float4 C = GetCompositeYIQ(float2(Cx.r, Cy.r)); |
| 192 | 197 | |
| 193 | | float4 T = HPosition |
| 194 | | + (AValue / 360.0f * SourceRes.y) * VPosition |
| 195 | | + (BValue / 360.0f) |
| 196 | | + (SignalOffset / 360.0f); |
| 197 | | float4 WT = W * T |
| 198 | | + OValue; |
| 198 | float4 T = HPosition + HOffset + VPosition * VScale; |
| 199 | float4 WT = W * T + OValue; |
| 199 | 200 | |
| 200 | 201 | float4 SincKernel = 0.54f + 0.46f * cos(PI2Length * n4); |
| 201 | 202 | |
trunk/src/osd/modules/render/d3d/d3dhlsl.cpp
| r253019 | r253020 | |
| 990 | 990 | deconverge_effect->add_uniform("RadialConvergeY", uniform::UT_VEC3, uniform::CU_CONVERGE_RADIAL_Y); |
| 991 | 991 | |
| 992 | 992 | focus_effect->add_uniform("Defocus", uniform::UT_VEC2, uniform::CU_FOCUS_SIZE); |
| 993 | | |
| 993 | |
| 994 | 994 | phosphor_effect->add_uniform("Phosphor", uniform::UT_VEC3, uniform::CU_PHOSPHOR_LIFE); |
| 995 | 995 | |
| 996 | 996 | post_effect->add_uniform("VignettingAmount", uniform::UT_FLOAT, uniform::CU_POST_VIGNETTING); // backward compatibility |
| r253019 | r253020 | |
| 1231 | 1231 | { |
| 1232 | 1232 | return next_index; |
| 1233 | 1233 | } |
| 1234 | | |
| 1234 | |
| 1235 | 1235 | float signal_offset = curr_texture->get_cur_frame() == 0 |
| 1236 | 1236 | ? 0.0f |
| 1237 | 1237 | : options->yiq_jitter; |
| r253019 | r253020 | |
| 1241 | 1241 | curr_effect = ntsc_effect; |
| 1242 | 1242 | curr_effect->update_uniforms(); |
| 1243 | 1243 | curr_effect->set_float("SignalOffset", signal_offset); |
| 1244 | | |
| 1244 | |
| 1245 | 1245 | next_index = rt->next_index(next_index); |
| 1246 | 1246 | blit(rt->native_target[next_index], true, D3DPT_TRIANGLELIST, 0, 2); |
| 1247 | 1247 | |
| r253019 | r253020 | |
| 2778 | 2778 | } |
| 2779 | 2779 | |
| 2780 | 2780 | // static INT32 slider_ntsc_phase_count(running_machine &machine, void *arg, std::string *str, INT32 newval) |
| 2781 | | // { |
| 2781 | // { |
| 2782 | 2782 | // hlsl_options *options = (hlsl_options*)arg; |
| 2783 | 2783 | // if (newval != SLIDER_NOCHANGE) |
| 2784 | 2784 | // { |
| r253019 | r253020 | |
| 3066 | 3066 | break; |
| 3067 | 3067 | } |
| 3068 | 3068 | case CU_SOURCE_RECT: |
| 3069 | | { |
| 3069 | { |
| 3070 | 3070 | bool prepare_vector = |
| 3071 | 3071 | d3d->window().machine().first_screen()->screen_type() == SCREEN_TYPE_VECTOR; |
| 3072 | 3072 | |
| r253019 | r253020 | |
| 3076 | 3076 | m_shader->set_vector("SourceRect", 2, delta); |
| 3077 | 3077 | break; |
| 3078 | 3078 | } |
| 3079 | | |
| 3079 | |
| 3080 | 3080 | if (shadersys->curr_texture != NULL) |
| 3081 | 3081 | { |
| 3082 | 3082 | vec2f delta = shadersys->curr_texture->get_uvstop() - shadersys->curr_texture->get_uvstart(); |