我是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)。
我创建一个数组:
unsigned short* array = malloc(sizeof(unsigned short)*N);
Run Code Online (Sandbox Code Playgroud)
为其分配值:
for(i=0; i<N; i++){
array[i] = rand()%USHRT_MAX;
}
Run Code Online (Sandbox Code Playgroud)
将其转换为void*并将其传递给工作线程,该线程将在数组中找到最大值:
pthread_create(&threads[0], NULL, findMax, (void*)&array);
Run Code Online (Sandbox Code Playgroud)
看起来像这样:
void* findMax(void* arg){
int i = 0;
unsigned short max = 0;
unsigned short* table = (unsigned short*)arg;
for(i=0;i<N;i++){
if(table[i]> max){
max = table[i];
}
}
printf("Max: %d\n", max);
}
Run Code Online (Sandbox Code Playgroud)
问题是数组中指定的数字格式错误.例如,对于N个随机生成的数字:3664 50980 37495 12215 33721,此循环将解释数字如下:
table[0] = 28680
table[1] = 2506
table[2] = 5
table[3] = 0
table[4] = 32736
Run Code Online (Sandbox Code Playgroud)
使用5和0作为阵列中第2和第3位的重复模式.
我显然超越了一些内存边界,这里发生了什么以及如何解决它?