【发布时间】:2022-12-11 08:17:09
【问题描述】:
我有使用 FreeType 库生成的 Direct3D 单色字体纹理,我可以很好地渲染它们,但我现在正在尝试为它们着色。
由于我没有 HLSL 经验,所以我首先尝试使用固定函数尝试这样做,但似乎 Direct3D 现在已经删除了所有这些东西。
我尝试使用以下代码作为测试,但发现它用测试颜色填充了整个纹理,所以我得到了一个填充的矩形而不是字体。
在 DirectX 文档中找不到太多内容,这怎么办?
const char* g_strTTFPixelShaderProgram =
"float4 main(float2 uv : TEXCOORD) : COLOR"
"{"
" float4 originalColor; "
" originalColor = tex2D( InputTexture , uv.xy); "
" if(originalColor.r<TargetColor.r + Tolerance && originalColor.r>TargetColor.r - Tolerance"
" &&originalColor.g<TargetColor.g + Tolerance&&originalColor.g>TargetColor.g - Tolerance"
" &&originalColor.b<TargetColor.b + Tolerance&&originalColor.b>TargetColor.b - Tolerance)"
" {"
" float4 ARGB; "
" ARGB.a = 1.0; "
" ARGB.r = 0; "
" ARGB.g = 128; "
" ARGB.b = 0; "
" originalColor.rgb = ARGB;"
" }"
" return float4(originalColor.rgb, originalColor.a); "
"}"
;
【问题讨论】:
-
与问题无关,但我建议对着色器代码使用原始字符串文字以避免所有这些额外的双引号。
-
您可能想看看DirectX Tool Kit for DX11,因为它包含一堆现成的 HLSL 着色器。另见this legacy Effects sample。
标签: c++ directx hlsl direct3d freetype