Exemplo n.º 1
0
 private static object _parseUniformValue(YamlNode node, ShaderDataType dataType)
 {
     switch (dataType)
     {
         case ShaderDataType.Bool:
             return node.AsBool();
         case ShaderDataType.Int:
             return node.AsInt();
         case ShaderDataType.IVec2:
             return node.AsVector2i();
         case ShaderDataType.Float:
             return node.AsFloat();
         case ShaderDataType.Vec2:
             return node.AsVector2();
         case ShaderDataType.Vec3:
             return node.AsVector3();
         case ShaderDataType.Vec4:
             try
             {
                 return node.AsColor();
             }
             catch
             {
                 return node.AsVector4();
             }
         default:
             throw new NotSupportedException("Unsupported uniform type.");
     }
 }
Exemplo n.º 2
0
        private object ParseShaderParamFor(YamlNode node, ShaderParamType type)
        {
            if (!GameController.OnGodot)
            {
                throw new NotImplementedException();
            }
            switch (type)
            {
            case ShaderParamType.Void:
                throw new NotSupportedException();

            case ShaderParamType.Bool:
                return(node.AsBool());

            case ShaderParamType.Int:
            case ShaderParamType.UInt:
                return(node.AsInt());

            case ShaderParamType.Float:
                return(node.AsFloat());

            case ShaderParamType.Vec2:
                return(node.AsVector2().Convert());

            case ShaderParamType.Vec3:
                return(node.AsVector3().Convert());

            case ShaderParamType.Vec4:
                try
                {
                    return(node.AsColor().Convert());
                }
                catch
                {
                    var vec4 = node.AsVector4();
                    return(new Godot.Quat(vec4.X, vec4.Y, vec4.Z, vec4.W));
                }

            case ShaderParamType.Sampler2D:
                var path = node.AsResourcePath();
                var resc = IoCManager.Resolve <IResourceCache>();
                return(resc.GetResource <TextureResource>(path).Texture.GodotTexture);

            // If something's not handled here, then that's probably because I was lazy.
            default:
                throw new NotImplementedException();
            }
        }