|
@@ -2273,6 +2273,90 @@ bool ShaderLanguage::is_sampler_type(DataType p_type) {
|
|
|
p_type == TYPE_SAMPLERCUBE;
|
|
|
}
|
|
|
|
|
|
+Variant ShaderLanguage::constant_value_to_variant(const Vector<ShaderLanguage::ConstantNode::Value> &p_value, DataType p_type) {
|
|
|
+ if (p_value.size() > 0) {
|
|
|
+ Variant value;
|
|
|
+ switch (p_type) {
|
|
|
+ case ShaderLanguage::TYPE_BOOL:
|
|
|
+ value = Variant(p_value[0].boolean);
|
|
|
+ break;
|
|
|
+ case ShaderLanguage::TYPE_BVEC2:
|
|
|
+ case ShaderLanguage::TYPE_BVEC3:
|
|
|
+ case ShaderLanguage::TYPE_BVEC4:
|
|
|
+ case ShaderLanguage::TYPE_INT:
|
|
|
+ value = Variant(p_value[0].sint);
|
|
|
+ break;
|
|
|
+ case ShaderLanguage::TYPE_IVEC2:
|
|
|
+ value = Variant(Vector2(p_value[0].sint, p_value[1].sint));
|
|
|
+ break;
|
|
|
+ case ShaderLanguage::TYPE_IVEC3:
|
|
|
+ value = Variant(Vector3(p_value[0].sint, p_value[1].sint, p_value[2].sint));
|
|
|
+ break;
|
|
|
+ case ShaderLanguage::TYPE_IVEC4:
|
|
|
+ value = Variant(Plane(p_value[0].sint, p_value[1].sint, p_value[2].sint, p_value[3].sint));
|
|
|
+ break;
|
|
|
+ case ShaderLanguage::TYPE_UINT:
|
|
|
+ value = Variant(p_value[0].uint);
|
|
|
+ break;
|
|
|
+ case ShaderLanguage::TYPE_UVEC2:
|
|
|
+ value = Variant(Vector2(p_value[0].uint, p_value[1].uint));
|
|
|
+ break;
|
|
|
+ case ShaderLanguage::TYPE_UVEC3:
|
|
|
+ value = Variant(Vector3(p_value[0].uint, p_value[1].uint, p_value[2].uint));
|
|
|
+ break;
|
|
|
+ case ShaderLanguage::TYPE_UVEC4:
|
|
|
+ value = Variant(Plane(p_value[0].uint, p_value[1].uint, p_value[2].uint, p_value[3].uint));
|
|
|
+ break;
|
|
|
+ case ShaderLanguage::TYPE_FLOAT:
|
|
|
+ value = Variant(p_value[0].real);
|
|
|
+ break;
|
|
|
+ case ShaderLanguage::TYPE_VEC2:
|
|
|
+ value = Variant(Vector2(p_value[0].real, p_value[1].real));
|
|
|
+ break;
|
|
|
+ case ShaderLanguage::TYPE_VEC3:
|
|
|
+ value = Variant(Vector3(p_value[0].real, p_value[1].real, p_value[2].real));
|
|
|
+ break;
|
|
|
+ case ShaderLanguage::TYPE_VEC4:
|
|
|
+ value = Variant(Plane(p_value[0].real, p_value[1].real, p_value[2].real, p_value[3].real));
|
|
|
+ break;
|
|
|
+ case ShaderLanguage::TYPE_MAT2:
|
|
|
+ value = Variant(Transform2D(p_value[0].real, p_value[2].real, p_value[1].real, p_value[3].real, 0.0, 0.0));
|
|
|
+ break;
|
|
|
+ case ShaderLanguage::TYPE_MAT3: {
|
|
|
+ Basis p;
|
|
|
+ p[0][0] = p_value[0].real;
|
|
|
+ p[0][1] = p_value[1].real;
|
|
|
+ p[0][2] = p_value[2].real;
|
|
|
+ p[1][0] = p_value[3].real;
|
|
|
+ p[1][1] = p_value[4].real;
|
|
|
+ p[1][2] = p_value[5].real;
|
|
|
+ p[2][0] = p_value[6].real;
|
|
|
+ p[2][1] = p_value[7].real;
|
|
|
+ p[2][2] = p_value[8].real;
|
|
|
+ value = Variant(p);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case ShaderLanguage::TYPE_MAT4: {
|
|
|
+ Basis p;
|
|
|
+ p[0][0] = p_value[0].real;
|
|
|
+ p[0][1] = p_value[1].real;
|
|
|
+ p[0][2] = p_value[2].real;
|
|
|
+ p[1][0] = p_value[4].real;
|
|
|
+ p[1][1] = p_value[5].real;
|
|
|
+ p[1][2] = p_value[6].real;
|
|
|
+ p[2][0] = p_value[8].real;
|
|
|
+ p[2][1] = p_value[9].real;
|
|
|
+ p[2][2] = p_value[10].real;
|
|
|
+ Transform t = Transform(p, Vector3(p_value[3].real, p_value[7].real, p_value[11].real));
|
|
|
+ value = Variant(t);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+ return Variant();
|
|
|
+}
|
|
|
+
|
|
|
void ShaderLanguage::get_keyword_list(List<String> *r_keywords) {
|
|
|
|
|
|
Set<String> kws;
|