我正在制作Directx引擎,但我遇到了这个小问题。
我不想使用fx文件而是使用着色器文件,但是我的问题是我可以用什么替换ID3D11XEffectMatrixVariable
谢谢您的帮助。

最佳答案

如果不使用Effects 11来管理着色器元数据和常量,则您将直接负责绑定和更新常量缓冲区。

例如,在Direct3D教程(Win32 desktopWindows 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/

10-11 15:53