Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ SetMatrix()不会将所有值复制到HLSL_C++_Directx_Hlsl - Fatal编程技术网

C++ SetMatrix()不会将所有值复制到HLSL

C++ SetMatrix()不会将所有值复制到HLSL,c++,directx,hlsl,C++,Directx,Hlsl,我想将D3DX矩阵向量的内容用于我的着色器 m_pLightMatrices->SetMatrixArray(&currentLightMatrices[0].m[0][0],0,numLights); 正如我们所知,向量的内部结构不会带来任何问题(因为它只是一个动态数组) 现在,当我在hlsl中访问这个矩阵来填充结构时,我得到了一个奇怪的行为: struct LightTest { float3 LightPos; float LightRange; float4 L

我想将D3DX矩阵向量的内容用于我的着色器

m_pLightMatrices->SetMatrixArray(&currentLightMatrices[0].m[0][0],0,numLights);
正如我们所知,向量的内部结构不会带来任何问题(因为它只是一个动态数组)

现在,当我在hlsl中访问这个矩阵来填充结构时,我得到了一个奇怪的行为:

struct LightTest
{
 float3 LightPos; 
 float LightRange; 
 float4 LightDiffuse; 
 float3 LightAtt;
};

float4x4 currentLight = gLights[0];

LightTest lt;
lt.LightPos = currentLight._m00_m01_m02; //{0,0,0}
lt.LightDiffuse = currentLight[1].rgba; //{0,0,0,0}
lt.LightRange = currentLight._m03; //this gives me a value
lt.LightAtt = currentLight[2].xyz; //{0,0,0}
调试时,我发现我的矩阵中充满了我想要的变量。 当我尝试硬编码检查结构中的内容时,除了LightRange之外,我得到了所有的零

正如您所见,我尝试了访问float4x4的不同方法,但没有任何其他结果


为什么hlsl没有复制我所有的变量?

我设法解决了这个问题。我确实需要澄清一下为什么它现在起作用

我只是在设置输入布局之前放置了SetMatrixArray()函数,突然间它就完美地工作了


以前,它与所有其他变量(如世界矩阵等)一起位于更新函数中,这些变量工作正常。

在某些情况下,需要调用CommitChanges才能更新到HLSL


而且,这样做真的是一种罪恶。你试过分别发送向量等吗?

邪恶?先生,你让我高兴极了!我只是匆匆忙忙,因为我的自定义结构也不起作用。我想只是单独发送向量,但这太麻烦了。幸运的是,我可以使用普通结构将数据传输到hlsl,而不是这种矩阵黑客。