public void WriteAttribDescriptions(Span <VertexAttribDescription> descriptions)
 {
     descriptions[0] = new VertexAttribDescription(AttributeType.FloatVec3);
     descriptions[1] = new VertexAttribDescription(AttributeType.FloatVec3);
     descriptions[2] = new VertexAttribDescription(AttributeType.FloatVec4, true, AttributeBaseType.UnsignedByte);
     descriptions[3] = new VertexAttribDescription(AttributeType.FloatVec2);
 }
        /// <summary>
        /// Creates a <see cref="VertexAttribSource"/> that represents padding. This means that the created
        /// <see cref="VertexAttribSource"/> will not indicate a buffer to read data from or use a vertex
        /// attribute index, it will just leave an ignored space between other attributes.
        /// </summary>
        /// <param name="bufferSubset">The <see cref="BufferObjectSubset"/> where the padding will be added.</param>
        /// <param name="paddingBytes">The amount of space to leave empty, measured in bytes.</param>
        public VertexAttribSource(DataBufferSubset bufferSubset, uint paddingBytes)
        {
            if (bufferSubset == null)
            {
                throw new ArgumentNullException(nameof(bufferSubset));
            }

            if (bufferSubset.BufferTarget != BufferTargetARB.ArrayBuffer)
            {
                throw new ArgumentException("The specified BufferObjectSubset must be usable as vertex attrib data. Try using a VertexDataBufferSubset", nameof(bufferSubset));
            }

            BufferSubset      = bufferSubset;
            AttribDescription = new VertexAttribDescription(paddingBytes);
        }
        /// <summary>
        /// Creates a <see cref="VertexAttribSource"/> with a given <see cref="BufferObjectSubset"/>
        /// and the given <see cref="VertexAttribDescription"/>.
        /// </summary>
        /// <param name="bufferSubset">The <see cref="BufferObjectSubset"/> where the vertex attrib data is located. Must be a subset usable for vertex data.</param>
        /// <param name="attribDesc">The <see cref="VertexAttribDescription"/> describing the vertex attribute.</param>
        public VertexAttribSource(DataBufferSubset bufferSubset, VertexAttribDescription attribDesc)
        {
            if (bufferSubset == null)
            {
                throw new ArgumentNullException(nameof(bufferSubset));
            }

            if (bufferSubset.BufferTarget != BufferTarget.ArrayBuffer)
            {
                throw new ArgumentException("The specified " + nameof(BufferObjectSubset) + " must be usable as vertex attrib data. Try using a VertexDataBufferSubset", nameof(bufferSubset));
            }

            BufferSubset      = bufferSubset;
            AttribDescription = attribDesc;
        }
 public void WriteAttribDescriptions(Span <VertexAttribDescription> descriptions)
 {
     descriptions[0] = new VertexAttribDescription(AttributeType.FloatVec3);
     descriptions[1] = new VertexAttribDescription(AttributeType.FloatVec3);
 }
 /// <summary>
 /// Creates a <see cref="VertexAttribSource"/> that specifies padding for the amount
 /// of bytes used by a specified <see cref="AttributeType"/>.
 /// </summary>
 /// <param name="bufferSubset">The buffer subset in which the padding will be applied.</param>
 /// <param name="attribType">The type of the attribute, for calculating paddign.</param>
 /// <remarks>
 /// Padding indicators ignore padding based on type that occurs when using compensation
 /// for struct padding (which is the default behavior in <see cref="VertexArray"/>).
 /// </remarks>
 public static VertexAttribSource CreatePadding(DataBufferSubset bufferSubset, AttributeType attribType)
 {
     return(new VertexAttribSource(bufferSubset, VertexAttribDescription.CreatePadding(attribType)));
 }
 /// <summary>
 /// Creates a <see cref="VertexAttribSource"/> that specifies padding for an
 /// amount of bytes calculated based on the baseType and size parameters.
 /// </summary>
 /// <param name="bufferSubset">The buffer subset in which the padding will be applied.</param>
 /// <param name="baseType">The base type of the attribute.</param>
 /// <param name="size">The size of the attribute.</param>
 public static VertexAttribSource CreatePadding(DataBufferSubset bufferSubset, VertexAttribPointerType baseType, uint size)
 {
     return(new VertexAttribSource(bufferSubset, VertexAttribDescription.CreatePadding(baseType, size)));
 }