/// <summary>Add a operation, always at the end of the current list of renders. Operation is added in the shader slot.</summary>
        public void Add(GLOperationsBase operation)
        {
            string n = "OP " + operation.GetType().Name + " # " + (unnamed++).ToStringInvariant();

            AddItem(operation, n, null, true, false);  // must be at end, and must not join
        }
        /// <summary>Add an operation at the end of the list of a particular shader. </summary>
        /// <param name="shader">Shader to associate the operation with</param>
        /// <param name="operation">Operation</param>
        /// <param name="atend">Force the operation to be the last in the current queue. If false, and a shader already is in the queue, then its placed at the end of that shader list.</param>
        public void Add(IGLProgramShader shader, GLOperationsBase operation, bool atend = false)
        {
            string n = "OP-RI " + operation.GetType().Name + " # " + (unnamed++).ToStringInvariant();

            AddItem(shader, n, operation, atend, true);  // must be at end, and can join at end
        }
 private new void Add(GLOperationsBase nprog)
 {
     System.Diagnostics.Debug.Assert(false, "Cannot add an operation to a compute shader list");
 }