Pergunta

Eu estou codificação um aplicativo 3D com DirectX 10 e eu estou querendo saber como o tackeling do Shadermanagement é.

É mais eficaz para pré-carregar todos os shaders existem no arranque da aplicação e, em seguida, usá-los como necessário ou faz este trem os recursos do hardware se o número fica maior.

Também gostaria de saber se é uma consideração velocidade para ordenar a prestação de shader para que os interruptores de sombreamento são minimizados.

Foi útil?

Solução

Eu não tenho trabalhado com DX10, única DX9, mas eu estou supondo que essas coisas ainda são os mesmos.

Dependendo da sua aplicação, você pode realmente gerar shaders em tempo de execução (muitos jogos 3D sofisticados atuais fazer isso).

O pré-carregamento dos shaders não é uma má idéia, dependendo se você gerar shaders, quantos são, quais são suas considerações de memória são - isso depende. No entanto, o pré-carregamento de um shader (por que eu suponho que você quer dizer a criação da instância ID3DXEffect) leva apenas memória em tempo de execução, sem o uso da CPU.

Como encomendar por shader é uma boa idéia. Em geral, a classificação por material é uma boa idéia, porque a mudança shaders incorre em alguma sobrecarga (não excessivamente, mas perceptível, dependendo da complexidade do seu aplicativo).

Para classificar seus drawcalls, leia isto: http://realtimecollisiondetection.net/blog/?p = 86

Outras dicas

Em D3D10, todos os recursos do dispositivo são virtualizados para que você não vai ficar sem eles. Claro, você ainda pode esgotar os recursos físicos no cartão e causar muitos surra se você não prestar atenção ao que você está fazendo.

Além disso, eles mudaram o estado do dispositivo de forma significativa para reduzir o custo de mudar de estado, incluindo shaders.

Mas o que você está pedindo realmente é "é o método X mais rápido do que o método Y para a minha candidatura?" e embora D3D10 simplifica o gerenciamento de estado para fazer a mudança de estado mais rápido, a única maneira de responder à pergunta acima é fazer uma medição de desempenho com o o aplicação e o de dados.

O post realtimecollectiondetection.net está falando apenas de triagem suas chamadas empate. Isso vai levar a menos de comutação estado. Não importa o quão rápido estado de comutação é, fazendo menos é sempre mais rápido. Então, isso é um bom conselho geral.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top