Estou procurando uma maneira elegante de lidar com layouts de entrada no meu código directx11.
O problema que tenho é que tenho uma classe Effect e uma classe Element. A classe de efeito encapsula shaders e configurações semelhantes, e a classe Element contém algo que pode ser desenhado (modelo 3d, paisagem etc.)
Meu código de desenho define os shaders do dispositivo, etc., usando o efeito especificado e, em seguida, chama a função de desenho do elemento para desenhar a geometria real contida nele.
O problema é este - eu preciso criar um D3D11InputLayout em algum lugar. Isso realmente pertence à classe Element, pois não é da conta do resto do sistema como esse elemento escolhe representar seu layout de vértice. Mas, para criar o objeto, a API requer o bytecode do shader de vértice para o shader de vértice que será usado para desenhar o objeto. No directx9, era fácil, não havia dependência, portanto meu elemento poderia conter suas próprias estruturas de layout de entrada e defini-las sem o efeito estar envolvido.
Mas o elemento realmente não precisa saber nada sobre o efeito com o qual está sendo desenhado, isso é apenas as configurações de renderização e o elemento existe para fornecer geometria.
Então, eu realmente não sei onde armazenar e como selecionar o InputLayout para cada chamada de empate. Quero dizer, fiz algo funcionar, mas parece muito feio.
Isso me faz pensar que perdi algo óbvio, ou então o meu design de ter todas as configurações de renderização em um Efeito, a Geometria em um Elemento e um terceiro que desenha tudo é apenas falho.
Imaginando como mais alguém lida com seus layouts de entrada no directx11 de maneira elegante?