HLSL Pixel Shader-全局变量?

siz*_*siz 5 variables colors hlsl

我是HLSL和着色器的新手。我似乎无法替换检索到的颜色。用于2D文本,即字幕。问题是如果我在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;
}
Run Code Online (Sandbox Code Playgroud)

希望能对您有所帮助。

编辑:

当我在使用它时,如果我想添加阴影/轮廓并返回其颜色,该怎么办?假设每个变量都有效。osd_color是白色,float4轮廓是黑色。我试过了:

float4 outline = tex2D(texture0, (input.uv0 * 1.1) ) * outline_color;
return color + outline;
Run Code Online (Sandbox Code Playgroud)

这样,我得到的是白色(osd_color)。

Ver*_*ahn 5

您必须自己管理非静态变量的内存。静态变量可以节省您的一天:

static float4 osd_color = float4(0,0,0,1);
Run Code Online (Sandbox Code Playgroud)

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