制作了一个hlsl像素着色器,用于为字幕添加轮廓/阴影。我的问题是我使用Shazzam - Shader Editor来查看它的结果,结果在我的程序中有很大不同。例如:
我使用带有文本的.png来为Shazzam Editor制作图像,但正如你所看到的那样,程序(视频播放器)中只有一点点提示而且我没有得到它...... / p>
我的代码:
struct VertexShaderInput
{
float4 Position : POSITION0; // model xyzw
float2 uv0: TEXCOORD0; // texture 0 uv
};
struct VertexShaderOutput
{
float4 Position : POSITION0; // model xyzw
float2 uv0: TEXCOORD0; // texture 0 uv
};
VertexShaderOutput vs(VertexShaderInput input)
{
VertexShaderOutput output;
output.Position = input.Position;
output.uv0 = input.uv0;
return output;
}
sampler2D YTexture : register(s0);
struct PixelShaderInput
{
float2 uv0: TEXCOORD0; // texture 0 uv
float4 color: COLOR; // color
};
float4 ps_osd(PixelShaderInput input): COLOR {
float4 px = tex2D(YTexture, input.uv0);
const float d = 0.2;
float cnt = 0;
float a = 0;
for (float x = -0.02*d; x < 0.02*d; x += 0.028*d)
{
a += tex2D(YTexture, input.uv0 + float2(x, 0)).a;
a += tex2D(YTexture, input.uv0 + float2(0, x)).a;
a += tex2D(YTexture, input.uv0 + x).a;
cnt += 0.1;
}
a /= cnt;
float4 s = a;
s.rgb = 0;
float4 r = float4(px.rgb*px.a + s.rgb*(1-px.a), max(px.a, a));
return r;
}
实际的像素着色器是ps_osd(),vs是顶点着色器。我对HLSL很新,但我不明白为什么它不应该工作。该视频是在1280x720上,我试图在Shazzam中使用与着色器相同尺寸的图像来查看它是否有尺寸问题但是没有。
你能看出我是否错过了什么?尝试过s.r = 0; s.g = 0; s.b = 0; s.a = 1; ..希望你能帮忙:)
答案 0 :(得分:0)
经过大量的反复试验后,它似乎不喜欢for循环。所以我现在只使用它而没有for循环和常量。
这不是一个真正的解决方案。