Может вместо смены шейдеров сделать ветвление? Например как это делают для материалов -- записывают индекс материала в гбуффер и затем выполняют нужный для этого материала код из общего шейдера.
|
Кароч ветвление делать не нужно. Если убрать запись цвета (gpDevice->SetRenderState( D3DRS_COLORWRITEENABLE, 0x00000000 ); ) то пиксельный шейдер не выполняется, следовательно можно не менять пиксельный шейдер( оставить активным шейдер света ) - я понял это исходя из замеров производительности: 70 источников света в кадре без записи цвета при рендере в трафарет - 64 фпс, с записью цвета 28 фпс. Так что одну проблему я убрал, но блин все равно у меня прирост фпс вообще мизерный - 5-7 к\с. Попробую еще рисовать сферку вместо квада, как предложил Mr_F_.
upd. Разве блендинг выполняется для фрагментов не прошедших тест трафарета?