@@ -4513,6 +4513,297 @@ Variant ShaderLanguage::constant_value_to_variant(const Vector<Scalar> &p_value,
45134513 return Variant ();
45144514}
45154515
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+
45164807PropertyInfo ShaderLanguage::uniform_to_property_info (const ShaderNode::Uniform &p_uniform) {
45174808 PropertyInfo pi;
45184809 switch (p_uniform.type ) {
0 commit comments