Note that there are some explanatory texts on larger screens.

plurals
  1. POmultiplication of matrices in vertex shader
    text
    copied!<p>When I multiply matrices on CPU</p> <pre><code>D3DXMATRIX mb = mbb.matWorld * mbb.matView * mbb.matProj; D3D11_BUFFER_DESC bd; ZeroMemory(&amp;bd, sizeof(bd)); bd.Usage = D3D11_USAGE_DEFAULT; bd.ByteWidth = sizeof(D3DXMATRIX); bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER; bd.CPUAccessFlags = 0; D3D11_SUBRESOURCE_DATA initData; ZeroMemory(&amp;initData, sizeof(initData)); initData.pSysMem = &amp;mb; //***************************************** cbuffer ConstantBuffer : register(cb0) { matrix mat; float4 vs(float4 pos : POSITION) : SV_POSITION { float4 ret = mul(pos, mat); return ret; } </code></pre> <p>It works great. But when I do it on GPU</p> <pre><code>struct Buffer { D3DXMATRIX mat[3]; }; Buffer b; // b[..] = .... D3D11_BUFFER_DESC bd; ZeroMemory(&amp;bd, sizeof(bd)); bd.Usage = D3D11_USAGE_DEFAULT; bd.ByteWidth = sizeof(D3DXMATRIX) * 3; bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER; bd.CPUAccessFlags = 0; D3D11_SUBRESOURCE_DATA initData; ZeroMemory(&amp;initData, sizeof(initData)); initData.pSysMem = &amp;b; //***************************************** cbuffer ConstantBuffer : register(cb0) { matrix matWorld; matrix matView; matrix matProj; } float4 vs(float4 pos : POSITION) { float4 ret = mul(pos, matWorld); ret = mul(ret, matView); ret = mul(ret, matProj); return ret; } </code></pre> <p>Nothing is rendered on the screen. What's wrong?</p> <p>I've been debugging with PIX and it shows that in both versions post-vs vertices are the same.</p> <p>I noticed that it's caused by projection matrix. For my projection matrix I do:</p> <pre><code>D3DXMatrixPerspectiveFovLH(&amp;mbb.matProj, D3DX_PI / 2, (float) init_params.width / init_params.height, 0.01f, 100.0f) </code></pre> <p>FIXED</p> <p>I have to transpose matrices before passing them to vertex shader.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload