@@ -4513,6 +4513,297 @@ Variant ShaderLanguage::constant_value_to_variant(const Vector<Scalar> &p_value,
4513
4513
return Variant ();
4514
4514
}
4515
4515
4516
+ Variant ShaderLanguage::get_default_datatype_value (DataType p_type, int p_array_size, ShaderLanguage::ShaderNode::Uniform::Hint p_hint) {
4517
+ int array_size = p_array_size;
4518
+
4519
+ Variant value;
4520
+ switch (p_type) {
4521
+ case ShaderLanguage::TYPE_BOOL:
4522
+ if (array_size > 0 ) {
4523
+ PackedInt32Array array;
4524
+ for (int i = 0 ; i < array_size; i++) {
4525
+ array.push_back (false );
4526
+ }
4527
+ value = Variant (array);
4528
+ } else {
4529
+ VariantInitializer<bool >::init (&value);
4530
+ VariantDefaultInitializer<bool >::init (&value);
4531
+ }
4532
+ break ;
4533
+ case ShaderLanguage::TYPE_BVEC2:
4534
+ array_size *= 2 ;
4535
+
4536
+ if (array_size > 0 ) {
4537
+ PackedInt32Array array;
4538
+ for (int i = 0 ; i < array_size; i++) {
4539
+ array.push_back (false );
4540
+ }
4541
+ value = Variant (array);
4542
+ } else {
4543
+ VariantInitializer<int64_t >::init (&value);
4544
+ VariantDefaultInitializer<int64_t >::init (&value);
4545
+ }
4546
+ break ;
4547
+ case ShaderLanguage::TYPE_BVEC3:
4548
+ array_size *= 3 ;
4549
+
4550
+ if (array_size > 0 ) {
4551
+ PackedInt32Array array;
4552
+ for (int i = 0 ; i < array_size; i++) {
4553
+ array.push_back (false );
4554
+ }
4555
+ value = Variant (array);
4556
+ } else {
4557
+ VariantInitializer<int64_t >::init (&value);
4558
+ VariantDefaultInitializer<int64_t >::init (&value);
4559
+ }
4560
+ break ;
4561
+ case ShaderLanguage::TYPE_BVEC4:
4562
+ array_size *= 4 ;
4563
+
4564
+ if (array_size > 0 ) {
4565
+ PackedInt32Array array;
4566
+ for (int i = 0 ; i < array_size; i++) {
4567
+ array.push_back (false );
4568
+ }
4569
+ value = Variant (array);
4570
+ } else {
4571
+ VariantInitializer<int64_t >::init (&value);
4572
+ VariantDefaultInitializer<int64_t >::init (&value);
4573
+ }
4574
+ break ;
4575
+ case ShaderLanguage::TYPE_INT:
4576
+ if (array_size > 0 ) {
4577
+ PackedInt32Array array;
4578
+ for (int i = 0 ; i < array_size; i++) {
4579
+ array.push_back (0 );
4580
+ }
4581
+ value = Variant (array);
4582
+ } else {
4583
+ VariantInitializer<int64_t >::init (&value);
4584
+ VariantDefaultInitializer<int64_t >::init (&value);
4585
+ }
4586
+ break ;
4587
+ case ShaderLanguage::TYPE_IVEC2:
4588
+ if (array_size > 0 ) {
4589
+ array_size *= 2 ;
4590
+
4591
+ PackedInt32Array array;
4592
+ for (int i = 0 ; i < array_size; i++) {
4593
+ array.push_back (0 );
4594
+ }
4595
+ value = Variant (array);
4596
+ } else {
4597
+ VariantInitializer<Vector2i>::init (&value);
4598
+ VariantDefaultInitializer<Vector2i>::init (&value);
4599
+ }
4600
+ break ;
4601
+ case ShaderLanguage::TYPE_IVEC3:
4602
+ if (array_size > 0 ) {
4603
+ array_size *= 3 ;
4604
+
4605
+ PackedInt32Array array;
4606
+ for (int i = 0 ; i < array_size; i++) {
4607
+ array.push_back (0 );
4608
+ }
4609
+ value = Variant (array);
4610
+ } else {
4611
+ VariantInitializer<Vector3i>::init (&value);
4612
+ VariantDefaultInitializer<Vector3i>::init (&value);
4613
+ }
4614
+ break ;
4615
+ case ShaderLanguage::TYPE_IVEC4:
4616
+ if (array_size > 0 ) {
4617
+ array_size *= 4 ;
4618
+
4619
+ PackedInt32Array array;
4620
+ for (int i = 0 ; i < array_size; i++) {
4621
+ array.push_back (0 );
4622
+ }
4623
+ value = Variant (array);
4624
+ } else {
4625
+ VariantInitializer<Vector4i>::init (&value);
4626
+ VariantDefaultInitializer<Vector4i>::init (&value);
4627
+ }
4628
+ break ;
4629
+ case ShaderLanguage::TYPE_UINT:
4630
+ if (array_size > 0 ) {
4631
+ PackedInt32Array array;
4632
+ for (int i = 0 ; i < array_size; i++) {
4633
+ array.push_back (0U );
4634
+ }
4635
+ value = Variant (array);
4636
+ } else {
4637
+ VariantInitializer<int64_t >::init (&value);
4638
+ VariantDefaultInitializer<int64_t >::init (&value);
4639
+ }
4640
+ break ;
4641
+ case ShaderLanguage::TYPE_UVEC2:
4642
+ if (array_size > 0 ) {
4643
+ array_size *= 2 ;
4644
+
4645
+ PackedInt32Array array;
4646
+ for (int i = 0 ; i < array_size; i++) {
4647
+ array.push_back (0U );
4648
+ }
4649
+ value = Variant (array);
4650
+ } else {
4651
+ VariantInitializer<Vector2i>::init (&value);
4652
+ VariantDefaultInitializer<Vector2i>::init (&value);
4653
+ }
4654
+ break ;
4655
+ case ShaderLanguage::TYPE_UVEC3:
4656
+ if (array_size > 0 ) {
4657
+ array_size *= 3 ;
4658
+
4659
+ PackedInt32Array array;
4660
+ for (int i = 0 ; i < array_size; i++) {
4661
+ array.push_back (0U );
4662
+ }
4663
+ value = Variant (array);
4664
+ } else {
4665
+ VariantInitializer<Vector3i>::init (&value);
4666
+ VariantDefaultInitializer<Vector3i>::init (&value);
4667
+ }
4668
+ break ;
4669
+ case ShaderLanguage::TYPE_UVEC4:
4670
+ if (array_size > 0 ) {
4671
+ array_size *= 4 ;
4672
+
4673
+ PackedInt32Array array;
4674
+ for (int i = 0 ; i < array_size; i++) {
4675
+ array.push_back (0U );
4676
+ }
4677
+ value = Variant (array);
4678
+ } else {
4679
+ VariantInitializer<Vector4i>::init (&value);
4680
+ VariantDefaultInitializer<Vector4i>::init (&value);
4681
+ }
4682
+ break ;
4683
+ case ShaderLanguage::TYPE_FLOAT:
4684
+ if (array_size > 0 ) {
4685
+ PackedFloat32Array array;
4686
+ for (int i = 0 ; i < array_size; i++) {
4687
+ array.push_back (0 .0f );
4688
+ }
4689
+ value = Variant (array);
4690
+ } else {
4691
+ VariantInitializer<float >::init (&value);
4692
+ VariantDefaultInitializer<float >::init (&value);
4693
+ }
4694
+ break ;
4695
+ case ShaderLanguage::TYPE_VEC2:
4696
+ if (array_size > 0 ) {
4697
+ PackedVector2Array array;
4698
+ for (int i = 0 ; i < array_size; i++) {
4699
+ array.push_back (Vector2 (0 .0f , 0 .0f ));
4700
+ }
4701
+ value = Variant (array);
4702
+ } else {
4703
+ VariantInitializer<Vector2>::init (&value);
4704
+ VariantDefaultInitializer<Vector2>::init (&value);
4705
+ }
4706
+ break ;
4707
+ case ShaderLanguage::TYPE_VEC3:
4708
+ if (array_size > 0 ) {
4709
+ if (p_hint == ShaderLanguage::ShaderNode::Uniform::HINT_SOURCE_COLOR) {
4710
+ PackedColorArray array;
4711
+ for (int i = 0 ; i < array_size; i++) {
4712
+ array.push_back (Color (0 .0f , 0 .0f , 0 .0f ));
4713
+ }
4714
+ value = Variant (array);
4715
+ } else {
4716
+ PackedVector3Array array;
4717
+ for (int i = 0 ; i < array_size; i++) {
4718
+ array.push_back (Vector3 (0 .0f , 0 .0f , 0 .0f ));
4719
+ }
4720
+ value = Variant (array);
4721
+ }
4722
+ } else {
4723
+ if (p_hint == ShaderLanguage::ShaderNode::Uniform::HINT_SOURCE_COLOR) {
4724
+ VariantInitializer<Color>::init (&value);
4725
+ VariantDefaultInitializer<Color>::init (&value);
4726
+ } else {
4727
+ VariantInitializer<Vector3>::init (&value);
4728
+ VariantDefaultInitializer<Vector3>::init (&value);
4729
+ }
4730
+ }
4731
+ break ;
4732
+ case ShaderLanguage::TYPE_VEC4:
4733
+ if (array_size > 0 ) {
4734
+ if (p_hint == ShaderLanguage::ShaderNode::Uniform::HINT_SOURCE_COLOR) {
4735
+ PackedColorArray array;
4736
+ for (int i = 0 ; i < array_size; i++) {
4737
+ array.push_back (Color (0 .0f , 0 .0f , 0 .0f , 0 .0f ));
4738
+ }
4739
+ value = Variant (array);
4740
+ } else {
4741
+ PackedVector4Array array;
4742
+ for (int i = 0 ; i < array_size; i++) {
4743
+ array.push_back (Vector4 (0 .0f , 0 .0f , 0 .0f , 0 .0f ));
4744
+ }
4745
+ value = Variant (array);
4746
+ }
4747
+ } else {
4748
+ if (p_hint == ShaderLanguage::ShaderNode::Uniform::HINT_SOURCE_COLOR) {
4749
+ VariantInitializer<Color>::init (&value);
4750
+ VariantDefaultInitializer<Color>::init (&value);
4751
+ } else {
4752
+ VariantInitializer<Vector4>::init (&value);
4753
+ VariantDefaultInitializer<Vector4>::init (&value);
4754
+ }
4755
+ }
4756
+ break ;
4757
+ case ShaderLanguage::TYPE_MAT2:
4758
+ if (array_size > 0 ) {
4759
+ PackedFloat32Array array;
4760
+ for (int i = 0 ; i < array_size; i++) {
4761
+ for (int j = 0 ; j < 4 ; j++) {
4762
+ array.push_back (0 .0f );
4763
+ }
4764
+ }
4765
+ value = Variant (array);
4766
+ } else {
4767
+ VariantInitializer<Transform2D>::init (&value);
4768
+ VariantDefaultInitializer<Transform2D>::init (&value);
4769
+ }
4770
+ break ;
4771
+ case ShaderLanguage::TYPE_MAT3: {
4772
+ if (array_size > 0 ) {
4773
+ PackedFloat32Array array;
4774
+ for (int i = 0 ; i < array_size; i++) {
4775
+ for (int j = 0 ; j < 9 ; j++) {
4776
+ array.push_back (0 .0f );
4777
+ }
4778
+ }
4779
+ value = Variant (array);
4780
+ } else {
4781
+ VariantInitializer<Basis>::init (&value);
4782
+ VariantDefaultInitializer<Basis>::init (&value);
4783
+ }
4784
+ break ;
4785
+ }
4786
+ case ShaderLanguage::TYPE_MAT4: {
4787
+ if (array_size > 0 ) {
4788
+ PackedFloat32Array array;
4789
+ for (int i = 0 ; i < array_size; i++) {
4790
+ for (int j = 0 ; j < 16 ; j++) {
4791
+ array.push_back (0 .0f );
4792
+ }
4793
+ }
4794
+ value = Variant (array);
4795
+ } else {
4796
+ VariantInitializer<Projection>::init (&value);
4797
+ VariantDefaultInitializer<Projection>::init (&value);
4798
+ }
4799
+ break ;
4800
+ }
4801
+ default : {
4802
+ } break ;
4803
+ }
4804
+ return value;
4805
+ }
4806
+
4516
4807
PropertyInfo ShaderLanguage::uniform_to_property_info (const ShaderNode::Uniform &p_uniform) {
4517
4808
PropertyInfo pi;
4518
4809
switch (p_uniform.type ) {
0 commit comments