protected override void Dispose(bool nongc)
        {
            if (nongc && Initialized)
            {
                GL.DetachShader(Handle, vertexShader.Handle);
                GL.DetachShader(Handle, fragmentShader.Handle);

                vertexShader.Dispose();
                fragmentShader.Dispose();

                vertexShader   = null;
                fragmentShader = null;

                GL.DeleteProgram(Handle);

                Handle      = 0;
                Initialized = false;
            }
        }