214902e9a2b2f674e7dfaf29ad30638a3ce10d7f
[blender.git] / intern / gawain / gawain / primitive.h
1
2 // Gawain geometric primitives
3 //
4 // This code is part of the Gawain library, with modifications
5 // specific to integration with Blender.
6 //
7 // Copyright 2017 Mike Erwin
8 //
9 // This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of
10 // the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
11
12 #pragma once
13
14 #include "common.h"
15
16 typedef enum {
17         PRIM_POINTS = GL_POINTS,
18         PRIM_LINES = GL_LINES,
19         PRIM_TRIANGLES = GL_TRIANGLES,
20
21 #ifdef WITH_GL_PROFILE_COMPAT
22         PRIM_QUADS_XXX = GL_QUADS, // legacy GL has this, modern GL & Vulkan do not
23 #endif
24
25         PRIM_LINE_STRIP = GL_LINE_STRIP,
26         PRIM_LINE_STRIP_ADJACENCY = GL_LINE_STRIP_ADJACENCY,
27         PRIM_LINE_LOOP = GL_LINE_LOOP, // GL has this, Vulkan does not
28         PRIM_TRIANGLE_STRIP = GL_TRIANGLE_STRIP,
29         PRIM_TRIANGLE_FAN = GL_TRIANGLE_FAN,
30
31         PRIM_NONE = 0xF
32 } PrimitiveType;
33
34 // what types of primitives does each shader expect?
35 typedef enum {
36         PRIM_CLASS_NONE    = 0,
37         PRIM_CLASS_POINT   = (1 << 0),
38         PRIM_CLASS_LINE    = (1 << 1),
39         PRIM_CLASS_SURFACE = (1 << 2),
40         PRIM_CLASS_ANY     = PRIM_CLASS_POINT | PRIM_CLASS_LINE | PRIM_CLASS_SURFACE
41 } PrimitiveClass;
42
43 PrimitiveClass prim_class_of_type(PrimitiveType);
44 bool prim_type_belongs_to_class(PrimitiveType, PrimitiveClass);