572 if(bgfx::isValid(tex_color_))
578 tex_color_ = bgfx::createUniform(
"s_texColor", bgfx::UniformType::Sampler);
579 shadow_map_[0] = bgfx::createUniform(
"s_shadowMap0", bgfx::UniformType::Sampler);
580 shadow_map_[1] = bgfx::createUniform(
"s_shadowMap1", bgfx::UniformType::Sampler);
581 shadow_map_[2] = bgfx::createUniform(
"s_shadowMap2", bgfx::UniformType::Sampler);
582 shadow_map_[3] = bgfx::createUniform(
"s_shadowMap3", bgfx::UniformType::Sampler);
586 rt_shadow_map_[i] = {bgfx::kInvalidHandle};
596 { { 0.0f, 0.0f, 0.0f, 1.0f } },
597 { { 0.0f,-0.4f,-0.6f, 0.0f } },
602 { { 0.5f,-1.0f, 0.1f, 0.0f } },
603 { { 0.0f, 0.0f, 0.0f, 1.0f } },
609 color_[0] = color_[1] = color_[2] = color_[3] = 1.0f;
610 uniforms_.
setPtrs(&point_light_,
628 10.0f, 7.0f, 12.0f, 1.0f
629 , 10.0f, 1.0f, 20.0f, 1.0f
630 , 1.0f, 1.0f, 10.0f, 1.0f
631 , 250.0f, 100.0f, 2000.0f, 50.0f
632 , 0.0035f, 0.0f, 0.01f, 0.00001f
633 , 0.0012f, 0.0f, 0.05f, 0.00001f
634 , 0.7f, 0.0f, 1.0f, 0.01f
635 , 500.0f, 1.0f, 1000.0f, 1.0f
636 , 2.0f, 0.0f, 4.0f, 1.0f
637 , 2.0f, 0.0f, 4.0f, 1.0f
638 , 1.0f, 0.0f, 3.0f, 0.01f
639 , 1.0f, 0.0f, 3.0f, 0.01f
645 10.0f, 7.0f, 12.0f, 1.0f
646 , 10.0f, 1.0f, 20.0f, 1.0f
647 , 1.0f, 1.0f, 99.0f, 1.0f
648 , 250.0f, 100.0f, 2000.0f, 50.0f
649 , 0.007f, 0.0f, 0.01f, 0.00001f
650 , 0.001f, 0.0f, 0.05f, 0.00001f
651 , 0.7f, 0.0f, 1.0f, 0.01f
652 , 500.0f, 1.0f, 1000.0f, 1.0f
653 , 2.0f, 0.0f, 8.0f, 1.0f
654 , 2.0f, 0.0f, 8.0f, 1.0f
655 , 1.0f, 0.0f, 3.0f, 0.01f
656 , 1.0f, 0.0f, 3.0f, 0.01f
662 10.0f, 7.0f, 12.0f, 1.0f
663 , 10.0f, 1.0f, 20.0f, 1.0f
664 , 1.0f, 1.0f, 99.0f, 1.0f
665 , 250.0f, 100.0f, 2000.0f, 50.0f
666 , 0.007f, 0.0f, 0.01f, 0.00001f
667 , 0.001f, 0.0f, 0.05f, 0.00001f
668 , 0.7f, 0.0f, 1.0f, 0.01f
669 , 500.0f, 1.0f, 1000.0f, 1.0f
670 , 2.0f, 0.0f, 8.0f, 1.0f
671 , 2.0f, 0.0f, 8.0f, 1.0f
672 , 1.0f, 0.0f, 3.0f, 0.01f
673 , 1.0f, 0.0f, 3.0f, 0.01f
679 10.0f, 7.0f, 12.0f, 1.0f
680 , 10.0f, 1.0f, 20.0f, 1.0f
681 , 8.0f, 1.0f, 10.0f, 1.0f
682 , 250.0f, 100.0f, 2000.0f, 50.0f
683 , 0.045f, 0.0f, 0.1f, 0.00001f
684 , 0.001f, 0.0f, 0.05f, 0.00001f
685 , 0.02f, 0.0f, 0.04f, 0.00001f
686 , 450.0f, 1.0f, 1000.0f, 1.0f
687 , 2.0f, 0.0f, 4.0f, 1.0f
688 , 2.0f, 0.0f, 4.0f, 1.0f
689 , 1.0f, 0.0f, 3.0f, 0.01f
690 , 1.0f, 0.0f, 3.0f, 0.01f
696 10.0f, 7.0f, 12.0f, 1.0f
697 , 10.0f, 1.0f, 20.0f, 1.0f
698 , 3.0f, 1.0f, 10.0f, 0.01f
699 , 250.0f, 100.0f, 2000.0f, 50.0f
700 , 0.02f, 0.0f, 0.3f, 0.00001f
701 , 0.001f, 0.0f, 0.05f, 0.00001f
702 , 0.7f, 0.0f, 1.0f, 0.01f
703 , 9000.0f, 1.0f, 15000.0f, 1.0f
704 , 2.0f, 0.0f, 4.0f, 1.0f
705 , 2.0f, 0.0f, 4.0f, 1.0f
706 , 1.0f, 0.0f, 3.0f, 0.01f
707 , 1.0f, 0.0f, 3.0f, 0.01f
717 10.0f, 7.0f, 12.0f, 1.0f
718 , 1.0f, 1.0f, 20.0f, 1.0f
719 , 1.0f, 1.0f, 10.0f, 1.0f
720 , 250.0f, 100.0f, 2000.0f, 50.0f
721 , 0.0025f, 0.0f, 0.01f, 0.00001f
722 , 0.0012f, 0.0f, 0.05f, 0.00001f
723 , 0.7f, 0.0f, 1.0f, 0.01f
724 , 500.0f, 1.0f, 1000.0f, 1.0f
725 , 2.0f, 0.0f, 4.0f, 1.0f
726 , 2.0f, 0.0f, 4.0f, 1.0f
727 , 1.0f, 0.0f, 3.0f, 0.01f
728 , 1.0f, 0.0f, 3.0f, 0.01f
734 10.0f, 7.0f, 12.0f, 1.0f
735 , 1.0f, 1.0f, 20.0f, 1.0f
736 , 1.0f, 1.0f, 99.0f, 1.0f
737 , 250.0f, 100.0f, 2000.0f, 50.0f
738 , 0.0025f, 0.0f, 0.01f, 0.00001f
739 , 0.001f, 0.0f, 0.05f, 0.00001f
740 , 0.7f, 0.0f, 1.0f, 0.01f
741 , 2000.0f, 1.0f, 2000.0f, 1.0f
742 , 2.0f, 0.0f, 8.0f, 1.0f
743 , 2.0f, 0.0f, 8.0f, 1.0f
744 , 1.0f, 0.0f, 3.0f, 0.01f
745 , 1.0f, 0.0f, 3.0f, 0.01f
751 10.0f, 7.0f, 12.0f, 1.0f
752 , 1.0f, 1.0f, 20.0f, 1.0f
753 , 1.0f, 1.0f, 99.0f, 1.0f
754 , 250.0f, 100.0f, 2000.0f, 50.0f
755 , 0.0025f, 0.0f, 0.01f, 0.00001f
756 , 0.001f, 0.0f, 0.05f, 0.00001f
757 , 0.7f, 0.0f, 1.0f, 0.01f
758 , 2000.0f, 1.0f, 2000.0f, 1.0f
759 , 2.0f, 0.0f, 8.0f, 1.0f
760 , 2.0f, 0.0f, 8.0f, 1.0f
761 , 1.0f, 0.0f, 3.0f, 0.01f
762 , 1.0f, 0.0f, 3.0f, 0.01f
768 10.0f, 7.0f, 12.0f, 1.0f
769 , 1.0f, 1.0f, 20.0f, 1.0f
770 , 1.0f, 1.0f, 10.0f, 1.0f
771 , 250.0f, 100.0f, 2000.0f, 50.0f
772 , 0.006f, 0.0f, 0.01f, 0.00001f
773 , 0.001f, 0.0f, 0.05f, 0.00001f
774 , 0.02f, 0.0f, 0.1f, 0.00001f
775 , 300.0f, 1.0f, 1500.0f, 1.0f
776 , 2.0f, 0.0f, 4.0f, 1.0f
777 , 2.0f, 0.0f, 4.0f, 1.0f
778 , 1.0f, 0.0f, 3.0f, 0.01f
779 , 1.0f, 0.0f, 3.0f, 0.01f
785 10.0f, 7.0f, 12.0f, 1.0f
786 , 1.0f, 1.0f, 20.0f, 1.0f
787 , 1.0f, 1.0f, 10.0f, 0.01f
788 , 250.0f, 100.0f, 2000.0f, 50.0f
789 , 0.0055f, 0.0f, 0.01f, 0.00001f
790 , 0.001f, 0.0f, 0.05f, 0.00001f
791 , 0.7f, 0.0f, 1.0f, 0.01f
792 , 2500.0f, 1.0f, 5000.0f, 1.0f
793 , 2.0f, 0.0f, 4.0f, 1.0f
794 , 2.0f, 0.0f, 4.0f, 1.0f
795 , 1.0f, 0.0f, 3.0f, 0.01f
796 , 1.0f, 0.0f, 3.0f, 0.01f
810 12.0f, 9.0f, 12.0f, 1.0f
811 , 10.0f, 1.0f, 20.0f, 1.0f
812 , 1.0f, 1.0f, 10.0f, 1.0f
813 , 250.0f, 100.0f, 2000.0f, 50.0f
814 , 0.006f, 0.0f, 0.01f, 0.00001f
815 , 0.001f, 0.0f, 0.05f, 0.00001f
816 , 0.7f, 0.0f, 1.0f, 0.01f
817 , 50.0f, 1.0f, 300.0f, 1.0f
818 , 2.0f, 0.0f, 4.0f, 1.0f
819 , 2.0f, 0.0f, 4.0f, 1.0f
820 , 0.25f, 0.0f, 2.0f, 0.001f
821 , 0.25f, 0.0f, 2.0f, 0.001f
827 12.0f, 9.0f, 12.0f, 1.0f
828 , 10.0f, 1.0f, 20.0f, 1.0f
829 , 1.0f, 1.0f, 99.0f, 1.0f
830 , 250.0f, 100.0f, 2000.0f, 50.0f
831 , 0.004f, 0.0f, 0.01f, 0.00001f
832 , 0.001f, 0.0f, 0.05f, 0.00001f
833 , 0.7f, 0.0f, 1.0f, 0.01f
834 , 50.0f, 1.0f, 300.0f, 1.0f
835 , 2.0f, 0.0f, 8.0f, 1.0f
836 , 2.0f, 0.0f, 8.0f, 1.0f
837 , 1.0f, 0.0f, 3.0f, 0.001f
838 , 1.0f, 0.0f, 3.0f, 0.001f
844 12.0f, 9.0f, 12.0f, 1.0f
845 , 10.0f, 1.0f, 20.0f, 1.0f
846 , 1.0f, 1.0f, 99.0f, 1.0f
847 , 250.0f, 100.0f, 2000.0f, 50.0f
848 , 0.004f, 0.0f, 0.01f, 0.00001f
849 , 0.001f, 0.0f, 0.05f, 0.00001f
850 , 0.7f, 0.0f, 1.0f, 0.01f
851 , 50.0f, 1.0f, 300.0f, 1.0f
852 , 2.0f, 0.0f, 8.0f, 1.0f
853 , 2.0f, 0.0f, 8.0f, 1.0f
854 , 1.0f, 0.0f, 3.0f, 0.001f
855 , 1.0f, 0.0f, 3.0f, 0.001f
861 12.0f, 9.0f, 12.0f, 1.0f
862 , 10.0f, 1.0f, 20.0f, 1.0f
863 , 8.0f, 1.0f, 10.0f, 1.0f
864 , 250.0f, 100.0f, 2000.0f, 50.0f
865 , 0.055f, 0.0f, 0.1f, 0.00001f
866 , 0.001f, 0.0f, 0.05f, 0.00001f
867 , 0.02f, 0.0f, 0.04f, 0.00001f
868 , 450.0f, 1.0f, 900.0f, 1.0f
869 , 2.0f, 0.0f, 4.0f, 1.0f
870 , 2.0f, 0.0f, 4.0f, 1.0f
871 , 0.25f, 0.0f, 2.0f, 0.001f
872 , 0.25f, 0.0f, 2.0f, 0.001f
878 12.0f, 9.0f, 12.0f, 1.0f
879 , 10.0f, 1.0f, 20.0f, 1.0f
880 , 3.0f, 1.0f, 10.0f, 0.01f
881 , 250.0f, 100.0f, 2000.0f, 50.0f
882 , 0.035f, 0.0f, 0.1f, 0.00001f
883 , 0.001f, 0.0f, 0.05f, 0.00001f
884 , 0.7f, 0.0f, 1.0f, 0.01f
885 , 9000.0f, 1.0f, 15000.0f, 1.0f
886 , 2.0f, 0.0f, 4.0f, 1.0f
887 , 2.0f, 0.0f, 4.0f, 1.0f
888 , 0.25f, 0.0f, 2.0f, 0.001f
889 , 0.25f, 0.0f, 2.0f, 0.001f
899 12.0f, 9.0f, 12.0f, 1.0f
900 , 1.0f, 1.0f, 20.0f, 1.0f
901 , 1.0f, 1.0f, 10.0f, 1.0f
902 , 250.0f, 100.0f, 2000.0f, 50.0f
903 , 0.003f, 0.0f, 0.01f, 0.00001f
904 , 0.001f, 0.0f, 0.05f, 0.00001f
905 , 0.7f, 0.0f, 1.0f, 0.01f
906 , 120.0f, 1.0f, 300.0f, 1.0f
907 , 2.0f, 0.0f, 4.0f, 1.0f
908 , 2.0f, 0.0f, 4.0f, 1.0f
909 , 0.25f, 0.0f, 2.0f, 0.001f
910 , 0.25f, 0.0f, 2.0f, 0.001f
916 12.0f, 9.0f, 12.0f, 1.0f
917 , 1.0f, 1.0f, 20.0f, 1.0f
918 , 1.0f, 1.0f, 99.0f, 1.0f
919 , 250.0f, 100.0f, 2000.0f, 50.0f
920 , 0.0035f, 0.0f, 0.01f, 0.00001f
921 , 0.001f, 0.0f, 0.05f, 0.00001f
922 , 0.7f, 0.0f, 1.0f, 0.01f
923 , 120.0f, 1.0f, 300.0f, 1.0f
924 , 2.0f, 0.0f, 8.0f, 1.0f
925 , 2.0f, 0.0f, 8.0f, 1.0f
926 , 1.0f, 0.0f, 3.0f, 0.001f
927 , 1.0f, 0.0f, 3.0f, 0.001f
933 12.0f, 9.0f, 12.0f, 1.0f
934 , 1.0f, 1.0f, 20.0f, 1.0f
935 , 1.0f, 1.0f, 99.0f, 1.0f
936 , 250.0f, 100.0f, 2000.0f, 50.0f
937 , 0.0035f, 0.0f, 0.01f, 0.00001f
938 , 0.001f, 0.0f, 0.05f, 0.00001f
939 , 0.7f, 0.0f, 1.0f, 0.01f
940 , 120.0f, 1.0f, 300.0f, 1.0f
941 , 2.0f, 0.0f, 8.0f, 1.0f
942 , 2.0f, 0.0f, 8.0f, 1.0f
943 , 1.0f, 0.0f, 3.0f, 0.001f
944 , 1.0f, 0.0f, 3.0f, 0.001f
950 12.0f, 9.0f, 12.0f, 1.0f
951 , 1.0f, 1.0f, 20.0f, 1.0f
952 , 1.0f, 1.0f, 10.0f, 1.0f
953 , 250.0f, 100.0f, 2000.0f, 50.0f
954 , 0.006f, 0.0f, 0.1f, 0.00001f
955 , 0.001f, 0.0f, 0.05f, 0.00001f
956 , 0.02f, 0.0f, 0.1f, 0.00001f
957 , 400.0f, 1.0f, 900.0f, 1.0f
958 , 2.0f, 0.0f, 4.0f, 1.0f
959 , 2.0f, 0.0f, 4.0f, 1.0f
960 , 0.25f, 0.0f, 2.0f, 0.001f
961 , 0.25f, 0.0f, 2.0f, 0.001f
967 12.0f, 9.0f, 12.0f, 1.0f
968 , 1.0f, 1.0f, 20.0f, 1.0f
969 , 1.0f, 1.0f, 10.0f, 0.01f
970 , 250.0f, 100.0f, 2000.0f, 50.0f
971 , 0.007f, 0.0f, 0.01f, 0.00001f
972 , 0.001f, 0.0f, 0.05f, 0.00001f
973 , 0.7f, 0.0f, 1.0f, 0.01f
974 , 8000.0f, 1.0f, 15000.0f, 1.0f
975 , 2.0f, 0.0f, 4.0f, 1.0f
976 , 2.0f, 0.0f, 4.0f, 1.0f
977 , 0.25f, 0.0f, 2.0f, 0.001f
978 , 0.25f, 0.0f, 2.0f, 0.001f
992 11.0f, 7.0f, 12.0f, 1.0f
993 , 1.0f, 1.0f, 20.0f, 1.0f
994 , 1.0f, 1.0f, 10.0f, 1.0f
995 , 550.0f, 100.0f, 2000.0f, 50.0f
996 , 0.0012f, 0.0f, 0.01f, 0.00001f
997 , 0.001f, 0.0f, 0.04f, 0.00001f
998 , 0.7f, 0.0f, 1.0f, 0.01f
999 , 200.0f, 1.0f, 400.0f, 1.0f
1000 , 2.0f, 0.0f, 4.0f, 1.0f
1001 , 2.0f, 0.0f, 4.0f, 1.0f
1002 , 0.2f, 0.0f, 1.0f, 0.01f
1003 , 0.2f, 0.0f, 1.0f, 0.01f
1009 11.0f, 7.0f, 12.0f, 1.0f
1010 , 1.0f, 1.0f, 20.0f, 1.0f
1011 , 1.0f, 1.0f, 99.0f, 1.0f
1012 , 550.0f, 100.0f, 2000.0f, 50.0f
1013 , 0.0012f, 0.0f, 0.01f, 0.00001f
1014 , 0.001f, 0.0f, 0.04f, 0.00001f
1015 , 0.7f, 0.0f, 1.0f, 0.01f
1016 , 200.0f, 1.0f, 400.0f, 1.0f
1017 , 2.0f, 0.0f, 8.0f, 1.0f
1018 , 2.0f, 0.0f, 8.0f, 1.0f
1019 , 1.0f, 0.0f, 3.0f, 0.01f
1020 , 1.0f, 0.0f, 3.0f, 0.01f
1026 11.0f, 7.0f, 12.0f, 1.0f
1027 , 1.0f, 1.0f, 20.0f, 1.0f
1028 , 1.0f, 1.0f, 99.0f, 1.0f
1029 , 550.0f, 100.0f, 2000.0f, 50.0f
1030 , 0.0012f, 0.0f, 0.01f, 0.00001f
1031 , 0.001f, 0.0f, 0.04f, 0.00001f
1032 , 0.7f, 0.0f, 1.0f, 0.01f
1033 , 200.0f, 1.0f, 400.0f, 1.0f
1034 , 2.0f, 0.0f, 8.0f, 1.0f
1035 , 2.0f, 0.0f, 8.0f, 1.0f
1036 , 1.0f, 0.0f, 3.0f, 0.01f
1037 , 1.0f, 0.0f, 3.0f, 0.01f
1043 11.0f, 7.0f, 12.0f, 1.0f
1044 , 1.0f, 1.0f, 20.0f, 1.0f
1045 , 1.0f, 1.0f, 10.0f, 1.0f
1046 , 550.0f, 100.0f, 2000.0f, 50.0f
1047 , 0.004f, 0.0f, 0.01f, 0.00001f
1048 , 0.001f, 0.0f, 0.04f, 0.00001f
1049 , 0.02f, 0.0f, 0.04f, 0.00001f
1050 , 2500.0f, 1.0f, 5000.0f, 1.0f
1051 , 2.0f, 0.0f, 4.0f, 1.0f
1052 , 2.0f, 0.0f, 4.0f, 1.0f
1053 , 0.2f, 0.0f, 1.0f, 0.01f
1054 , 0.2f, 0.0f, 1.0f, 0.01f
1060 11.0f, 7.0f, 12.0f, 1.0f
1061 , 1.0f, 1.0f, 20.0f, 1.0f
1062 , 1.0f, 1.0f, 10.0f, 0.01f
1063 , 550.0f, 100.0f, 2000.0f, 50.0f
1064 , 0.004f, 0.0f, 0.01f, 0.00001f
1065 , 0.001f, 0.0f, 0.04f, 0.00001f
1066 , 0.7f, 0.0f, 1.0f, 0.01f
1067 , 9500.0f, 1.0f, 15000.0f, 1.0f
1068 , 2.0f, 0.0f, 4.0f, 1.0f
1069 , 2.0f, 0.0f, 4.0f, 1.0f
1070 , 0.2f, 0.0f, 1.0f, 0.01f
1071 , 0.2f, 0.0f, 1.0f, 0.01f
1081 11.0f, 7.0f, 12.0f, 1.0f
1082 , 1.0f, 1.0f, 20.0f, 1.0f
1083 , 1.0f, 1.0f, 10.0f, 1.0f
1084 , 550.0f, 100.0f, 2000.0f, 50.0f
1085 , 0.0012f, 0.0f, 0.01f, 0.00001f
1086 , 0.001f, 0.0f, 0.04f, 0.00001f
1087 , 0.7f, 0.0f, 1.0f, 0.01f
1088 , 500.0f, 1.0f, 1000.0f, 1.0f
1089 , 2.0f, 0.0f, 4.0f, 1.0f
1090 , 2.0f, 0.0f, 4.0f, 1.0f
1091 , 0.2f, 0.0f, 1.0f, 0.01f
1092 , 0.2f, 0.0f, 1.0f, 0.01f
1098 11.0f, 7.0f, 12.0f, 1.0f
1099 , 1.0f, 1.0f, 20.0f, 1.0f
1100 , 1.0f, 1.0f, 99.0f, 1.0f
1101 , 550.0f, 100.0f, 2000.0f, 50.0f
1102 , 0.0012f, 0.0f, 0.01f, 0.00001f
1103 , 0.001f, 0.0f, 0.04f, 0.00001f
1104 , 0.7f, 0.0f, 1.0f, 0.01f
1105 , 200.0f, 1.0f, 400.0f, 1.0f
1106 , 2.0f, 0.0f, 8.0f, 1.0f
1107 , 2.0f, 0.0f, 8.0f, 1.0f
1108 , 1.0f, 0.0f, 3.0f, 0.01f
1109 , 1.0f, 0.0f, 3.0f, 0.01f
1115 11.0f, 7.0f, 12.0f, 1.0f
1116 , 1.0f, 1.0f, 20.0f, 1.0f
1117 , 1.0f, 1.0f, 99.0f, 1.0f
1118 , 550.0f, 100.0f, 2000.0f, 50.0f
1119 , 0.0012f, 0.0f, 0.01f, 0.00001f
1120 , 0.001f, 0.0f, 0.04f, 0.00001f
1121 , 0.7f, 0.0f, 1.0f, 0.01f
1122 , 200.0f, 1.0f, 400.0f, 1.0f
1123 , 2.0f, 0.0f, 8.0f, 1.0f
1124 , 2.0f, 0.0f, 8.0f, 1.0f
1125 , 1.0f, 0.0f, 3.0f, 0.01f
1126 , 1.0f, 0.0f, 3.0f, 0.01f
1132 11.0f, 7.0f, 12.0f, 1.0f
1133 , 1.0f, 1.0f, 20.0f, 1.0f
1134 , 1.0f, 1.0f, 10.0f, 1.0f
1135 , 550.0f, 100.0f, 2000.0f, 50.0f
1136 , 0.004f, 0.0f, 0.01f, 0.00001f
1137 , 0.001f, 0.0f, 0.04f, 0.00001f
1138 , 0.02f, 0.0f, 0.04f, 0.00001f
1139 , 2500.0f, 1.0f, 5000.0f, 1.0f
1140 , 2.0f, 0.0f, 4.0f, 1.0f
1141 , 2.0f, 0.0f, 4.0f, 1.0f
1142 , 0.2f, 0.0f, 1.0f, 0.01f
1143 , 0.2f, 0.0f, 1.0f, 0.01f
1149 11.0f, 7.0f, 12.0f, 1.0f
1150 , 1.0f, 1.0f, 20.0f, 1.0f
1151 , 1.0f, 1.0f, 10.0f, 0.01f
1152 , 550.0f, 100.0f, 2000.0f, 50.0f
1153 , 0.004f, 0.0f, 0.01f, 0.00001f
1154 , 0.001f, 0.0f, 0.04f, 0.00001f
1155 , 0.7f, 0.0f, 1.0f, 0.01f
1156 , 9500.0f, 1.0f, 15000.0f, 1.0f
1157 , 2.0f, 0.0f, 4.0f, 1.0f
1158 , 2.0f, 0.0f, 4.0f, 1.0f
1159 , 0.2f, 0.0f, 1.0f, 0.01f
1160 , 0.2f, 0.0f, 1.0f, 0.01f
1170 bx::memCopy(sm_settings_, smSettings,
sizeof(smSettings));
1240 if(!l.casts_shadows)
1246 bool recreateTextures =
false;
1247 recreateTextures |= !valid_;
1265 auto last_settings = settings_;
1268 settings_.
m_smImpl = convert(l.shadow_params.type);
1269 settings_.
m_depthImpl = convert(l.shadow_params.depth);
1281 settings_.
m_stencilPack = l.point_shadow_params.stencil_pack;
1282 settings_.
m_fovXAdjust = l.point_shadow_params.fov_x_adjust;
1283 settings_.
m_fovYAdjust = l.point_shadow_params.fov_y_adjust;
1288 settings_.
m_numSplits = l.directional_shadow_params.num_splits;
1289 settings_.
m_stabilize = l.directional_shadow_params.stabilize;
1294#define SET_CLAMPED_VAL(x, val) x = val
1299 SET_CLAMPED_VAL(currentSmSettings->m_sizePwrTwo, convert(l.shadow_params.resolution));
1300 SET_CLAMPED_VAL(currentSmSettings->m_near, l.shadow_params.near_plane);
1302 SET_CLAMPED_VAL(currentSmSettings->m_normalOffset, l.shadow_params.normal_bias);
1331 uint16_t shadowMapSize = 1 << uint32_t(currentSmSettings->m_sizePwrTwo);
1332 recreateTextures |= current_shadow_map_size_ != shadowMapSize;
1333 recreateTextures |= last_settings.m_smImpl != settings_.
m_smImpl;
1334 recreateTextures |= last_settings.m_numSplits != settings_.
m_numSplits;
1335 recreateTextures |= last_settings.m_lightType != settings_.
m_lightType;
1337 if(recreateTextures)
1339 current_shadow_map_size_ = shadowMapSize;
1341 if(bgfx::isValid(rt_shadow_map_[0]))
1343 bgfx::destroy(rt_shadow_map_[0]);
1344 rt_shadow_map_[0] = {bgfx::kInvalidHandle};
1348 bgfx::TextureHandle fbtextures[] = {
1349 bgfx::createTexture2D(current_shadow_map_size_,
1350 current_shadow_map_size_,
1353 bgfx::TextureFormat::BGRA8,
1355 bgfx::createTexture2D(current_shadow_map_size_,
1356 current_shadow_map_size_,
1359 bgfx::TextureFormat::D24S8,
1362 rt_shadow_map_[0] = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures,
true);
1369 if(bgfx::isValid(rt_shadow_map_[ii]))
1371 bgfx::destroy(rt_shadow_map_[ii]);
1372 rt_shadow_map_[ii] = {bgfx::kInvalidHandle};
1377 bgfx::TextureHandle fbtextures[] = {
1378 bgfx::createTexture2D(current_shadow_map_size_,
1379 current_shadow_map_size_,
1382 bgfx::TextureFormat::BGRA8,
1384 bgfx::createTexture2D(current_shadow_map_size_,
1385 current_shadow_map_size_,
1388 bgfx::TextureFormat::D24S8,
1391 rt_shadow_map_[ii] = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures,
true);
1396 if(bgfx::isValid(rt_blur_))
1398 bgfx::destroy(rt_blur_);
1399 rt_blur_ = {bgfx::kInvalidHandle};
1405 if(bVsmOrEsm && currentSmSettings->
m_doBlur)
1407 rt_blur_ = bgfx::createFrameBuffer(current_shadow_map_size_, current_shadow_map_size_, bgfx::TextureFormat::BGRA8);
1411 float currentShadowMapSizef = float(int16_t(current_shadow_map_size_));
1421 uniforms_.
m_XNum = currentSmSettings->m_xNum;
1422 uniforms_.
m_YNum = currentSmSettings->m_yNum;
1423 uniforms_.
m_XOffset = currentSmSettings->m_xOffset;
1424 uniforms_.
m_YOffset = currentSmSettings->m_yOffset;
1433 auto& lightView = light_view_;
1434 auto& lightProj = light_proj_;
1435 auto& lightFrustums = light_frustums_;
1442 const float aspect = 1.0f;
1446 currentSmSettings->m_near,
1447 currentSmSettings->m_far,
1457 const bx::Vec3 at = bx::add(bx::load<bx::Vec3>(point_light_.
m_position.
m_v),
1464 {bx::toRad(0.0f), bx::toRad(27.36780516f), bx::toRad(0.0f)},
1465 {bx::toRad(180.0f), bx::toRad(27.36780516f), bx::toRad(0.0f)},
1466 {bx::toRad(-90.0f), bx::toRad(-27.36780516f), bx::toRad(0.0f)},
1467 {bx::toRad(90.0f), bx::toRad(-27.36780516f), bx::toRad(0.0f)},
1472 const float fovx = 143.98570868f + 3.51f + settings_.
m_fovXAdjust;
1473 const float fovy = 125.26438968f + 9.85f + settings_.
m_fovYAdjust;
1474 const float aspect = bx::tan(bx::toRad(fovx * 0.5f)) / bx::tan(bx::toRad(fovy * 0.5f));
1479 currentSmSettings->m_near,
1480 currentSmSettings->m_far,
1496 const float fovx = 143.98570868f + 7.8f + settings_.
m_fovXAdjust;
1497 const float fovy = 125.26438968f + 3.0f + settings_.
m_fovYAdjust;
1498 const float aspect = bx::tan(bx::toRad(fovx * 0.5f)) / bx::tan(bx::toRad(fovy * 0.5f));
1503 currentSmSettings->m_near,
1504 currentSmSettings->m_far,
1517 mtxYawPitchRoll(mtxTmp, ypr[ii][0], ypr[ii][1], ypr[ii][2]);
1520 -bx::dot(bx::load<bx::Vec3>(point_light_.
m_position.
m_v), bx::load<bx::Vec3>(&mtxTmp[0])),
1521 -bx::dot(bx::load<bx::Vec3>(point_light_.
m_position.
m_v), bx::load<bx::Vec3>(&mtxTmp[4])),
1522 -bx::dot(bx::load<bx::Vec3>(point_light_.
m_position.
m_v), bx::load<bx::Vec3>(&mtxTmp[8])),
1525 bx::mtxTranspose(mtxYpr[ii], mtxTmp);
1527 bx::memCopy(lightView[ii], mtxYpr[ii], 12 *
sizeof(
float));
1528 lightView[ii][12] = tmp[0];
1529 lightView[ii][13] = tmp[1];
1530 lightView[ii][14] = tmp[2];
1531 lightView[ii][15] = 1.0f;
1539 const float camera_pos_x = camera_pos.x;
1540 const float camera_pos_y = camera_pos.y;
1541 const float camera_pos_z = camera_pos.z;
1544 const bx::Vec3 eye = {
1552 const bx::Vec3 at = {camera_pos_x, camera_pos_y, camera_pos_z};
1553 bx::mtxLookAt(lightView[0], eye, at);
1556 const uint8_t maxNumSplits = 4;
1557 BX_ASSERT(maxNumSplits >= settings_.
m_numSplits,
"Error! Max num splits.");
1561 std::array<float, maxNumSplits * 2> splitSlices;
1562 splitFrustum(splitSlices.data(),
1564 currentSmSettings->m_near,
1565 currentSmSettings->m_far,
1571 bx::mtxOrtho(mtxProj,
1576 -currentSmSettings->m_far,
1577 currentSmSettings->m_far,
1582 for(uint8_t ii = 0, ff = 1; ii < settings_.
m_numSplits; ++ii, ff += 2)
1592 const uint8_t numCorners = 8;
1593 float frustumCorners[maxNumSplits][numCorners][3];
1594 for(uint8_t ii = 0, nn = 0, ff = 1; ii < settings_.
m_numSplits; ++ii, nn += 2, ff += 2)
1596 bx::Vec3 min = {9000.0f, 9000.0f, 9000.0f};
1597 bx::Vec3 max = {-9000.0f, -9000.0f, -9000.0f};
1599 float frustum_radius = 0.0f;
1603 const float camFovy = cam.
get_fov();
1605 const float projHeight = bx::tan(bx::toRad(camFovy) * 0.5f);
1606 const float projWidth = projHeight * camAspect;
1610 compute_world_space_frustum_corners((
float*)frustumCorners[ii],
1620 bx::Vec3 frustumCenter = {0.0f, 0.0f, 0.0f};
1621 for(uint8_t jj = 0; jj < numCorners; ++jj)
1623 frustumCenter.x += frustumCorners[ii][jj][0];
1624 frustumCenter.y += frustumCorners[ii][jj][1];
1625 frustumCenter.z += frustumCorners[ii][jj][2];
1629 frustumCenter.x /= numCorners;
1630 frustumCenter.y /= numCorners;
1631 frustumCenter.z /= numCorners;
1634 const bx::Vec3 lightSpaceCenter = bx::mul(frustumCenter, lightView[0]);
1637 for(uint8_t jj = 0; jj < numCorners; ++jj)
1640 const bx::Vec3 xyz = bx::mul(bx::load<bx::Vec3>(frustumCorners[ii][jj]), lightView[0]);
1643 const float dx = xyz.x - lightSpaceCenter.x;
1644 const float dy = xyz.y - lightSpaceCenter.y;
1645 const float dz = xyz.z - lightSpaceCenter.z;
1646 const float distance = bx::sqrt(dx*dx + dy*dy + dz*dz);
1647 frustum_radius = bx::max(frustum_radius,
distance);
1650 min = bx::min(min, xyz);
1651 max = bx::max(max, xyz);
1655 frustum_radius = bx::ceil(frustum_radius * 16.0f) / 16.0f;
1659 const bx::Vec3 minproj = bx::mulH(min, mtxProj);
1660 const bx::Vec3 maxproj = bx::mulH(max, mtxProj);
1666 float scalex_minmax = 2.0f / (maxproj.x - minproj.x);
1667 float scaley_minmax = 2.0f / (maxproj.y - minproj.y);
1670 float scalex_radius = 1.0f / frustum_radius;
1671 float scaley_radius = 1.0f / frustum_radius;
1674 float scalex = bx::lerp(scalex_minmax, scalex_radius, 0.7f);
1675 float scaley = bx::lerp(scaley_minmax, scaley_radius, 0.7f);
1680 const float quantizer = 128.0f;
1681 scalex = quantizer / bx::ceil(quantizer / scalex);
1682 scaley = quantizer / bx::ceil(quantizer / scaley);
1686 float offsetx = -1.0f - scalex * minproj.x;
1687 float offsety = -1.0f - scaley * minproj.y;
1692 float currentShadowMapSizef = float(int16_t(current_shadow_map_size_));
1693 const float halfSize = currentShadowMapSizef * 0.5f;
1696 float shadowOriginX = offsetx * halfSize;
1697 float shadowOriginY = offsety * halfSize;
1700 shadowOriginX = bx::round(shadowOriginX);
1701 shadowOriginY = bx::round(shadowOriginY);
1704 offsetx = shadowOriginX / halfSize;
1705 offsety = shadowOriginY / halfSize;
1709 bx::mtxIdentity(mtxCrop);
1710 mtxCrop[0] = scalex;
1711 mtxCrop[5] = scaley;
1712 mtxCrop[12] = offsetx;
1713 mtxCrop[13] = offsety;
1715 bx::mtxMul(lightProj[ii], mtxCrop, mtxProj);
1721 lightFrustums[0].update(math::make_mat4(lightView[0]),
1758 lightFrustums[0].update(math::make_mat4(lightView[0]), math::make_mat4(lightProj[0]), homogeneousDepth);
1759 lightFrustums[1].update(math::make_mat4(lightView[0]), math::make_mat4(lightProj[1]), homogeneousDepth);
1760 lightFrustums[2].update(math::make_mat4(lightView[0]), math::make_mat4(lightProj[2]), homogeneousDepth);
1761 lightFrustums[3].update(math::make_mat4(lightView[0]), math::make_mat4(lightProj[3]), homogeneousDepth);
1767 float mtxShadow[16];
1769 const float ymul = (originBottomLeft) ? 0.5f : -0.5f;
1773 const float mtxBias[16] =
1775 0.5f, 0.0f, 0.0f, 0.0f,
1776 0.0f, ymul, 0.0f, 0.0f,
1777 0.0f, 0.0f, 0.5f, 0.0f,
1778 0.5f, 0.5f, zadd, 1.0f,
1786 bx::mtxMul(mtxShadow, lightView[0], mtxTmp);
1790 const float s = (originBottomLeft) ? 1.0f : -1.0f;
1799 0.25f, 0.0f, 0.0f, 0.0f,
1800 0.0f, s*0.25f, 0.0f, 0.0f,
1801 0.0f, 0.0f, 0.5f, 0.0f,
1802 0.25f, 0.25f, zadd, 1.0f,
1805 0.25f, 0.0f, 0.0f, 0.0f,
1806 0.0f, s*0.25f, 0.0f, 0.0f,
1807 0.0f, 0.0f, 0.5f, 0.0f,
1808 0.75f, 0.25f, zadd, 1.0f,
1811 0.25f, 0.0f, 0.0f, 0.0f,
1812 0.0f, s*0.25f, 0.0f, 0.0f,
1813 0.0f, 0.0f, 0.5f, 0.0f,
1814 0.25f, 0.75f, zadd, 1.0f,
1817 0.25f, 0.0f, 0.0f, 0.0f,
1818 0.0f, s*0.25f, 0.0f, 0.0f,
1819 0.0f, 0.0f, 0.5f, 0.0f,
1820 0.75f, 0.75f, zadd, 1.0f,
1826 0.25f, 0.0f, 0.0f, 0.0f,
1827 0.0f, s*0.5f, 0.0f, 0.0f,
1828 0.0f, 0.0f, 0.5f, 0.0f,
1829 0.25f, 0.5f, zadd, 1.0f,
1832 0.25f, 0.0f, 0.0f, 0.0f,
1833 0.0f, s*0.5f, 0.0f, 0.0f,
1834 0.0f, 0.0f, 0.5f, 0.0f,
1835 0.75f, 0.5f, zadd, 1.0f,
1838 0.5f, 0.0f, 0.0f, 0.0f,
1839 0.0f, s*0.25f, 0.0f, 0.0f,
1840 0.0f, 0.0f, 0.5f, 0.0f,
1841 0.5f, 0.75f, zadd, 1.0f,
1844 0.5f, 0.0f, 0.0f, 0.0f,
1845 0.0f, s*0.25f, 0.0f, 0.0f,
1846 0.0f, 0.0f, 0.5f, 0.0f,
1847 0.5f, 0.25f, zadd, 1.0f,
1855 static const uint8_t cropBiasIndices[2][2][4] =
1871 uint8_t biasIndex = cropBiasIndices[settings_.
m_stencilPack][uint8_t(originBottomLeft)][ii];
1874 bx::mtxMul(mtxTmp, mtxYpr[ii], lightProj[projType]);
1875 bx::mtxMul(shadow_map_mtx_[ii],
1880 bx::mtxTranslate(mtxShadow
1888 for(uint8_t ii = 0; ii < settings_.
m_numSplits; ++ii)
1892 bx::mtxMul(mtxTmp, lightProj[ii], mtxBias);
1893 bx::mtxMul(shadow_map_mtx_[ii], lightView[0], mtxTmp);
1900 bx::mtxIdentity(tmp);
1902 bx::mtxMul(light_mtx_, tmp, mtxShadow);
1909 auto& lightView = light_view_;
1910 auto& lightProj = light_proj_;
1911 auto& lightFrustums = light_frustums_;
1916 float screenProj[16];
1917 float screenView[16];
1918 bx::mtxIdentity(screenView);
1920 bx::mtxOrtho(screenProj, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f, 0.0f, homogeneousDepth);
1937 auto RENDERVIEW_SHADOWMAP_0_ID = shadowmap_pass_0.
id;
1938 auto RENDERVIEW_SHADOWMAP_1_ID = shadowmap_pass_1.
id;
1939 auto RENDERVIEW_SHADOWMAP_2_ID = shadowmap_pass_2.
id;
1940 auto RENDERVIEW_SHADOWMAP_3_ID = shadowmap_pass_3.
id;
1941 auto RENDERVIEW_SHADOWMAP_4_ID = shadowmap_pass_4.
id;
1942 auto RENDERVIEW_VBLUR_0_ID = shadowmap_vblur_pass_0.
id;
1943 auto RENDERVIEW_HBLUR_0_ID = shadowmap_hblur_pass_0.
id;
1944 auto RENDERVIEW_VBLUR_1_ID = shadowmap_vblur_pass_1.
id;
1945 auto RENDERVIEW_HBLUR_1_ID = shadowmap_hblur_pass_1.
id;
1946 auto RENDERVIEW_VBLUR_2_ID = shadowmap_vblur_pass_2.
id;
1947 auto RENDERVIEW_HBLUR_2_ID = shadowmap_hblur_pass_2.
id;
1948 auto RENDERVIEW_VBLUR_3_ID = shadowmap_vblur_pass_3.
id;
1949 auto RENDERVIEW_HBLUR_3_ID = shadowmap_hblur_pass_3.
id;
1960 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_0_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
1961 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_1_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
1962 bgfx::setViewRect(RENDERVIEW_VBLUR_0_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
1963 bgfx::setViewRect(RENDERVIEW_HBLUR_0_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
1965 bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_0_ID, screenView, screenProj);
1966 bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_1_ID, lightView[0], lightProj[
ProjType::Horizontal]);
1967 bgfx::setViewTransform(RENDERVIEW_VBLUR_0_ID, screenView, screenProj);
1968 bgfx::setViewTransform(RENDERVIEW_HBLUR_0_ID, screenView, screenProj);
1970 bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_0_ID, rt_shadow_map_[0]);
1971 bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_1_ID, rt_shadow_map_[0]);
1972 bgfx::setViewFrameBuffer(RENDERVIEW_VBLUR_0_ID, rt_blur_);
1973 bgfx::setViewFrameBuffer(RENDERVIEW_HBLUR_0_ID, rt_shadow_map_[0]);
1987 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_0_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
1990 const uint16_t f = current_shadow_map_size_;
1991 const uint16_t h = current_shadow_map_size_ / 2;
1992 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_1_ID, 0, 0, f, h);
1993 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_2_ID, 0, h, f, h);
1994 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_3_ID, 0, 0, h, f);
1995 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_4_ID, h, 0, h, f);
1999 const uint16_t h = current_shadow_map_size_ / 2;
2000 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_1_ID, 0, 0, h, h);
2001 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_2_ID, h, 0, h, h);
2002 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_3_ID, 0, h, h, h);
2003 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_4_ID, h, h, h, h);
2005 bgfx::setViewRect(RENDERVIEW_VBLUR_0_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2006 bgfx::setViewRect(RENDERVIEW_HBLUR_0_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2008 bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_0_ID, screenView, screenProj);
2009 bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_1_ID,
2013 bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_2_ID,
2019 bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_3_ID,
2023 bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_4_ID,
2029 bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_3_ID,
2033 bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_4_ID,
2037 bgfx::setViewTransform(RENDERVIEW_VBLUR_0_ID, screenView, screenProj);
2038 bgfx::setViewTransform(RENDERVIEW_HBLUR_0_ID, screenView, screenProj);
2040 bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_0_ID, rt_shadow_map_[0]);
2041 bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_1_ID, rt_shadow_map_[0]);
2042 bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_2_ID, rt_shadow_map_[0]);
2043 bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_3_ID, rt_shadow_map_[0]);
2044 bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_4_ID, rt_shadow_map_[0]);
2045 bgfx::setViewFrameBuffer(RENDERVIEW_VBLUR_0_ID, rt_blur_);
2046 bgfx::setViewFrameBuffer(RENDERVIEW_HBLUR_0_ID, rt_shadow_map_[0]);
2065 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_1_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2066 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_2_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2067 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_3_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2068 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_4_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2069 bgfx::setViewRect(RENDERVIEW_VBLUR_0_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2070 bgfx::setViewRect(RENDERVIEW_HBLUR_0_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2071 bgfx::setViewRect(RENDERVIEW_VBLUR_1_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2072 bgfx::setViewRect(RENDERVIEW_HBLUR_1_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2073 bgfx::setViewRect(RENDERVIEW_VBLUR_2_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2074 bgfx::setViewRect(RENDERVIEW_HBLUR_2_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2075 bgfx::setViewRect(RENDERVIEW_VBLUR_3_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2076 bgfx::setViewRect(RENDERVIEW_HBLUR_3_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2078 bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_1_ID, lightView[0], lightProj[0]);
2079 bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_2_ID, lightView[0], lightProj[1]);
2080 bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_3_ID, lightView[0], lightProj[2]);
2081 bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_4_ID, lightView[0], lightProj[3]);
2083 bgfx::setViewTransform(RENDERVIEW_VBLUR_0_ID, screenView, screenProj);
2084 bgfx::setViewTransform(RENDERVIEW_HBLUR_0_ID, screenView, screenProj);
2085 bgfx::setViewTransform(RENDERVIEW_VBLUR_1_ID, screenView, screenProj);
2086 bgfx::setViewTransform(RENDERVIEW_HBLUR_1_ID, screenView, screenProj);
2087 bgfx::setViewTransform(RENDERVIEW_VBLUR_2_ID, screenView, screenProj);
2088 bgfx::setViewTransform(RENDERVIEW_HBLUR_2_ID, screenView, screenProj);
2089 bgfx::setViewTransform(RENDERVIEW_VBLUR_3_ID, screenView, screenProj);
2090 bgfx::setViewTransform(RENDERVIEW_HBLUR_3_ID, screenView, screenProj);
2092 bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_1_ID, rt_shadow_map_[0]);
2093 bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_2_ID, rt_shadow_map_[1]);
2094 bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_3_ID, rt_shadow_map_[2]);
2095 bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_4_ID, rt_shadow_map_[3]);
2096 bgfx::setViewFrameBuffer(RENDERVIEW_VBLUR_0_ID, rt_blur_);
2097 bgfx::setViewFrameBuffer(RENDERVIEW_HBLUR_0_ID, rt_shadow_map_[0]);
2098 bgfx::setViewFrameBuffer(RENDERVIEW_VBLUR_1_ID, rt_blur_);
2099 bgfx::setViewFrameBuffer(RENDERVIEW_HBLUR_1_ID, rt_shadow_map_[1]);
2100 bgfx::setViewFrameBuffer(RENDERVIEW_VBLUR_2_ID, rt_blur_);
2101 bgfx::setViewFrameBuffer(RENDERVIEW_HBLUR_2_ID, rt_shadow_map_[2]);
2102 bgfx::setViewFrameBuffer(RENDERVIEW_VBLUR_3_ID, rt_blur_);
2103 bgfx::setViewFrameBuffer(RENDERVIEW_HBLUR_3_ID, rt_shadow_map_[3]);
2109 : BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH | BGFX_CLEAR_STENCIL;
2111 bgfx::setViewClear(RENDERVIEW_SHADOWMAP_0_ID,
2117 bgfx::touch(RENDERVIEW_SHADOWMAP_0_ID);
2119 const uint8_t flags1 =
2122 for(uint8_t ii = 0; ii < 4; ++ii)
2124 bgfx::setViewClear(RENDERVIEW_SHADOWMAP_1_ID + ii,
2130 bgfx::touch(RENDERVIEW_SHADOWMAP_1_ID + ii);
2140 bool anythingDrawn =
false;
2148 bgfx::TransientVertexBuffer vb;
2152 const float min = 0.0f;
2153 const float max = 1.0f;
2154 const float center = 0.5f;
2155 const float zz = 0.0f;
2157 vertex[0].
m_x = min;
2158 vertex[0].
m_y = min;
2161 vertex[1].
m_x = max;
2162 vertex[1].
m_y = min;
2173 vertex[4].
m_x = max;
2174 vertex[4].
m_y = max;
2177 vertex[5].
m_x = min;
2178 vertex[5].
m_y = max;
2182 bgfx::setStencil(BGFX_STENCIL_TEST_ALWAYS | BGFX_STENCIL_FUNC_REF(1) | BGFX_STENCIL_FUNC_RMASK(0xff) |
2183 BGFX_STENCIL_OP_FAIL_S_REPLACE | BGFX_STENCIL_OP_FAIL_Z_REPLACE |
2184 BGFX_STENCIL_OP_PASS_Z_REPLACE);
2185 bgfx::setVertexBuffer(0, &vb);
2188 bgfx::submit(RENDERVIEW_SHADOWMAP_0_ID, programs_.
m_black->native_handle());
2194 render_scene_into_shadowmap(RENDERVIEW_SHADOWMAP_1_ID, models, lightFrustums, currentSmSettings);
2203 if(bVsmOrEsm && currentSmSettings->
m_doBlur)
2205 bgfx::setTexture(4, shadow_map_[0], bgfx::getTexture(rt_shadow_map_[0]));
2206 bgfx::setState(BGFX_STATE_WRITE_RGB | BGFX_STATE_WRITE_A);
2207 screenSpaceQuad(originBottomLeft);
2208 programs_.
m_vBlur[depthType]->begin();
2209 bgfx::submit(RENDERVIEW_VBLUR_0_ID, programs_.
m_vBlur[depthType]->native_handle());
2210 programs_.
m_vBlur[depthType]->end();
2212 bgfx::setTexture(4, shadow_map_[0], bgfx::getTexture(rt_blur_));
2213 bgfx::setState(BGFX_STATE_WRITE_RGB | BGFX_STATE_WRITE_A);
2214 screenSpaceQuad(originBottomLeft);
2215 programs_.
m_hBlur[depthType]->begin();
2216 bgfx::submit(RENDERVIEW_HBLUR_0_ID, programs_.
m_hBlur[depthType]->native_handle());
2217 programs_.
m_hBlur[depthType]->end();
2221 for(uint8_t ii = 1, jj = 2; ii < settings_.
m_numSplits; ++ii, jj += 2)
2223 const uint8_t viewId = RENDERVIEW_VBLUR_0_ID + jj;
2225 bgfx::setTexture(4, shadow_map_[0], bgfx::getTexture(rt_shadow_map_[ii]));
2226 bgfx::setState(BGFX_STATE_WRITE_RGB | BGFX_STATE_WRITE_A);
2227 screenSpaceQuad(originBottomLeft);
2228 bgfx::submit(viewId, programs_.
m_vBlur[depthType]->native_handle());
2230 bgfx::setTexture(4, shadow_map_[0], bgfx::getTexture(rt_blur_));
2231 bgfx::setState(BGFX_STATE_WRITE_RGB | BGFX_STATE_WRITE_A);
2232 screenSpaceQuad(originBottomLeft);
2233 bgfx::submit(viewId + 1, programs_.
m_hBlur[depthType]->native_handle());