创建一些常量缓冲区后,其中一些缓冲区开始无法正确初始化.
使用名为MiscStream的结构创建一个常量缓冲区,该结构定义如下:
struct MiscStream {
int rw,rh;
float shine_factor;
float dist_factor;
int random_number;
};
Run Code Online (Sandbox Code Playgroud)
初始化为:
D3D11_BUFFER_DESC dx_misc_buffer_desc;
ID3D11Buffer* dx_misc_buffer;
ZeroMemory(&dx_misc_buffer_desc,sizeof dx_misc_buffer_desc);
dx_misc_buffer_desc.BindFlags=D3D11_BIND_CONSTANT_BUFFER;
dx_misc_buffer_desc.Usage=D3D11_USAGE_DYNAMIC;
dx_misc_buffer_desc.ByteWidth=sizeof(MiscStream);
dx_misc_buffer_desc.StructureByteStride=0;
dx_misc_buffer_desc.CPUAccessFlags=D3D11_CPU_ACCESS_WRITE;
dx_misc_buffer_desc.MiscFlags=0;
hr=dx_device->CreateBuffer(&dx_misc_buffer_desc,NULL,&dx_misc_buffer);
Run Code Online (Sandbox Code Playgroud)
hr将作为E_INVALIDARG返回,程序将失败.
许多其他常量缓冲区以这种方式设置,但它们的结构中都有向量和矩阵.
我将MiscStruct更改为
struct MiscStream {
D3DXVECTOR3 __r;
int rw,rh;
float shine_factor;
float dist_factor;
int random_number;
};
Run Code Online (Sandbox Code Playgroud)
它没有错误地工作.
是否有最小结构尺寸?怎么了?
我正在尝试在HLSL文件中定义一个简单的SamplerState以用于纹理.编译着色器时,出现错误:
error X3004: undeclared identifier 'Filter'
Run Code Online (Sandbox Code Playgroud)
资源:
// part of render.hlsl
SamplerState linear_sample=
{
Filter=MIN_MAG_MIP_LINEAR;
AddressU = Wrap;
AddressV = Wrap;
};
Run Code Online (Sandbox Code Playgroud)
汇编:
hr=D3DX10CreateEffectFromFile("render.hlsl",NULL,NULL,"fx_4_0",D3D10_SHADER_ENABLE_STRICTNESS | D3D10_SHADER_DEBUG,0,dx_device,NULL,NULL,&dx_effect,&dx_err,NULL);'
Run Code Online (Sandbox Code Playgroud)
我已经在MSDN上查看了,我的HLSL文件似乎没有任何问题.我编译不正确吗?