/*global define*/
define([
        './defaultValue',
        './freezeObject'
    ], function(
        defaultValue,
        freezeObject) {
    "use strict";

    /**
     * A vertex format defines what attributes make up a vertex.  A VertexFormat can be provided
     * to a {@link Geometry} to request that certain properties be computed, e.g., just position,
     * position and normal, etc.
     *
     * @param {Object} [options=undefined] An object with boolean properties corresponding to VertexFormat properties as shown in the code example.
     *
     * @alias VertexFormat
     * @constructor
     *
     * @example
     * // Create a vertex format with position and 2D texture coordinate attributes.
     * var format = new VertexFormat({
     *   position : true,
     *   st : true
     * });
     *
     * @see Geometry#attributes
     */
    var VertexFormat = function(options) {
        options = defaultValue(options, defaultValue.EMPTY_OBJECT);

        /**
         * When <code>true</code>, the vertex has a 3D position attribute.
         * <p>
         * 64-bit floating-point (for precision).  3 components per attribute.
         * </p>
         *
         * @type Boolean
         *
         * @default false
         */
        this.position = defaultValue(options.position, false);

        /**
         * When <code>true</code>, the vertex has a normal attribute (normalized), which is commonly used for lighting.
         * <p>
         * 32-bit floating-point.  3 components per attribute.
         * </p>
         *
         * @type Boolean
         *
         * @default false
         */
        this.normal = defaultValue(options.normal, false);

        /**
         * When <code>true</code>, the vertex has a 2D texture coordinate attribute.
         * <p>
         * 32-bit floating-point.  2 components per attribute
         * </p>
         *
         * @type Boolean
         *
         * @default false
         */
        this.st = defaultValue(options.st, false);

        /**
         * When <code>true</code>, the vertex has a binormal attribute (normalized), which is used for tangent-space effects like bump mapping.
         * <p>
         * 32-bit floating-point.  3 components per attribute.
         * </p>
         *
         * @type Boolean
         *
         * @default false
         */
        this.binormal = defaultValue(options.binormal, false);

        /**
         * When <code>true</code>, the vertex has a tangent attribute (normalized), which is used for tangent-space effects like bump mapping.
         * <p>
         * 32-bit floating-point.  3 components per attribute.
         * </p>
         *
         * @type Boolean
         *
         * @default false
         */
        this.tangent = defaultValue(options.tangent, false);

        /**
         * DOC_TBA
         */
        this.color = defaultValue(options.color, false);
    };

    /**
     * An immutable vertex format with only a position attribute.
     *
     * @memberof VertexFormat
     *
     * @see VertexFormat#position
     */
    VertexFormat.POSITION_ONLY = freezeObject(new VertexFormat({
        position : true
    }));

    /**
     * An immutable vertex format with position and normal attributes.
     * This is compatible with per-instance color appearances like {@link PerInstanceColorAppearance}.
     *
     * @memberof VertexFormat
     *
     * @see VertexFormat#position
     * @see VertexFormat#normal
     */
    VertexFormat.POSITION_AND_NORMAL = freezeObject(new VertexFormat({
        position : true,
        normal : true
    }));

    /**
     * An immutable vertex format with position, normal, and st attributes.
     * This is compatible with {@link MaterialAppearance} when {@link MaterialAppearance#materialSupport}
     * is <code>TEXTURED/code>.
     *
     * @memberof VertexFormat
     *
     * @see VertexFormat#position
     * @see VertexFormat#normal
     * @see VertexFormat#st
     */
    VertexFormat.POSITION_NORMAL_AND_ST = freezeObject(new VertexFormat({
        position : true,
        normal : true,
        st : true
    }));

    /**
     * An immutable vertex format with position and st attributes.
     * This is compatible with {@link EllipsoidSurfaceAppearance}.
     *
     * @memberof VertexFormat
     *
     * @see VertexFormat#position
     * @see VertexFormat#st
     */
    VertexFormat.POSITION_AND_ST = freezeObject(new VertexFormat({
        position : true,
        st : true
    }));

    /**
     * An immutable vertex format with all well-known attributes: position, normal, st, binormal, and tangent.
     *
     * @memberof VertexFormat
     *
     * @see VertexFormat#position
     * @see VertexFormat#normal
     * @see VertexFormat#st
     * @see VertexFormat#binormal
     * @see VertexFormat#tangent
     */
    VertexFormat.ALL = freezeObject(new VertexFormat({
        position : true,
        normal : true,
        st : true,
        binormal : true,
        tangent  : true
    }));

    /**
     * An immutable vertex format with position, normal, and st attributes.
     * This is compatible with most appearances and materials; however
     * normal and st attributes are not always required.  When this is
     * known in advance, another <code>VertexFormat</code> should be used.
     *
     * @memberof VertexFormat
     *
     * @see VertexFormat#position
     * @see VertexFormat#normal
     */
    VertexFormat.DEFAULT = VertexFormat.POSITION_NORMAL_AND_ST;

    /**
     * DOC_TBA
     */
    VertexFormat.POSITION_AND_COLOR = freezeObject(new VertexFormat({
        position : true,
        color : true
    }));

    return VertexFormat;
});
@@ -2818,31 +2818,252 @@
 %0A         * 
-DOC_TBA
+When %3Ccode%3Etrue%3C/code%3E, the vertex has an RGBA color attribute.%0A         * %3Cp%3E%0A         * 8-bit unsigned byte.  4 components per attribute.%0A         * %3C/p%3E%0A         *%0A         * @type Boolean%0A         *%0A         * @default false
 %0A         */
@@ -4701,32 +4701,414 @@
  true%0A    %7D));%0A%0A
+    /**%0A     * An immutable vertex format with position and color attributes.%0A     * This is compatible with %7B@link PointColorAppearance%7D.%0A     *%0A     * @memberof VertexFormat%0A     *%0A     * @see VertexFormat#position%0A     * @see VertexFormat#color%0A     */%0A    VertexFormat.POSITION_AND_COLOR = freezeObject(new VertexFormat(%7B%0A        position : true,%0A        color : true%0A    %7D));%0A%0A
     /**%0A     * A
@@ -5210,16 +5210,73 @@
 angent.%0A
+     * This does not include %7B@link VertexFormat#color%7D.%0A
      *%0A 
@@ -6149,165 +6149,8 @@
 T;%0A%0A
-    /**%0A     * DOC_TBA%0A     */%0A    VertexFormat.POSITION_AND_COLOR = freezeObject(new VertexFormat(%7B%0A        position : true,%0A        color : true%0A    %7D));%0A%0A
     

Add doc to VertexFormat