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)。
您必须自己管理非静态变量的内存。静态变量可以节省您的一天:
static float4 osd_color = float4(0,0,0,1);
Run Code Online (Sandbox Code Playgroud)
使用静态时,一切都会按预期工作,因为编译器会关心为颜色值保留一些内存。如果不存在静态变量,则必须自己(或您的应用程序)管理内存,这意味着您必须检索变量的默认值,然后手动将其复制到常量缓冲区。