VkPrimitiveTopology
The primitive topologies defined by VkPrimitiveTopology are:
typedef enum VkPrimitiveTopology {
VK_PRIMITIVE_TOPOLOGY_POINT_LIST = 0,
VK_PRIMITIVE_TOPOLOGY_LINE_LIST = 1,
VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = 2,
VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = 3,
VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = 4,
VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = 5,
VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = 6,
VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = 7,
VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = 8,
VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = 9,
VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = 10,
} VkPrimitiveTopology;
VK_PRIMITIVE_TOPOLOGY_POINT_LIST
specifies a series of separate point primitives.VK_PRIMITIVE_TOPOLOGY_LINE_LIST
specifies a series of separate line primitives.VK_PRIMITIVE_TOPOLOGY_LINE_STRIP
specifies a series of connected line primitives with consecutive lines sharing a vertex.VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST
specifies a series of separate triangle primitives.VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP
specifies a series of connected triangle primitives with consecutive triangles sharing an edge.VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN
specifies a series of connected triangle primitives with all triangles sharing a common vertex. If the VK_KHR_portability_subset extension is enabled, and VkPhysicalDevicePortabilitySubsetFeaturesKHR::triangleFans
isVK_FALSE
, then triangle fans are not supported by the implementation, andVK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN
must not be used.VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY
specifies a series of separate line primitives with adjacency.VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY
specifies a series of connected line primitives with adjacency, with consecutive primitives sharing three vertices.VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY
specifies a series of separate triangle primitives with adjacency.VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY
specifies connected triangle primitives with adjacency, with consecutive triangles sharing an edge.VK_PRIMITIVE_TOPOLOGY_PATCH_LIST
specifies separate patch primitives.
Each primitive topology, and its construction from a list of vertices, is described in detail below with a supporting diagram, according to the following key:
Vertex | A point in 3-dimensional space. Positions chosen within the diagrams are arbitrary and for illustration only. | |
Vertex Number | Sequence position of a vertex within the provided vertex data. | |
Provoking Vertex | Provoking vertex within the main primitive. The tail is angled towards the relevant primitive. Used in flat shading. | |
Primitive Edge | An edge connecting the points of a main primitive. | |
Adjacency Edge | Points connected by these lines do not contribute to a main primitive, and are only accessible in a geometry shader. | |
Winding Order | The relative order in which vertices are defined within a primitive, used in the facing determination. This ordering has no specific start or end point. |
The diagrams are supported with mathematical definitions where the vertices (v) and primitives (p) are numbered starting from 0; v0 is the first vertex in the provided data and p0 is the first primitive in the set of primitives defined by the vertices and topology.