/// <summary>
        ///     Loads the shader to the GPU.
        /// </summary>
        public void Load()
        {
            _id      = GL.CreateProgram();
            Uniforms = new UniformCollection {
                ParentShader = this
            };

            ErrorInShader = !ShaderFiles.Append(this);
            if (ErrorInShader)
            {
                GL.DeleteProgram(_id);
                return;
            }
            GL.LinkProgram(_id);
            ShaderFiles.Detach(this);

            Uniforms.Import(this);

            GLDebugging.CheckGLErrors($"A error occured at shader creation for '{GetType()}': %code%");
        }
        /// <summary>
        ///     Removes the files form the shader.
        /// </summary>
        /// <param name="shader"></param>
        internal void Detach(GenericShader shader)
        {
            foreach (ShaderFile file in Vertex)
            {
                GL.DetachShader(shader, file);
            }

            if (Geometry != null)
            {
                foreach (ShaderFile file in Geometry)
                {
                    GL.DetachShader(shader, file);
                }
            }

            foreach (ShaderFile file in Fragment)
            {
                GL.DetachShader(shader, file);
            }

            GLDebugging.CheckGLErrors($"Error at detaching '{shader.GetType()}': %code%");
        }