Пиксельный шейдер Hlsl, рендеринг отличается от редактора?

Сделали пиксельный шейдер hlsl для добавления контура/тени для субтитров. Моя проблема в том, что я использую Shazzam - редактор шейдеров, чтобы посмотреть, как это будет, результат в моей программе совсем другой. Например:

Я использовал .png с текстом, чтобы сделать изображение для Shazzam

Я использовал .png с текстом, чтобы сделать изображение для редактора Shazzam, но, как вы можете видеть, в программе (видеоплеере) есть небольшая подсказка, и я ее не понимаю.

Мой код:

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; с.г = 0; с.б = 0; с.а = 1;..

Надеюсь, вы можете помочь :)


person siz    schedule 09.09.2013    source источник


Ответы (1)


После долгих проб и ошибок оказалось, что цикл for ему не нравится. Так что я просто использую его без цикла for и с константами на данный момент.

Это ответ, а не решение..

person siz    schedule 10.09.2013