5

我是 HLSL 和着色器的新手。我似乎无法替换我检索到的颜色。它用于二维文本,即字幕。问题是如果我在 main() 之外设置 osd_color 它不会显示任何内容。我正在使用 Shazzam Shader Editor 1.4 快速查看效果,但是程序中发生了同样的事情..

sampler2D texture0 : register(s0);

float4 osd_color = float4(0,0,0,1);
struct PixelShaderInput
{
    float2 uv0: TEXCOORD0;          
    float4 color: COLOR;
};

float4 main(PixelShaderInput input): COLOR {
float4 color = tex2D(texture0, input.uv0) * osd_color;
return color;
}

希望你能帮忙。

编辑:

当我在它的时候,如果我想添加一个阴影/轮廓并返回它的颜色,我会怎么做?假设每个变量都有效。osd_color 为白色,float4 轮廓为黑色。我试过了:

float4 outline = tex2D(texture0, (input.uv0 * 1.1) ) * outline_color;
return color + outline;

有了这个,我得到的只是白色(osd_color)..

4

1 回答 1

8

您必须自己管理非静态变量的内存。静态变量将节省您的时间:

static float4 osd_color = float4(0,0,0,1);

使用静态时,一切都按预期工作,因为编译器关心为颜色值保留一些内存。如果静态不存在,您必须自己管理内存 - 或您的应用程序 - 这意味着您必须检索变量的默认值并手动将其复制到常量缓冲区。

于 2014-01-14T15:56:54.210 回答