Je suis un nouvel apprenant de DirectX11
, et récemment je décide d'utiliser VS2015
pour exécuter le code.Shader Réflexion avec DirectX11
J'essaie de ne pas utiliser EffectFrameWork11
, mais il y a une expérience très déplaisante lors de son utilisation.
J'essaie de changer les valeurs dans le tampon constant, sans EffectFramWork
, je dois utiliser la carte fonction, le code de pseudo tout comme:
D3D11_MAPPED_SUBRESOURCE mapResource;
ConstBuffer* constStruct = nullptr;
auto result = m_d3dContext->Map(m_constantBuffer, 0, D3D11_MAP_WRITE_DISCARD,
0, &mapResource);
if (FAILED(result))
{
d3dHelper::ShowResultMessage(result);
return;
}
constStruct = (ConstBuffer*)mapResource.pData;
constStruct->word = world;
constStruct->view = view;
constStruct->proj = proj;
m_d3dContext->Unmap(m_constantBuffer, 0);
m_d3dContext->VSSetConstantBuffers(0, 1, &m_constantBuffer);
m_d3dContext->DrawIndexed(indexCount, indexOffset, vertexOffset);
OK, il fonctionne bien, mais comme vous pouvez le voir, je d'écrire deux mêmes struct en C++ code et le code HLSL:
C++ code comme ceci:
struct ConstBuffer
{
XMMATRIX word;
XMMATRIX proj;
XMMATRIX view;
};
code HLSL comme ceci:
cbuffer cbPerObject : register(b0)
{
matrix worldMatrix;
matrix projMatrix;
matrix viewMatrix;
}
Alors, existe-t-il un moyen pratique de mettre à jour un membre avec Constant Buffer?
Vous devriez jeter un oeil à la [Kit d'outils DirectX] (https://github.com/Microsoft/DirectXTK) –
merci ami, je l'ai regardé.Mais il suffit d'utiliser de la même manière.Si il y a un autre façon? –
pourquoi ne pas utiliser 'EffectFrameWork11'? Je pense qu'il est pratique de mettre à jour les données pour utiliser 'EffectFrameWork11' plutôt que d'utiliser dx11 directement. Et DXTK est aussi bon. – zhangbaochong