我目前正在编写一个HLSL用于基本高斯模糊的着色器。着色器代码很简单,但我不断收到错误:
不在 dx9 兼容模式下时,DX9 风格特性将被禁用。(法律公告#:19)
这告诉我,我的代码中的第 19 行是问题所在,我相信它要么是由于该特定行引起的tex2D,要么是Sampler在该特定行中。
#include "Common.hlsl"
Texture2D Texture0 : register(t0);
SamplerState Sampler : register(s0);
float4 PSMain(PixelShaderInput pixel) : SV_Target {
float2 uv = pixel.TextureUV; // This is TEXCOORD0.
float4 result = 0.0f;
float offsets[21] = { ... };
float weights[21] = { ... };
// Blur horizontally.
for (int x = 0; x < 21; x++)
result += tex2D(Sampler, float2(uv.x + offsets[x], uv.y)) * weights[x];
return result;
}
Run Code Online (Sandbox Code Playgroud)
请参阅下面有关代码的注释和我的问题。
由于我的代码位于没有连接的计算机上,因此我必须手动将代码输入 StackOverflow。所以:
offsets和内部没有值weights是故意的。
offsets-10是从到 的每个整数10。weights范围从0.01到0.25和返回 到0.01。15。13 - 59封装了tex2D和Sampler。Sampler我在通话中使用了错误的数据类型吗tex2D?tex2D弃用DirectX 11?经过一番广泛的搜索后,我发现从上往下tex2D不再支持它。ps_4_0好吧,4_0将在旧模式下工作,但它不起作用,这5_0正是我正在使用的。
着色器模型:支持
Shader Model 4:是(仅限像素着色器),但编译时必须使用旧版编译选项。
着色器模型 3 (DirectX HLSL):是(仅限像素着色器)
着色器模型 2 (DirectX HLSL):是(仅限像素着色器)
着色器模型 1 (DirectX HLSL):是(仅限像素着色器)
这已被替换为Texture2D;文档可供使用。以下是上述文档中的示例:
// Object Declarations
Texture2D g_MeshTexture;
SamplerState MeshTextureSampler
{
Filter = MIN_MAG_MIP_LINEAR;
AddressU = Wrap;
AddressV = Wrap;
};
struct VS_OUTPUT
{
float4 Position : SV_POSITION;
float4 Diffuse : COLOR0;
float2 TextureUV : TEXCOORD0;
};
VS_OUTPUT In;
// Shader body calling the intrinsic function
Output.RGBColor = g_MeshTexture.Sample(MeshTextureSampler, In.TextureUV) * In.Diffuse;
Run Code Online (Sandbox Code Playgroud)
要替换tex2D我的代码中的调用:
result += Texture0.Sample(Sampler, float2(uv.x + offsets[x], uv.y)) * weights[x];
Run Code Online (Sandbox Code Playgroud)
另请注意,本文中的代码用于高斯模糊的水平传递。
| 归档时间: |
|
| 查看次数: |
2195 次 |
| 最近记录: |