2016-05-24 8 views
0

У меня есть шейдер, который я хочу применить к WPF TextBlock. Тем не менее, мой шейдер всегда, кажется, ограничен текстурой, которая равна ограничивающей рамке текста. И, как результат, я не могу получить доступ к пикселям за пределами ограничивающей рамки (например, для добавления большого пограничного или цветового эффекта). Все, что я пытался увеличить ограничительную рамку, либо в XAML, либо в C#, перед тем, как применить шейдер, не удалось.Размер текстового блока WPF, используемого в шейдере, не может быть изменен.

На этом снимке показан эффект применения простого синего оверлейного шейдера к тексту. Он показывает экстенты ограничивающего прямоугольника и пиксели, к которым имеет доступ шейдер. Итак, вопрос в том, как развернуть ограничивающий текст поле перед вызовом шейдера? Надеюсь, что кто-то прошел через эту проблему до ...

Я включил просто шейдерный код ниже:

sampler2D texSampler : register(S0); 
float threshold : register (C0); 
float4 txtColor : register (C1); 

float4 main(float2 uv : TEXCOORD) : COLOR 
{ 
    float4 color = tex2D(texSampler, uv); 

    color.r = txtColor[0]; 
    color.g = txtColor[1]; 
    color.b = txtColor[2]; 

    return color; 
} 

Sample text and bounding box

ответ

0

Вот что происходит - Если фон не указан для TextBlock, то wpf помещает узкий ограничивающий прямоугольник вокруг текста независимо от ширины и высоты, указанных для TextBlock. Чтобы устранить проблему, просто установите цвет фона в Прозрачный для TextBlock.