/// <summary>
        ///     Gets an array containing all formats of the main Attributes Buffer.
        ///     It have the length of each attribute, and the format (byte, float, short...).
        /// </summary>
        /// <returns></returns>
        public PICACommand.attributeFormat[] getVSHAttributesBufferFormat()
        {
            ulong format = getParameter(PICACommand.vertexShaderAttributesBufferFormatLow);

            format |= getParameter(PICACommand.vertexShaderAttributesBufferFormatHigh) << 32;

            PICACommand.attributeFormat[] formats = new PICACommand.attributeFormat[23];
            for (int attribute = 0; attribute < formats.Length; attribute++)
            {
                byte value = (byte)((format >> (attribute * 4)) & 0xf);
                formats[attribute].type            = (PICACommand.attributeFormatType)(value & 3);
                formats[attribute].attributeLength = (uint)(value >> 2);
            }
            return(formats);
        }
        /// <summary>
        ///     Gets an array containing all formats of the main Attributes Buffer.
        ///     It have the length of each attribute, and the format (byte, float, short...).
        /// </summary>
        /// <returns></returns>
        public PICACommand.attributeFormat[] getVSHAttributesBufferFormat()
        {
            ulong format = getParameter(PICACommand.vertexShaderAttributesBufferFormatLow);
            format |= getParameter(PICACommand.vertexShaderAttributesBufferFormatHigh) << 32;

            PICACommand.attributeFormat[] formats = new PICACommand.attributeFormat[23];
            for (int attribute = 0; attribute < formats.Length; attribute++)
            {
                byte value = (byte)((format >> (attribute * 4)) & 0xf);
                formats[attribute].type = (PICACommand.attributeFormatType)(value & 3);
                formats[attribute].attributeLength = (uint)(value >> 2);
            }
            return formats;
        }