Quero perguntar se existe uma prática recomendada para definir Effect
parâmetros no XNA. Ou, em outras palavras, o que exatamente acontece quando ligo pass.Apply()
. Eu posso imaginar vários cenários:
- Cada vez que
Apply
é chamado, todos os parâmetros de efeito são transferidos para a GPU e, portanto, não tem nenhuma influência real com que frequência eu defino um parâmetro. - Cada vez que
Apply
é chamado, apenas os parâmetros que foram redefinidos são transferidos. Portanto, operações em cache de Set que realmente não definem um novo valor devem ser evitadas. - Cada vez que
Apply
é chamado, apenas os parâmetros que foram alterados são transferidos. Portanto, o cache de operações Set é inútil. - Toda essa pergunta não tem inicialização porque nenhuma das formas mencionadas tem um impacto notável no desempenho do jogo.
Portanto, a pergunta final: é útil implementar algum cache da operação de conjunto, como:
private Matrix _world;
public Matrix World
{
get{ return _world; }
set
{
if (value == world) return;
_effect.Parameters["xWorld"].SetValue(value);
_world = value;
}
}
Agradecendo antecipadamente.