573 if(bgfx::isValid(tex_color_))
579 tex_color_ = bgfx::createUniform(
"s_texColor", bgfx::UniformType::Sampler);
580 shadow_map_[0] = bgfx::createUniform(
"s_shadowMap0", bgfx::UniformType::Sampler);
581 shadow_map_[1] = bgfx::createUniform(
"s_shadowMap1", bgfx::UniformType::Sampler);
582 shadow_map_[2] = bgfx::createUniform(
"s_shadowMap2", bgfx::UniformType::Sampler);
583 shadow_map_[3] = bgfx::createUniform(
"s_shadowMap3", bgfx::UniformType::Sampler);
587 rt_shadow_map_[i] = {bgfx::kInvalidHandle};
597 { { 0.0f, 0.0f, 0.0f, 1.0f } },
598 { { 0.0f,-0.4f,-0.6f, 0.0f } },
603 { { 0.5f,-1.0f, 0.1f, 0.0f } },
604 { { 0.0f, 0.0f, 0.0f, 1.0f } },
610 color_[0] = color_[1] = color_[2] = color_[3] = 1.0f;
611 uniforms_.
setPtrs(&point_light_,
629 10.0f, 7.0f, 12.0f, 1.0f
630 , 10.0f, 1.0f, 20.0f, 1.0f
631 , 1.0f, 1.0f, 10.0f, 1.0f
632 , 250.0f, 100.0f, 2000.0f, 50.0f
633 , 0.0035f, 0.0f, 0.01f, 0.00001f
634 , 0.0012f, 0.0f, 0.05f, 0.00001f
635 , 0.7f, 0.0f, 1.0f, 0.01f
636 , 500.0f, 1.0f, 1000.0f, 1.0f
637 , 2.0f, 0.0f, 4.0f, 1.0f
638 , 2.0f, 0.0f, 4.0f, 1.0f
639 , 1.0f, 0.0f, 3.0f, 0.01f
640 , 1.0f, 0.0f, 3.0f, 0.01f
647 10.0f, 7.0f, 12.0f, 1.0f
648 , 10.0f, 1.0f, 20.0f, 1.0f
649 , 1.0f, 1.0f, 99.0f, 1.0f
650 , 250.0f, 100.0f, 2000.0f, 50.0f
651 , 0.007f, 0.0f, 0.01f, 0.00001f
652 , 0.001f, 0.0f, 0.05f, 0.00001f
653 , 0.7f, 0.0f, 1.0f, 0.01f
654 , 500.0f, 1.0f, 1000.0f, 1.0f
655 , 2.0f, 0.0f, 8.0f, 1.0f
656 , 2.0f, 0.0f, 8.0f, 1.0f
657 , 1.0f, 0.0f, 3.0f, 0.01f
658 , 1.0f, 0.0f, 3.0f, 0.01f
665 10.0f, 7.0f, 12.0f, 1.0f
666 , 10.0f, 1.0f, 20.0f, 1.0f
667 , 1.0f, 1.0f, 99.0f, 1.0f
668 , 250.0f, 100.0f, 2000.0f, 50.0f
669 , 0.007f, 0.0f, 0.01f, 0.00001f
670 , 0.001f, 0.0f, 0.05f, 0.00001f
671 , 0.7f, 0.0f, 1.0f, 0.01f
672 , 500.0f, 1.0f, 1000.0f, 1.0f
673 , 2.0f, 0.0f, 8.0f, 1.0f
674 , 2.0f, 0.0f, 8.0f, 1.0f
675 , 1.0f, 0.0f, 3.0f, 0.01f
676 , 1.0f, 0.0f, 3.0f, 0.01f
683 10.0f, 7.0f, 12.0f, 1.0f
684 , 10.0f, 1.0f, 20.0f, 1.0f
685 , 8.0f, 1.0f, 10.0f, 1.0f
686 , 250.0f, 100.0f, 2000.0f, 50.0f
687 , 0.045f, 0.0f, 0.1f, 0.00001f
688 , 0.001f, 0.0f, 0.05f, 0.00001f
689 , 0.02f, 0.0f, 0.04f, 0.00001f
690 , 450.0f, 1.0f, 1000.0f, 1.0f
691 , 2.0f, 0.0f, 4.0f, 1.0f
692 , 2.0f, 0.0f, 4.0f, 1.0f
693 , 1.0f, 0.0f, 3.0f, 0.01f
694 , 1.0f, 0.0f, 3.0f, 0.01f
701 10.0f, 7.0f, 12.0f, 1.0f
702 , 10.0f, 1.0f, 20.0f, 1.0f
703 , 3.0f, 1.0f, 10.0f, 0.01f
704 , 250.0f, 100.0f, 2000.0f, 50.0f
705 , 0.02f, 0.0f, 0.3f, 0.00001f
706 , 0.001f, 0.0f, 0.05f, 0.00001f
707 , 0.7f, 0.0f, 1.0f, 0.01f
708 , 9000.0f, 1.0f, 15000.0f, 1.0f
709 , 2.0f, 0.0f, 4.0f, 1.0f
710 , 2.0f, 0.0f, 4.0f, 1.0f
711 , 1.0f, 0.0f, 3.0f, 0.01f
712 , 1.0f, 0.0f, 3.0f, 0.01f
723 10.0f, 7.0f, 12.0f, 1.0f
724 , 1.0f, 1.0f, 20.0f, 1.0f
725 , 1.0f, 1.0f, 10.0f, 1.0f
726 , 250.0f, 100.0f, 2000.0f, 50.0f
727 , 0.0025f, 0.0f, 0.01f, 0.00001f
728 , 0.0012f, 0.0f, 0.05f, 0.00001f
729 , 0.7f, 0.0f, 1.0f, 0.01f
730 , 500.0f, 1.0f, 1000.0f, 1.0f
731 , 2.0f, 0.0f, 4.0f, 1.0f
732 , 2.0f, 0.0f, 4.0f, 1.0f
733 , 1.0f, 0.0f, 3.0f, 0.01f
734 , 1.0f, 0.0f, 3.0f, 0.01f
741 10.0f, 7.0f, 12.0f, 1.0f
742 , 1.0f, 1.0f, 20.0f, 1.0f
743 , 1.0f, 1.0f, 99.0f, 1.0f
744 , 250.0f, 100.0f, 2000.0f, 50.0f
745 , 0.0025f, 0.0f, 0.01f, 0.00001f
746 , 0.001f, 0.0f, 0.05f, 0.00001f
747 , 0.7f, 0.0f, 1.0f, 0.01f
748 , 2000.0f, 1.0f, 2000.0f, 1.0f
749 , 2.0f, 0.0f, 8.0f, 1.0f
750 , 2.0f, 0.0f, 8.0f, 1.0f
751 , 1.0f, 0.0f, 3.0f, 0.01f
752 , 1.0f, 0.0f, 3.0f, 0.01f
759 10.0f, 7.0f, 12.0f, 1.0f
760 , 1.0f, 1.0f, 20.0f, 1.0f
761 , 1.0f, 1.0f, 99.0f, 1.0f
762 , 250.0f, 100.0f, 2000.0f, 50.0f
763 , 0.0025f, 0.0f, 0.01f, 0.00001f
764 , 0.001f, 0.0f, 0.05f, 0.00001f
765 , 0.7f, 0.0f, 1.0f, 0.01f
766 , 2000.0f, 1.0f, 2000.0f, 1.0f
767 , 2.0f, 0.0f, 8.0f, 1.0f
768 , 2.0f, 0.0f, 8.0f, 1.0f
769 , 1.0f, 0.0f, 3.0f, 0.01f
770 , 1.0f, 0.0f, 3.0f, 0.01f
777 10.0f, 7.0f, 12.0f, 1.0f
778 , 1.0f, 1.0f, 20.0f, 1.0f
779 , 1.0f, 1.0f, 10.0f, 1.0f
780 , 250.0f, 100.0f, 2000.0f, 50.0f
781 , 0.006f, 0.0f, 0.01f, 0.00001f
782 , 0.001f, 0.0f, 0.05f, 0.00001f
783 , 0.02f, 0.0f, 0.1f, 0.00001f
784 , 300.0f, 1.0f, 1500.0f, 1.0f
785 , 2.0f, 0.0f, 4.0f, 1.0f
786 , 2.0f, 0.0f, 4.0f, 1.0f
787 , 1.0f, 0.0f, 3.0f, 0.01f
788 , 1.0f, 0.0f, 3.0f, 0.01f
795 10.0f, 7.0f, 12.0f, 1.0f
796 , 1.0f, 1.0f, 20.0f, 1.0f
797 , 1.0f, 1.0f, 10.0f, 0.01f
798 , 250.0f, 100.0f, 2000.0f, 50.0f
799 , 0.0055f, 0.0f, 0.01f, 0.00001f
800 , 0.001f, 0.0f, 0.05f, 0.00001f
801 , 0.7f, 0.0f, 1.0f, 0.01f
802 , 2500.0f, 1.0f, 5000.0f, 1.0f
803 , 2.0f, 0.0f, 4.0f, 1.0f
804 , 2.0f, 0.0f, 4.0f, 1.0f
805 , 1.0f, 0.0f, 3.0f, 0.01f
806 , 1.0f, 0.0f, 3.0f, 0.01f
821 12.0f, 9.0f, 12.0f, 1.0f
822 , 10.0f, 1.0f, 20.0f, 1.0f
823 , 1.0f, 1.0f, 10.0f, 1.0f
824 , 250.0f, 100.0f, 2000.0f, 50.0f
825 , 0.006f, 0.0f, 0.01f, 0.00001f
826 , 0.001f, 0.0f, 0.05f, 0.00001f
827 , 0.7f, 0.0f, 1.0f, 0.01f
828 , 50.0f, 1.0f, 300.0f, 1.0f
829 , 2.0f, 0.0f, 4.0f, 1.0f
830 , 2.0f, 0.0f, 4.0f, 1.0f
831 , 0.25f, 0.0f, 2.0f, 0.001f
832 , 0.25f, 0.0f, 2.0f, 0.001f
839 12.0f, 9.0f, 12.0f, 1.0f
840 , 10.0f, 1.0f, 20.0f, 1.0f
841 , 1.0f, 1.0f, 99.0f, 1.0f
842 , 250.0f, 100.0f, 2000.0f, 50.0f
843 , 0.004f, 0.0f, 0.01f, 0.00001f
844 , 0.001f, 0.0f, 0.05f, 0.00001f
845 , 0.7f, 0.0f, 1.0f, 0.01f
846 , 50.0f, 1.0f, 300.0f, 1.0f
847 , 2.0f, 0.0f, 8.0f, 1.0f
848 , 2.0f, 0.0f, 8.0f, 1.0f
849 , 1.0f, 0.0f, 3.0f, 0.001f
850 , 1.0f, 0.0f, 3.0f, 0.001f
857 12.0f, 9.0f, 12.0f, 1.0f
858 , 10.0f, 1.0f, 20.0f, 1.0f
859 , 1.0f, 1.0f, 99.0f, 1.0f
860 , 250.0f, 100.0f, 2000.0f, 50.0f
861 , 0.004f, 0.0f, 0.01f, 0.00001f
862 , 0.001f, 0.0f, 0.05f, 0.00001f
863 , 0.7f, 0.0f, 1.0f, 0.01f
864 , 50.0f, 1.0f, 300.0f, 1.0f
865 , 2.0f, 0.0f, 8.0f, 1.0f
866 , 2.0f, 0.0f, 8.0f, 1.0f
867 , 1.0f, 0.0f, 3.0f, 0.001f
868 , 1.0f, 0.0f, 3.0f, 0.001f
875 12.0f, 9.0f, 12.0f, 1.0f
876 , 10.0f, 1.0f, 20.0f, 1.0f
877 , 8.0f, 1.0f, 10.0f, 1.0f
878 , 250.0f, 100.0f, 2000.0f, 50.0f
879 , 0.055f, 0.0f, 0.1f, 0.00001f
880 , 0.001f, 0.0f, 0.05f, 0.00001f
881 , 0.02f, 0.0f, 0.04f, 0.00001f
882 , 450.0f, 1.0f, 900.0f, 1.0f
883 , 2.0f, 0.0f, 4.0f, 1.0f
884 , 2.0f, 0.0f, 4.0f, 1.0f
885 , 0.25f, 0.0f, 2.0f, 0.001f
886 , 0.25f, 0.0f, 2.0f, 0.001f
893 12.0f, 9.0f, 12.0f, 1.0f
894 , 10.0f, 1.0f, 20.0f, 1.0f
895 , 3.0f, 1.0f, 10.0f, 0.01f
896 , 250.0f, 100.0f, 2000.0f, 50.0f
897 , 0.035f, 0.0f, 0.1f, 0.00001f
898 , 0.001f, 0.0f, 0.05f, 0.00001f
899 , 0.7f, 0.0f, 1.0f, 0.01f
900 , 9000.0f, 1.0f, 15000.0f, 1.0f
901 , 2.0f, 0.0f, 4.0f, 1.0f
902 , 2.0f, 0.0f, 4.0f, 1.0f
903 , 0.25f, 0.0f, 2.0f, 0.001f
904 , 0.25f, 0.0f, 2.0f, 0.001f
915 12.0f, 9.0f, 12.0f, 1.0f
916 , 1.0f, 1.0f, 20.0f, 1.0f
917 , 1.0f, 1.0f, 10.0f, 1.0f
918 , 250.0f, 100.0f, 2000.0f, 50.0f
919 , 0.003f, 0.0f, 0.01f, 0.00001f
920 , 0.001f, 0.0f, 0.05f, 0.00001f
921 , 0.7f, 0.0f, 1.0f, 0.01f
922 , 120.0f, 1.0f, 300.0f, 1.0f
923 , 2.0f, 0.0f, 4.0f, 1.0f
924 , 2.0f, 0.0f, 4.0f, 1.0f
925 , 0.25f, 0.0f, 2.0f, 0.001f
926 , 0.25f, 0.0f, 2.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
951 12.0f, 9.0f, 12.0f, 1.0f
952 , 1.0f, 1.0f, 20.0f, 1.0f
953 , 1.0f, 1.0f, 99.0f, 1.0f
954 , 250.0f, 100.0f, 2000.0f, 50.0f
955 , 0.0035f, 0.0f, 0.01f, 0.00001f
956 , 0.001f, 0.0f, 0.05f, 0.00001f
957 , 0.7f, 0.0f, 1.0f, 0.01f
958 , 120.0f, 1.0f, 300.0f, 1.0f
959 , 2.0f, 0.0f, 8.0f, 1.0f
960 , 2.0f, 0.0f, 8.0f, 1.0f
961 , 1.0f, 0.0f, 3.0f, 0.001f
962 , 1.0f, 0.0f, 3.0f, 0.001f
969 12.0f, 9.0f, 12.0f, 1.0f
970 , 1.0f, 1.0f, 20.0f, 1.0f
971 , 1.0f, 1.0f, 10.0f, 1.0f
972 , 250.0f, 100.0f, 2000.0f, 50.0f
973 , 0.006f, 0.0f, 0.1f, 0.00001f
974 , 0.001f, 0.0f, 0.05f, 0.00001f
975 , 0.02f, 0.0f, 0.1f, 0.00001f
976 , 400.0f, 1.0f, 900.0f, 1.0f
977 , 2.0f, 0.0f, 4.0f, 1.0f
978 , 2.0f, 0.0f, 4.0f, 1.0f
979 , 0.25f, 0.0f, 2.0f, 0.001f
980 , 0.25f, 0.0f, 2.0f, 0.001f
987 12.0f, 9.0f, 12.0f, 1.0f
988 , 1.0f, 1.0f, 20.0f, 1.0f
989 , 1.0f, 1.0f, 10.0f, 0.01f
990 , 250.0f, 100.0f, 2000.0f, 50.0f
991 , 0.007f, 0.0f, 0.01f, 0.00001f
992 , 0.001f, 0.0f, 0.05f, 0.00001f
993 , 0.7f, 0.0f, 1.0f, 0.01f
994 , 8000.0f, 1.0f, 15000.0f, 1.0f
995 , 2.0f, 0.0f, 4.0f, 1.0f
996 , 2.0f, 0.0f, 4.0f, 1.0f
997 , 0.25f, 0.0f, 2.0f, 0.001f
998 , 0.25f, 0.0f, 2.0f, 0.001f
1013 11.0f, 7.0f, 12.0f, 1.0f
1014 , 1.0f, 1.0f, 20.0f, 1.0f
1015 , 1.0f, 1.0f, 10.0f, 1.0f
1016 , 550.0f, 100.0f, 2000.0f, 50.0f
1017 , 0.0012f, 0.0f, 0.01f, 0.00001f
1018 , 0.001f, 0.0f, 0.04f, 0.00001f
1019 , 0.7f, 0.0f, 1.0f, 0.01f
1020 , 200.0f, 1.0f, 400.0f, 1.0f
1021 , 2.0f, 0.0f, 4.0f, 1.0f
1022 , 2.0f, 0.0f, 4.0f, 1.0f
1023 , 0.2f, 0.0f, 1.0f, 0.01f
1024 , 0.2f, 0.0f, 1.0f, 0.01f
1031 11.0f, 7.0f, 12.0f, 1.0f
1032 , 1.0f, 1.0f, 20.0f, 1.0f
1033 , 1.0f, 1.0f, 99.0f, 1.0f
1034 , 550.0f, 100.0f, 2000.0f, 50.0f
1035 , 0.0012f, 0.0f, 0.01f, 0.00001f
1036 , 0.001f, 0.0f, 0.04f, 0.00001f
1037 , 0.7f, 0.0f, 1.0f, 0.01f
1038 , 200.0f, 1.0f, 400.0f, 1.0f
1039 , 2.0f, 0.0f, 8.0f, 1.0f
1040 , 2.0f, 0.0f, 8.0f, 1.0f
1041 , 1.0f, 0.0f, 3.0f, 0.01f
1042 , 1.0f, 0.0f, 3.0f, 0.01f
1049 11.0f, 7.0f, 12.0f, 1.0f
1050 , 1.0f, 1.0f, 20.0f, 1.0f
1051 , 1.0f, 1.0f, 99.0f, 1.0f
1052 , 550.0f, 100.0f, 2000.0f, 50.0f
1053 , 0.0012f, 0.0f, 0.01f, 0.00001f
1054 , 0.001f, 0.0f, 0.04f, 0.00001f
1055 , 0.7f, 0.0f, 1.0f, 0.01f
1056 , 200.0f, 1.0f, 400.0f, 1.0f
1057 , 2.0f, 0.0f, 8.0f, 1.0f
1058 , 2.0f, 0.0f, 8.0f, 1.0f
1059 , 1.0f, 0.0f, 3.0f, 0.01f
1060 , 1.0f, 0.0f, 3.0f, 0.01f
1067 11.0f, 7.0f, 12.0f, 1.0f
1068 , 1.0f, 1.0f, 20.0f, 1.0f
1069 , 1.0f, 1.0f, 10.0f, 1.0f
1070 , 550.0f, 100.0f, 2000.0f, 50.0f
1071 , 0.004f, 0.0f, 0.01f, 0.00001f
1072 , 0.001f, 0.0f, 0.04f, 0.00001f
1073 , 0.02f, 0.0f, 0.04f, 0.00001f
1074 , 2500.0f, 1.0f, 5000.0f, 1.0f
1075 , 2.0f, 0.0f, 4.0f, 1.0f
1076 , 2.0f, 0.0f, 4.0f, 1.0f
1077 , 0.2f, 0.0f, 1.0f, 0.01f
1078 , 0.2f, 0.0f, 1.0f, 0.01f
1085 11.0f, 7.0f, 12.0f, 1.0f
1086 , 1.0f, 1.0f, 20.0f, 1.0f
1087 , 1.0f, 1.0f, 10.0f, 0.01f
1088 , 550.0f, 100.0f, 2000.0f, 50.0f
1089 , 0.004f, 0.0f, 0.01f, 0.00001f
1090 , 0.001f, 0.0f, 0.04f, 0.00001f
1091 , 0.7f, 0.0f, 1.0f, 0.01f
1092 , 9500.0f, 1.0f, 15000.0f, 1.0f
1093 , 2.0f, 0.0f, 4.0f, 1.0f
1094 , 2.0f, 0.0f, 4.0f, 1.0f
1095 , 0.2f, 0.0f, 1.0f, 0.01f
1096 , 0.2f, 0.0f, 1.0f, 0.01f
1107 11.0f, 7.0f, 12.0f, 1.0f
1108 , 1.0f, 1.0f, 20.0f, 1.0f
1109 , 1.0f, 1.0f, 10.0f, 1.0f
1110 , 550.0f, 100.0f, 2000.0f, 50.0f
1111 , 0.0012f, 0.0f, 0.01f, 0.00001f
1112 , 0.001f, 0.0f, 0.04f, 0.00001f
1113 , 0.7f, 0.0f, 1.0f, 0.01f
1114 , 500.0f, 1.0f, 1000.0f, 1.0f
1115 , 2.0f, 0.0f, 4.0f, 1.0f
1116 , 2.0f, 0.0f, 4.0f, 1.0f
1117 , 0.2f, 0.0f, 1.0f, 0.01f
1118 , 0.2f, 0.0f, 1.0f, 0.01f
1125 11.0f, 7.0f, 12.0f, 1.0f
1126 , 1.0f, 1.0f, 20.0f, 1.0f
1127 , 1.0f, 1.0f, 99.0f, 1.0f
1128 , 550.0f, 100.0f, 2000.0f, 50.0f
1129 , 0.0012f, 0.0f, 0.01f, 0.00001f
1130 , 0.001f, 0.0f, 0.04f, 0.00001f
1131 , 0.7f, 0.0f, 1.0f, 0.01f
1132 , 200.0f, 1.0f, 400.0f, 1.0f
1133 , 2.0f, 0.0f, 8.0f, 1.0f
1134 , 2.0f, 0.0f, 8.0f, 1.0f
1135 , 1.0f, 0.0f, 3.0f, 0.01f
1136 , 1.0f, 0.0f, 3.0f, 0.01f
1143 11.0f, 7.0f, 12.0f, 1.0f
1144 , 1.0f, 1.0f, 20.0f, 1.0f
1145 , 1.0f, 1.0f, 99.0f, 1.0f
1146 , 550.0f, 100.0f, 2000.0f, 50.0f
1147 , 0.0012f, 0.0f, 0.01f, 0.00001f
1148 , 0.001f, 0.0f, 0.04f, 0.00001f
1149 , 0.7f, 0.0f, 1.0f, 0.01f
1150 , 200.0f, 1.0f, 400.0f, 1.0f
1151 , 2.0f, 0.0f, 8.0f, 1.0f
1152 , 2.0f, 0.0f, 8.0f, 1.0f
1153 , 1.0f, 0.0f, 3.0f, 0.01f
1154 , 1.0f, 0.0f, 3.0f, 0.01f
1161 11.0f, 7.0f, 12.0f, 1.0f
1162 , 1.0f, 1.0f, 20.0f, 1.0f
1163 , 1.0f, 1.0f, 10.0f, 1.0f
1164 , 550.0f, 100.0f, 2000.0f, 50.0f
1165 , 0.004f, 0.0f, 0.01f, 0.00001f
1166 , 0.001f, 0.0f, 0.04f, 0.00001f
1167 , 0.02f, 0.0f, 0.04f, 0.00001f
1168 , 2500.0f, 1.0f, 5000.0f, 1.0f
1169 , 2.0f, 0.0f, 4.0f, 1.0f
1170 , 2.0f, 0.0f, 4.0f, 1.0f
1171 , 0.2f, 0.0f, 1.0f, 0.01f
1172 , 0.2f, 0.0f, 1.0f, 0.01f
1179 11.0f, 7.0f, 12.0f, 1.0f
1180 , 1.0f, 1.0f, 20.0f, 1.0f
1181 , 1.0f, 1.0f, 10.0f, 0.01f
1182 , 550.0f, 100.0f, 2000.0f, 50.0f
1183 , 0.004f, 0.0f, 0.01f, 0.00001f
1184 , 0.001f, 0.0f, 0.04f, 0.00001f
1185 , 0.7f, 0.0f, 1.0f, 0.01f
1186 , 9500.0f, 1.0f, 15000.0f, 1.0f
1187 , 2.0f, 0.0f, 4.0f, 1.0f
1188 , 2.0f, 0.0f, 4.0f, 1.0f
1189 , 0.2f, 0.0f, 1.0f, 0.01f
1190 , 0.2f, 0.0f, 1.0f, 0.01f
1201 bx::memCopy(sm_settings_, smSettings,
sizeof(smSettings));
1271 if(!l.casts_shadows)
1277 bool recreateTextures =
false;
1278 recreateTextures |= !valid_;
1296 auto last_settings = settings_;
1299 settings_.
m_smImpl = convert(l.shadow_params.type);
1300 settings_.
m_depthImpl = convert(l.shadow_params.depth);
1312 settings_.
m_stencilPack = l.point_shadow_params.stencil_pack;
1313 settings_.
m_fovXAdjust = l.point_shadow_params.fov_x_adjust;
1314 settings_.
m_fovYAdjust = l.point_shadow_params.fov_y_adjust;
1319 settings_.
m_numSplits = l.directional_shadow_params.num_splits;
1320 settings_.
m_stabilize = l.directional_shadow_params.stabilize;
1325#define SET_CLAMPED_VAL(x, val) x = val
1330 SET_CLAMPED_VAL(currentSmSettings->m_sizePwrTwo, convert(l.shadow_params.resolution));
1331 SET_CLAMPED_VAL(currentSmSettings->m_near, l.shadow_params.near_plane);
1333 SET_CLAMPED_VAL(currentSmSettings->m_normalOffset, l.shadow_params.normal_bias);
1362 uint16_t shadowMapSize = 1 << uint32_t(currentSmSettings->m_sizePwrTwo);
1363 recreateTextures |= current_shadow_map_size_ != shadowMapSize;
1364 recreateTextures |= last_settings.m_smImpl != settings_.
m_smImpl;
1365 recreateTextures |= last_settings.m_numSplits != settings_.
m_numSplits;
1366 recreateTextures |= last_settings.m_lightType != settings_.
m_lightType;
1368 if(recreateTextures)
1370 current_shadow_map_size_ = shadowMapSize;
1372 if(bgfx::isValid(rt_shadow_map_[0]))
1374 bgfx::destroy(rt_shadow_map_[0]);
1375 rt_shadow_map_[0] = {bgfx::kInvalidHandle};
1379 bgfx::TextureHandle fbtextures[] = {
1380 bgfx::createTexture2D(current_shadow_map_size_,
1381 current_shadow_map_size_,
1384 bgfx::TextureFormat::BGRA8,
1386 bgfx::createTexture2D(current_shadow_map_size_,
1387 current_shadow_map_size_,
1390 bgfx::TextureFormat::D24S8,
1393 rt_shadow_map_[0] = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures,
true);
1400 if(bgfx::isValid(rt_shadow_map_[ii]))
1402 bgfx::destroy(rt_shadow_map_[ii]);
1403 rt_shadow_map_[ii] = {bgfx::kInvalidHandle};
1408 bgfx::TextureHandle fbtextures[] = {
1409 bgfx::createTexture2D(current_shadow_map_size_,
1410 current_shadow_map_size_,
1413 bgfx::TextureFormat::BGRA8,
1415 bgfx::createTexture2D(current_shadow_map_size_,
1416 current_shadow_map_size_,
1419 bgfx::TextureFormat::D24S8,
1422 rt_shadow_map_[ii] = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures,
true);
1427 if(bgfx::isValid(rt_blur_))
1429 bgfx::destroy(rt_blur_);
1430 rt_blur_ = {bgfx::kInvalidHandle};
1436 if(bVsmOrEsm && currentSmSettings->
m_doBlur)
1438 rt_blur_ = bgfx::createFrameBuffer(current_shadow_map_size_, current_shadow_map_size_, bgfx::TextureFormat::BGRA8);
1442 float currentShadowMapSizef = float(int16_t(current_shadow_map_size_));
1452 uniforms_.
m_XNum = currentSmSettings->m_xNum;
1453 uniforms_.
m_YNum = currentSmSettings->m_yNum;
1454 uniforms_.
m_XOffset = currentSmSettings->m_xOffset;
1455 uniforms_.
m_YOffset = currentSmSettings->m_yOffset;
1464 auto& lightView = light_view_;
1465 auto& lightProj = light_proj_;
1466 auto& lightFrustums = light_frustums_;
1473 const float aspect = 1.0f;
1477 currentSmSettings->m_near,
1478 currentSmSettings->m_far,
1488 const bx::Vec3 at = bx::add(bx::load<bx::Vec3>(point_light_.
m_position.
m_v),
1495 {bx::toRad(0.0f), bx::toRad(27.36780516f), bx::toRad(0.0f)},
1496 {bx::toRad(180.0f), bx::toRad(27.36780516f), bx::toRad(0.0f)},
1497 {bx::toRad(-90.0f), bx::toRad(-27.36780516f), bx::toRad(0.0f)},
1498 {bx::toRad(90.0f), bx::toRad(-27.36780516f), bx::toRad(0.0f)},
1503 const float fovx = 143.98570868f + 3.51f + settings_.
m_fovXAdjust;
1504 const float fovy = 125.26438968f + 9.85f + settings_.
m_fovYAdjust;
1505 const float aspect = bx::tan(bx::toRad(fovx * 0.5f)) / bx::tan(bx::toRad(fovy * 0.5f));
1510 currentSmSettings->m_near,
1511 currentSmSettings->m_far,
1527 const float fovx = 143.98570868f + 7.8f + settings_.
m_fovXAdjust;
1528 const float fovy = 125.26438968f + 3.0f + settings_.
m_fovYAdjust;
1529 const float aspect = bx::tan(bx::toRad(fovx * 0.5f)) / bx::tan(bx::toRad(fovy * 0.5f));
1534 currentSmSettings->m_near,
1535 currentSmSettings->m_far,
1548 mtxYawPitchRoll(mtxTmp, ypr[ii][0], ypr[ii][1], ypr[ii][2]);
1551 -bx::dot(bx::load<bx::Vec3>(point_light_.
m_position.
m_v), bx::load<bx::Vec3>(&mtxTmp[0])),
1552 -bx::dot(bx::load<bx::Vec3>(point_light_.
m_position.
m_v), bx::load<bx::Vec3>(&mtxTmp[4])),
1553 -bx::dot(bx::load<bx::Vec3>(point_light_.
m_position.
m_v), bx::load<bx::Vec3>(&mtxTmp[8])),
1556 bx::mtxTranspose(mtxYpr[ii], mtxTmp);
1558 bx::memCopy(lightView[ii], mtxYpr[ii], 12 *
sizeof(
float));
1559 lightView[ii][12] = tmp[0];
1560 lightView[ii][13] = tmp[1];
1561 lightView[ii][14] = tmp[2];
1562 lightView[ii][15] = 1.0f;
1570 const float camera_pos_x = camera_pos.x;
1571 const float camera_pos_y = camera_pos.y;
1572 const float camera_pos_z = camera_pos.z;
1575 const bx::Vec3 eye = {
1583 const bx::Vec3 at = {camera_pos_x, camera_pos_y, camera_pos_z};
1584 bx::mtxLookAt(lightView[0], eye, at);
1587 const uint8_t maxNumSplits = 4;
1588 BX_ASSERT(maxNumSplits >= settings_.
m_numSplits,
"Error! Max num splits.");
1592 std::array<float, maxNumSplits * 2> splitSlices;
1593 splitFrustum(splitSlices.data(),
1595 currentSmSettings->m_near,
1596 currentSmSettings->m_far,
1602 bx::mtxOrtho(mtxProj,
1607 -currentSmSettings->m_far,
1608 currentSmSettings->m_far,
1613 for(uint8_t ii = 0, ff = 1; ii < settings_.
m_numSplits; ++ii, ff += 2)
1623 const uint8_t numCorners = 8;
1624 float frustumCorners[maxNumSplits][numCorners][3];
1625 for(uint8_t ii = 0, nn = 0, ff = 1; ii < settings_.
m_numSplits; ++ii, nn += 2, ff += 2)
1627 bx::Vec3 min = {9000.0f, 9000.0f, 9000.0f};
1628 bx::Vec3 max = {-9000.0f, -9000.0f, -9000.0f};
1630 float frustum_radius = 0.0f;
1634 const float camFovy = cam.
get_fov();
1636 const float projHeight = bx::tan(bx::toRad(camFovy) * 0.5f);
1637 const float projWidth = projHeight * camAspect;
1641 compute_world_space_frustum_corners((
float*)frustumCorners[ii],
1651 bx::Vec3 frustumCenter = {0.0f, 0.0f, 0.0f};
1652 for(uint8_t jj = 0; jj < numCorners; ++jj)
1654 frustumCenter.x += frustumCorners[ii][jj][0];
1655 frustumCenter.y += frustumCorners[ii][jj][1];
1656 frustumCenter.z += frustumCorners[ii][jj][2];
1660 frustumCenter.x /= numCorners;
1661 frustumCenter.y /= numCorners;
1662 frustumCenter.z /= numCorners;
1665 const bx::Vec3 lightSpaceCenter = bx::mul(frustumCenter, lightView[0]);
1668 for(uint8_t jj = 0; jj < numCorners; ++jj)
1671 const bx::Vec3 xyz = bx::mul(bx::load<bx::Vec3>(frustumCorners[ii][jj]), lightView[0]);
1674 const float dx = xyz.x - lightSpaceCenter.x;
1675 const float dy = xyz.y - lightSpaceCenter.y;
1676 const float dz = xyz.z - lightSpaceCenter.z;
1677 const float distance = bx::sqrt(dx*dx + dy*dy + dz*dz);
1678 frustum_radius = bx::max(frustum_radius,
distance);
1681 min = bx::min(min, xyz);
1682 max = bx::max(max, xyz);
1686 frustum_radius = bx::ceil(frustum_radius * 16.0f) / 16.0f;
1690 const bx::Vec3 minproj = bx::mulH(min, mtxProj);
1691 const bx::Vec3 maxproj = bx::mulH(max, mtxProj);
1697 float scalex_minmax = 2.0f / (maxproj.x - minproj.x);
1698 float scaley_minmax = 2.0f / (maxproj.y - minproj.y);
1701 float scalex_radius = 1.0f / frustum_radius;
1702 float scaley_radius = 1.0f / frustum_radius;
1705 float scalex = bx::lerp(scalex_minmax, scalex_radius, 0.7f);
1706 float scaley = bx::lerp(scaley_minmax, scaley_radius, 0.7f);
1711 const float quantizer = 128.0f;
1712 scalex = quantizer / bx::ceil(quantizer / scalex);
1713 scaley = quantizer / bx::ceil(quantizer / scaley);
1717 float offsetx = -1.0f - scalex * minproj.x;
1718 float offsety = -1.0f - scaley * minproj.y;
1723 float currentShadowMapSizef = float(int16_t(current_shadow_map_size_));
1724 const float halfSize = currentShadowMapSizef * 0.5f;
1727 float shadowOriginX = offsetx * halfSize;
1728 float shadowOriginY = offsety * halfSize;
1731 shadowOriginX = bx::round(shadowOriginX);
1732 shadowOriginY = bx::round(shadowOriginY);
1735 offsetx = shadowOriginX / halfSize;
1736 offsety = shadowOriginY / halfSize;
1740 bx::mtxIdentity(mtxCrop);
1741 mtxCrop[0] = scalex;
1742 mtxCrop[5] = scaley;
1743 mtxCrop[12] = offsetx;
1744 mtxCrop[13] = offsety;
1746 bx::mtxMul(lightProj[ii], mtxCrop, mtxProj);
1752 lightFrustums[0].update(math::make_mat4(lightView[0]),
1789 lightFrustums[0].update(math::make_mat4(lightView[0]), math::make_mat4(lightProj[0]), homogeneousDepth);
1790 lightFrustums[1].update(math::make_mat4(lightView[0]), math::make_mat4(lightProj[1]), homogeneousDepth);
1791 lightFrustums[2].update(math::make_mat4(lightView[0]), math::make_mat4(lightProj[2]), homogeneousDepth);
1792 lightFrustums[3].update(math::make_mat4(lightView[0]), math::make_mat4(lightProj[3]), homogeneousDepth);
1798 float mtxShadow[16];
1800 const float ymul = (originBottomLeft) ? 0.5f : -0.5f;
1804 const float mtxBias[16] =
1806 0.5f, 0.0f, 0.0f, 0.0f,
1807 0.0f, ymul, 0.0f, 0.0f,
1808 0.0f, 0.0f, 0.5f, 0.0f,
1809 0.5f, 0.5f, zadd, 1.0f,
1817 bx::mtxMul(mtxShadow, lightView[0], mtxTmp);
1821 const float s = (originBottomLeft) ? 1.0f : -1.0f;
1830 0.25f, 0.0f, 0.0f, 0.0f,
1831 0.0f, s*0.25f, 0.0f, 0.0f,
1832 0.0f, 0.0f, 0.5f, 0.0f,
1833 0.25f, 0.25f, zadd, 1.0f,
1836 0.25f, 0.0f, 0.0f, 0.0f,
1837 0.0f, s*0.25f, 0.0f, 0.0f,
1838 0.0f, 0.0f, 0.5f, 0.0f,
1839 0.75f, 0.25f, zadd, 1.0f,
1842 0.25f, 0.0f, 0.0f, 0.0f,
1843 0.0f, s*0.25f, 0.0f, 0.0f,
1844 0.0f, 0.0f, 0.5f, 0.0f,
1845 0.25f, 0.75f, zadd, 1.0f,
1848 0.25f, 0.0f, 0.0f, 0.0f,
1849 0.0f, s*0.25f, 0.0f, 0.0f,
1850 0.0f, 0.0f, 0.5f, 0.0f,
1851 0.75f, 0.75f, zadd, 1.0f,
1857 0.25f, 0.0f, 0.0f, 0.0f,
1858 0.0f, s*0.5f, 0.0f, 0.0f,
1859 0.0f, 0.0f, 0.5f, 0.0f,
1860 0.25f, 0.5f, zadd, 1.0f,
1863 0.25f, 0.0f, 0.0f, 0.0f,
1864 0.0f, s*0.5f, 0.0f, 0.0f,
1865 0.0f, 0.0f, 0.5f, 0.0f,
1866 0.75f, 0.5f, zadd, 1.0f,
1869 0.5f, 0.0f, 0.0f, 0.0f,
1870 0.0f, s*0.25f, 0.0f, 0.0f,
1871 0.0f, 0.0f, 0.5f, 0.0f,
1872 0.5f, 0.75f, zadd, 1.0f,
1875 0.5f, 0.0f, 0.0f, 0.0f,
1876 0.0f, s*0.25f, 0.0f, 0.0f,
1877 0.0f, 0.0f, 0.5f, 0.0f,
1878 0.5f, 0.25f, zadd, 1.0f,
1886 static const uint8_t cropBiasIndices[2][2][4] =
1902 uint8_t biasIndex = cropBiasIndices[settings_.
m_stencilPack][uint8_t(originBottomLeft)][ii];
1905 bx::mtxMul(mtxTmp, mtxYpr[ii], lightProj[projType]);
1906 bx::mtxMul(shadow_map_mtx_[ii],
1911 bx::mtxTranslate(mtxShadow
1919 for(uint8_t ii = 0; ii < settings_.
m_numSplits; ++ii)
1923 bx::mtxMul(mtxTmp, lightProj[ii], mtxBias);
1924 bx::mtxMul(shadow_map_mtx_[ii], lightView[0], mtxTmp);
1931 bx::mtxIdentity(tmp);
1933 bx::mtxMul(light_mtx_, tmp, mtxShadow);
1940 auto& lightView = light_view_;
1941 auto& lightProj = light_proj_;
1942 auto& lightFrustums = light_frustums_;
1947 float screenProj[16];
1948 float screenView[16];
1949 bx::mtxIdentity(screenView);
1951 bx::mtxOrtho(screenProj, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f, 0.0f, homogeneousDepth);
1968 auto RENDERVIEW_SHADOWMAP_0_ID = shadowmap_pass_0.
id;
1969 auto RENDERVIEW_SHADOWMAP_1_ID = shadowmap_pass_1.
id;
1970 auto RENDERVIEW_SHADOWMAP_2_ID = shadowmap_pass_2.
id;
1971 auto RENDERVIEW_SHADOWMAP_3_ID = shadowmap_pass_3.
id;
1972 auto RENDERVIEW_SHADOWMAP_4_ID = shadowmap_pass_4.
id;
1973 auto RENDERVIEW_VBLUR_0_ID = shadowmap_vblur_pass_0.
id;
1974 auto RENDERVIEW_HBLUR_0_ID = shadowmap_hblur_pass_0.
id;
1975 auto RENDERVIEW_VBLUR_1_ID = shadowmap_vblur_pass_1.
id;
1976 auto RENDERVIEW_HBLUR_1_ID = shadowmap_hblur_pass_1.
id;
1977 auto RENDERVIEW_VBLUR_2_ID = shadowmap_vblur_pass_2.
id;
1978 auto RENDERVIEW_HBLUR_2_ID = shadowmap_hblur_pass_2.
id;
1979 auto RENDERVIEW_VBLUR_3_ID = shadowmap_vblur_pass_3.
id;
1980 auto RENDERVIEW_HBLUR_3_ID = shadowmap_hblur_pass_3.
id;
1991 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_0_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
1992 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_1_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
1993 bgfx::setViewRect(RENDERVIEW_VBLUR_0_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
1994 bgfx::setViewRect(RENDERVIEW_HBLUR_0_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
1996 bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_0_ID, screenView, screenProj);
1997 bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_1_ID, lightView[0], lightProj[
ProjType::Horizontal]);
1998 bgfx::setViewTransform(RENDERVIEW_VBLUR_0_ID, screenView, screenProj);
1999 bgfx::setViewTransform(RENDERVIEW_HBLUR_0_ID, screenView, screenProj);
2001 bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_0_ID, rt_shadow_map_[0]);
2002 bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_1_ID, rt_shadow_map_[0]);
2003 bgfx::setViewFrameBuffer(RENDERVIEW_VBLUR_0_ID, rt_blur_);
2004 bgfx::setViewFrameBuffer(RENDERVIEW_HBLUR_0_ID, rt_shadow_map_[0]);
2018 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_0_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2021 const uint16_t f = current_shadow_map_size_;
2022 const uint16_t h = current_shadow_map_size_ / 2;
2023 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_1_ID, 0, 0, f, h);
2024 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_2_ID, 0, h, f, h);
2025 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_3_ID, 0, 0, h, f);
2026 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_4_ID, h, 0, h, f);
2030 const uint16_t h = current_shadow_map_size_ / 2;
2031 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_1_ID, 0, 0, h, h);
2032 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_2_ID, h, 0, h, h);
2033 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_3_ID, 0, h, h, h);
2034 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_4_ID, h, h, h, h);
2036 bgfx::setViewRect(RENDERVIEW_VBLUR_0_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2037 bgfx::setViewRect(RENDERVIEW_HBLUR_0_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2039 bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_0_ID, screenView, screenProj);
2040 bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_1_ID,
2044 bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_2_ID,
2050 bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_3_ID,
2054 bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_4_ID,
2060 bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_3_ID,
2064 bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_4_ID,
2068 bgfx::setViewTransform(RENDERVIEW_VBLUR_0_ID, screenView, screenProj);
2069 bgfx::setViewTransform(RENDERVIEW_HBLUR_0_ID, screenView, screenProj);
2071 bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_0_ID, rt_shadow_map_[0]);
2072 bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_1_ID, rt_shadow_map_[0]);
2073 bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_2_ID, rt_shadow_map_[0]);
2074 bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_3_ID, rt_shadow_map_[0]);
2075 bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_4_ID, rt_shadow_map_[0]);
2076 bgfx::setViewFrameBuffer(RENDERVIEW_VBLUR_0_ID, rt_blur_);
2077 bgfx::setViewFrameBuffer(RENDERVIEW_HBLUR_0_ID, rt_shadow_map_[0]);
2096 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_1_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2097 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_2_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2098 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_3_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2099 bgfx::setViewRect(RENDERVIEW_SHADOWMAP_4_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2100 bgfx::setViewRect(RENDERVIEW_VBLUR_0_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2101 bgfx::setViewRect(RENDERVIEW_HBLUR_0_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2102 bgfx::setViewRect(RENDERVIEW_VBLUR_1_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2103 bgfx::setViewRect(RENDERVIEW_HBLUR_1_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2104 bgfx::setViewRect(RENDERVIEW_VBLUR_2_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2105 bgfx::setViewRect(RENDERVIEW_HBLUR_2_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2106 bgfx::setViewRect(RENDERVIEW_VBLUR_3_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2107 bgfx::setViewRect(RENDERVIEW_HBLUR_3_ID, 0, 0, current_shadow_map_size_, current_shadow_map_size_);
2109 bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_1_ID, lightView[0], lightProj[0]);
2110 bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_2_ID, lightView[0], lightProj[1]);
2111 bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_3_ID, lightView[0], lightProj[2]);
2112 bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_4_ID, lightView[0], lightProj[3]);
2114 bgfx::setViewTransform(RENDERVIEW_VBLUR_0_ID, screenView, screenProj);
2115 bgfx::setViewTransform(RENDERVIEW_HBLUR_0_ID, screenView, screenProj);
2116 bgfx::setViewTransform(RENDERVIEW_VBLUR_1_ID, screenView, screenProj);
2117 bgfx::setViewTransform(RENDERVIEW_HBLUR_1_ID, screenView, screenProj);
2118 bgfx::setViewTransform(RENDERVIEW_VBLUR_2_ID, screenView, screenProj);
2119 bgfx::setViewTransform(RENDERVIEW_HBLUR_2_ID, screenView, screenProj);
2120 bgfx::setViewTransform(RENDERVIEW_VBLUR_3_ID, screenView, screenProj);
2121 bgfx::setViewTransform(RENDERVIEW_HBLUR_3_ID, screenView, screenProj);
2123 bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_1_ID, rt_shadow_map_[0]);
2124 bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_2_ID, rt_shadow_map_[1]);
2125 bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_3_ID, rt_shadow_map_[2]);
2126 bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_4_ID, rt_shadow_map_[3]);
2127 bgfx::setViewFrameBuffer(RENDERVIEW_VBLUR_0_ID, rt_blur_);
2128 bgfx::setViewFrameBuffer(RENDERVIEW_HBLUR_0_ID, rt_shadow_map_[0]);
2129 bgfx::setViewFrameBuffer(RENDERVIEW_VBLUR_1_ID, rt_blur_);
2130 bgfx::setViewFrameBuffer(RENDERVIEW_HBLUR_1_ID, rt_shadow_map_[1]);
2131 bgfx::setViewFrameBuffer(RENDERVIEW_VBLUR_2_ID, rt_blur_);
2132 bgfx::setViewFrameBuffer(RENDERVIEW_HBLUR_2_ID, rt_shadow_map_[2]);
2133 bgfx::setViewFrameBuffer(RENDERVIEW_VBLUR_3_ID, rt_blur_);
2134 bgfx::setViewFrameBuffer(RENDERVIEW_HBLUR_3_ID, rt_shadow_map_[3]);
2140 : BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH | BGFX_CLEAR_STENCIL;
2142 bgfx::setViewClear(RENDERVIEW_SHADOWMAP_0_ID,
2148 bgfx::touch(RENDERVIEW_SHADOWMAP_0_ID);
2150 const uint8_t flags1 =
2153 for(uint8_t ii = 0; ii < 4; ++ii)
2155 bgfx::setViewClear(RENDERVIEW_SHADOWMAP_1_ID + ii,
2161 bgfx::touch(RENDERVIEW_SHADOWMAP_1_ID + ii);
2171 bool anythingDrawn =
false;
2179 bgfx::TransientVertexBuffer vb;
2183 const float min = 0.0f;
2184 const float max = 1.0f;
2185 const float center = 0.5f;
2186 const float zz = 0.0f;
2188 vertex[0].
m_x = min;
2189 vertex[0].
m_y = min;
2192 vertex[1].
m_x = max;
2193 vertex[1].
m_y = min;
2204 vertex[4].
m_x = max;
2205 vertex[4].
m_y = max;
2208 vertex[5].
m_x = min;
2209 vertex[5].
m_y = max;
2213 bgfx::setStencil(BGFX_STENCIL_TEST_ALWAYS | BGFX_STENCIL_FUNC_REF(1) | BGFX_STENCIL_FUNC_RMASK(0xff) |
2214 BGFX_STENCIL_OP_FAIL_S_REPLACE | BGFX_STENCIL_OP_FAIL_Z_REPLACE |
2215 BGFX_STENCIL_OP_PASS_Z_REPLACE);
2216 bgfx::setVertexBuffer(0, &vb);
2219 bgfx::submit(RENDERVIEW_SHADOWMAP_0_ID, programs_.
m_black->native_handle());
2225 render_scene_into_shadowmap(RENDERVIEW_SHADOWMAP_1_ID, models, lightFrustums, currentSmSettings);
2234 if(bVsmOrEsm && currentSmSettings->
m_doBlur)
2236 bgfx::setTexture(4, shadow_map_[0], bgfx::getTexture(rt_shadow_map_[0]));
2237 bgfx::setState(BGFX_STATE_WRITE_RGB | BGFX_STATE_WRITE_A);
2238 screenSpaceQuad(originBottomLeft);
2239 programs_.
m_vBlur[depthType]->begin();
2240 bgfx::submit(RENDERVIEW_VBLUR_0_ID, programs_.
m_vBlur[depthType]->native_handle());
2241 programs_.
m_vBlur[depthType]->end();
2243 bgfx::setTexture(4, shadow_map_[0], bgfx::getTexture(rt_blur_));
2244 bgfx::setState(BGFX_STATE_WRITE_RGB | BGFX_STATE_WRITE_A);
2245 screenSpaceQuad(originBottomLeft);
2246 programs_.
m_hBlur[depthType]->begin();
2247 bgfx::submit(RENDERVIEW_HBLUR_0_ID, programs_.
m_hBlur[depthType]->native_handle());
2248 programs_.
m_hBlur[depthType]->end();
2252 for(uint8_t ii = 1, jj = 2; ii < settings_.
m_numSplits; ++ii, jj += 2)
2254 const uint8_t viewId = RENDERVIEW_VBLUR_0_ID + jj;
2256 bgfx::setTexture(4, shadow_map_[0], bgfx::getTexture(rt_shadow_map_[ii]));
2257 bgfx::setState(BGFX_STATE_WRITE_RGB | BGFX_STATE_WRITE_A);
2258 screenSpaceQuad(originBottomLeft);
2259 bgfx::submit(viewId, programs_.
m_vBlur[depthType]->native_handle());
2261 bgfx::setTexture(4, shadow_map_[0], bgfx::getTexture(rt_blur_));
2262 bgfx::setState(BGFX_STATE_WRITE_RGB | BGFX_STATE_WRITE_A);
2263 screenSpaceQuad(originBottomLeft);
2264 bgfx::submit(viewId + 1, programs_.
m_hBlur[depthType]->native_handle());