Я просто оптимизациями занимаюсь, и пока довольно успешно( ибо уже выжал 30% ). Так вот деферед у меня организован хорошо, но есть один момент.
для каждого источника света
{
ставим простейшие шейдеры для отрисовки в трафарет
рисуем ограничивающий меш в трафарет
ставим шейдеры для фулскрин квада( пиксельный отвечает за освещение )
рисуем квад
}
как видно тут постоянно меняются шейдеры, хотелось бы этого избежать ибо смена шейдеров не быстрая. и я вот че подумал, может не менять шейдеры а просто в пиксельном шейдере освещения сделать ветвление типа
bool boundingVolumeRender;
...
if( boundingVolumeRender )
return float4( 1, 1, 1, 1 );
else
calculateLighting
получается в пиксельном шейдере статическое ветвление, оно практически бесплатно, вершинный шейдер тоже не проблема, ибо разница только в матрицах - для ограничивающего объема это worldViewProjection, а для квада это просто projection.