src/ascension/mesh.h

Sun, 20 Jul 2025 23:31:40 +0200

author
Mike Becker <universe@uap-core.de>
date
Sun, 20 Jul 2025 23:31:40 +0200
changeset 216
943980fa37b5
parent 145
a3231310d66d
child 220
6b266e907f89
permissions
-rw-r--r--

snap the movement to the grid

3
1efd6da2ad53 add datatypes.h
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 /*
1efd6da2ad53 add datatypes.h
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
1efd6da2ad53 add datatypes.h
Mike Becker <universe@uap-core.de>
parents:
diff changeset
3 * Copyright 2023 Mike Becker. All rights reserved.
1efd6da2ad53 add datatypes.h
Mike Becker <universe@uap-core.de>
parents:
diff changeset
4 *
1efd6da2ad53 add datatypes.h
Mike Becker <universe@uap-core.de>
parents:
diff changeset
5 * Redistribution and use in source and binary forms, with or without
1efd6da2ad53 add datatypes.h
Mike Becker <universe@uap-core.de>
parents:
diff changeset
6 * modification, are permitted provided that the following conditions are met:
1efd6da2ad53 add datatypes.h
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 *
1efd6da2ad53 add datatypes.h
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 * 1. Redistributions of source code must retain the above copyright
1efd6da2ad53 add datatypes.h
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 * notice, this list of conditions and the following disclaimer.
1efd6da2ad53 add datatypes.h
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10 *
1efd6da2ad53 add datatypes.h
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 * 2. Redistributions in binary form must reproduce the above copyright
1efd6da2ad53 add datatypes.h
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 * notice, this list of conditions and the following disclaimer in the
1efd6da2ad53 add datatypes.h
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13 * documentation and/or other materials provided with the distribution.
1efd6da2ad53 add datatypes.h
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 *
1efd6da2ad53 add datatypes.h
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
1efd6da2ad53 add datatypes.h
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1efd6da2ad53 add datatypes.h
Mike Becker <universe@uap-core.de>
parents:
diff changeset
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1efd6da2ad53 add datatypes.h
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
1efd6da2ad53 add datatypes.h
Mike Becker <universe@uap-core.de>
parents:
diff changeset
19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
1efd6da2ad53 add datatypes.h
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
1efd6da2ad53 add datatypes.h
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
1efd6da2ad53 add datatypes.h
Mike Becker <universe@uap-core.de>
parents:
diff changeset
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
1efd6da2ad53 add datatypes.h
Mike Becker <universe@uap-core.de>
parents:
diff changeset
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
1efd6da2ad53 add datatypes.h
Mike Becker <universe@uap-core.de>
parents:
diff changeset
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
1efd6da2ad53 add datatypes.h
Mike Becker <universe@uap-core.de>
parents:
diff changeset
25 * POSSIBILITY OF SUCH DAMAGE.
1efd6da2ad53 add datatypes.h
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26 */
1efd6da2ad53 add datatypes.h
Mike Becker <universe@uap-core.de>
parents:
diff changeset
27
16
c5dde81b6fb2 add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents: 14
diff changeset
28 #ifndef ASCENSION_MESH_H
c5dde81b6fb2 add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents: 14
diff changeset
29 #define ASCENSION_MESH_H
4
b7acda6a4476 add simple color data types
Mike Becker <universe@uap-core.de>
parents: 3
diff changeset
30
115
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
31 #include "datatypes.h"
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
32
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
33 enum AscMeshType {
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
34 ASC_MESH_2D,
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
35 ASC_MESH_2D_COLORED,
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
36 ASC_MESH_3D,
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
37 ASC_MESH_3D_COLORED,
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
38 };
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
39
145
a3231310d66d consistent naming of structs and their typedefs
Mike Becker <universe@uap-core.de>
parents: 118
diff changeset
40 typedef struct asc_mesh_s {
115
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
41 // TODO: for batched rendering, VAO and VBO must not be part of the mesh
16
c5dde81b6fb2 add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents: 14
diff changeset
42 unsigned vbo;
c5dde81b6fb2 add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents: 14
diff changeset
43 unsigned vao;
115
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
44 enum AscMeshType type;
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
45 unsigned vtx_count;
118
830608f7e7d9 apply texture scaling
Mike Becker <universe@uap-core.de>
parents: 116
diff changeset
46 unsigned vtx_data_size;
115
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
47 float *vtx_data;
16
c5dde81b6fb2 add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents: 14
diff changeset
48 } AscMesh;
11
d83af80eb09b add font management
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
49
145
a3231310d66d consistent naming of structs and their typedefs
Mike Becker <universe@uap-core.de>
parents: 118
diff changeset
50 typedef struct asc_vertex2d {
115
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
51 asc_vec2f pos;
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
52 asc_vec2f uv;
145
a3231310d66d consistent naming of structs and their typedefs
Mike Becker <universe@uap-core.de>
parents: 118
diff changeset
53 } asc_vertex2d;
115
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
54
145
a3231310d66d consistent naming of structs and their typedefs
Mike Becker <universe@uap-core.de>
parents: 118
diff changeset
55 typedef struct asc_vertex2d_col {
115
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
56 asc_vec2f pos;
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
57 asc_vec2f uv;
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
58 asc_col4f color;
145
a3231310d66d consistent naming of structs and their typedefs
Mike Becker <universe@uap-core.de>
parents: 118
diff changeset
59 } asc_vertex2d_col;
115
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
60
145
a3231310d66d consistent naming of structs and their typedefs
Mike Becker <universe@uap-core.de>
parents: 118
diff changeset
61 typedef struct asc_vertex3d {
115
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
62 asc_vec3f pos;
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
63 asc_vec2f uv;
145
a3231310d66d consistent naming of structs and their typedefs
Mike Becker <universe@uap-core.de>
parents: 118
diff changeset
64 } asc_vertex3d;
115
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
65
145
a3231310d66d consistent naming of structs and their typedefs
Mike Becker <universe@uap-core.de>
parents: 118
diff changeset
66 typedef struct asc_vertex3d_col {
115
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
67 asc_vec3f pos;
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
68 asc_vec2f uv;
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
69 asc_col4f color;
145
a3231310d66d consistent naming of structs and their typedefs
Mike Becker <universe@uap-core.de>
parents: 118
diff changeset
70 } asc_vertex3d_col;
115
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
71
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
72
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
73 void asc_mesh_destroy(AscMesh *mesh);
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
74
116
bfb2a7d62047 replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents: 115
diff changeset
75 struct asc_mesh_init_plane_2d_args {
bfb2a7d62047 replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents: 115
diff changeset
76 asc_vec2f size;
bfb2a7d62047 replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents: 115
diff changeset
77 asc_vec2f uv_offset;
bfb2a7d62047 replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents: 115
diff changeset
78 asc_vec2f uv_scale;
bfb2a7d62047 replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents: 115
diff changeset
79 };
115
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
80
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
81 /**
116
bfb2a7d62047 replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents: 115
diff changeset
82 * Write a 2D plane to the specified mesh data.
115
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
83 *
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
84 * @param mesh the mesh to initialize
116
bfb2a7d62047 replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents: 115
diff changeset
85 * @param ... the initialization parameters
115
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
86 */
116
bfb2a7d62047 replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents: 115
diff changeset
87 #define asc_mesh_plane_2d(mesh, ...) asc_mesh_init_plane_2d(mesh, (struct asc_mesh_init_plane_2d_args){__VA_ARGS__})
bfb2a7d62047 replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents: 115
diff changeset
88
bfb2a7d62047 replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents: 115
diff changeset
89 void asc_mesh_init_plane_2d(AscMesh *mesh, struct asc_mesh_init_plane_2d_args args);
115
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
90
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
91
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
92
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
93 // TODO: replace below functions with a batched rendering implementation
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
94
81
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents: 16
diff changeset
95 /**
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents: 16
diff changeset
96 * Allocates VBO and VAO for one or more meshes.
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents: 16
diff changeset
97 *
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents: 16
diff changeset
98 * @param mesh pointer to a mesh or an array of meshes
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents: 16
diff changeset
99 * @param count the number of meshes (maximum 32)
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents: 16
diff changeset
100 */
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents: 16
diff changeset
101 void asc_mesh_allocate_buffers(AscMesh *mesh, unsigned count);
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents: 16
diff changeset
102
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents: 16
diff changeset
103 /**
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents: 16
diff changeset
104 * Frees VBO and VAO for one or more meshes.
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents: 16
diff changeset
105 *
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents: 16
diff changeset
106 * @param mesh pointer to a mesh or an array of meshes
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents: 16
diff changeset
107 * @param count the number of meshes (maximum 32)
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents: 16
diff changeset
108 */
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents: 16
diff changeset
109 void asc_mesh_free_buffers(AscMesh *mesh, unsigned count);
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents: 16
diff changeset
110
82
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents: 81
diff changeset
111 /**
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents: 81
diff changeset
112 * Draws the mesh as a triangle strip.
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents: 81
diff changeset
113 *
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents: 81
diff changeset
114 * @param mesh the mesh to draw
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents: 81
diff changeset
115 */
115
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
116 void asc_mesh_draw_triangle_strip(const AscMesh *mesh);
82
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents: 81
diff changeset
117
16
c5dde81b6fb2 add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents: 14
diff changeset
118 #endif //ASCENSION_MESH_H

mercurial