我正在制作Directx引擎,但我遇到了这个小问题。
我不想使用fx文件而是使用着色器文件,但是我的问题是我可以用什么替换ID3D11XEffectMatrixVariable
?
谢谢您的帮助。
最佳答案
如果不使用Effects 11来管理着色器元数据和常量,则您将直接负责绑定和更新常量缓冲区。
例如,在Direct3D教程(Win32 desktop或Windows Store)中,HLSL着色器定义了具有矩阵的常量缓冲区:
cbuffer cbNeverChanges : register( b0 )
{
matrix View;
};
然后您手动进行设置并将其绑定到C ++代码中以进行渲染:
类型:
struct CBNeverChanges
{
XMMATRIX mView;
};
ID3D11Buffer* g_pCBNeverChanges = nullptr;
设定:
// Create the constant buffers
bd.Usage = D3D11_USAGE_DEFAULT;
bd.ByteWidth = sizeof(CBNeverChanges);
bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
bd.CPUAccessFlags = 0;
hr = g_pd3dDevice->CreateBuffer( &bd, nullptr, &g_pCBNeverChanges );
if( FAILED( hr ) )
return hr;
更新:
CBNeverChanges cbNeverChanges;
cbNeverChanges.mView = XMMatrixTranspose( g_View );
g_pImmediateContext->UpdateSubresource( g_pCBNeverChanges, 0, nullptr, &cbNeverChanges, 0, 0 );
渲染:
g_pImmediateContext->VSSetShader( g_pVertexShader, nullptr, 0 );
g_pImmediateContext->VSSetConstantBuffers( 0, 1, &g_pCBNeverChanges );
注意
XMMatrixTranspose
是因为HLSL默认使用“列主”矩阵,而DirectX程序通常使用“行主”矩阵。关于c - ID3D11 EffectMatrix变量用什么替换?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26284516/