J'essaie d'écrire du code DirectX qui prend un shader compilé et utilise la réflexion pour générer automatiquement des dispositions d'entrée pour les vertex shaders. Je simple vertex shader qui est conçu pour tirer parti de l'instanciation, c'est l'entrée accepte:DirectX 11 Vertex Shader Réflexion
struct VertexIn
{
// Per-vertex data
float3 pos : POSITION;
float4 color : COLOR;
// Per-instance data
matrix worldMatrix : WORLDMATRIX;
};
Et ma mise en page, si je devais l'écrire à la main, serait:
// Per-vertex data
{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
// Per-instance data.
{ "WORLDMATRIX", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1 },
{ "WORLDMATRIX", 1, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1 },
{ "WORLDMATRIX", 2, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1 },
{ "WORLDMATRIX", 3, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1 }
quand je pense que le shader compilé je reçois les paramètres nombre d'entrées correct, mais lorsque je tente de lire les descriptions d'entrée par D3D11_SIGNATURE_PARAMTER_DESC
, je ne peux pas trouver les détails que je dois remplir les D3D11_INPUT_ELEMENT_DESC
membres InputSlot
, InputSlotClass
et InstanceDataStepRate
? Est-ce que je cherche dans la mauvaise description pour cette information ou est-ce que l'obtention de détails d'instanciation n'est pas possible par réflexion?
Si ce n'est pas possible alors je devine que la seule autre alternative que j'ai est de passer la disposition d'entrée de vertex prévue et de vérifier tous les paramètres?
Ah c'est un point juste en ce qui concerne le commentaire dans le shader lui-même, il ne mentionne pas réellement quelque chose au sujet des numéros d'emplacement. J'aime l'idée sémantique, pourrait essayer. Quand vous mentionnez que vous avez besoin de savoir quelles sont vos données d'entrée, qu'entendez-vous par là? Des appels tels que IASetVertexBuffers? – TheRarebit
Oui, je voulais dire que vous aurez besoin de savoir quelles données de vertex vous avez (par exemple, celles définies avec IASetVertexBuffers). Alors que vous pourriez mettre un schéma dans le shader pour définir cela, à la fin, vous devrez toujours avoir les données de vertex. – MuertoExcobito
Okay ouais je comprends, tout ne peut pas être automatisé je suppose, j'aime l'idée de la génération de mise en page d'entrée étant automatisé si peut donner à vos suggestions un essai. Bravo pour les commentaires. – TheRarebit