Como exercício de aprendizado, escrevi um mecanismo de renderização diferida. Agora eu gostaria de adicionar um gráfico de cena a esse mecanismo, mas estou um pouco confuso sobre como fazer isso.
Em um normal (mecanismo de renderização direta), basta adicionar todos os itens (Todos implementando IDrawable e IUpdateAble) ao meu gráfico de cena, do que percorrer primeiro a largura do gráfico de cena e chamar Draw () em todos os lugares.
No entanto, em um mecanismo de renderização diferida, tenho que separar as chamadas de draw. Primeiro tenho que desenhar a geometria, depois os lançadores de sombras e depois as luzes (todas para diferentes alvos de renderização), antes de combinar todas elas. Portanto, neste caso, não posso simplesmente percorrer o gráfico da cena e apenas chamar draw. Do jeito que eu vejo, eu tenho que percorrer o gráfico de cena inteiro três vezes, verificando que tipo de objeto é esse que precisa ser desenhado ou preciso criar três gráficos de cena separados que, de alguma forma, estão conectados um ao outro. Ambas parecem soluções ruins, eu gostaria de lidar com objetos de cena mais transparentes.
Uma outra solução que pensei em viajar pelo gráfico de cena como normal e adicionar itens a 3 listas separadas, separando geometria, rodízios de sombras e luzes, e depois iterando essas listas para desenhar as coisas corretas, é melhor e é isso? sábio repovoar 3 listas de cada quadro?