src/mesh.c

Wed, 02 Jul 2025 23:21:17 +0200

author
Mike Becker <universe@uap-core.de>
date
Wed, 02 Jul 2025 23:21:17 +0200
changeset 174
0009b982bc7d
parent 145
a3231310d66d
child 175
e5544920377e
permissions
-rw-r--r--

resolve TODOs regarding input.h

a) mouse position must be integer, because it can be negative (though rarely)
b) we should not trade "access complexity" for space in the scancodes array

81
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 /*
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
3 * Copyright 2025 Mike Becker. All rights reserved.
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
4 *
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
5 * Redistribution and use in source and binary forms, with or without
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
6 * modification, are permitted provided that the following conditions are met:
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 *
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 * 1. Redistributions of source code must retain the above copyright
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 * notice, this list of conditions and the following disclaimer.
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10 *
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 * 2. Redistributions in binary form must reproduce the above copyright
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 * notice, this list of conditions and the following disclaimer in the
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13 * documentation and/or other materials provided with the distribution.
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 *
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
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
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
25 * POSSIBILITY OF SUCH DAMAGE.
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26 */
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
27
106
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents: 95
diff changeset
28 #include "ascension/error.h"
81
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
29 #include "ascension/mesh.h"
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
30
122
1b118cd3e369 replace all stdlib malloc/free with UCX allocator
Mike Becker <universe@uap-core.de>
parents: 118
diff changeset
31 #include <cx/allocator.h>
1b118cd3e369 replace all stdlib malloc/free with UCX allocator
Mike Becker <universe@uap-core.de>
parents: 118
diff changeset
32
81
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
33 #include <GL/glew.h>
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
34
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
35 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:
diff changeset
36 asc_dprintf("Allocate mesh buffers for %u meshes.", count);
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
37 GLuint buffers[count];
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
38 GLuint arrays[count];
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
39 glGenBuffers(count, buffers);
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
40 glGenVertexArrays(count, arrays);
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
41 for (unsigned i = 0; i < count; i++) {
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
42 mesh[i].vbo = buffers[i];
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
43 mesh[i].vao = arrays[i];
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
44 }
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
45 asc_error_catch_all_gl();
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
46 }
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
47
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
48 void asc_mesh_free_buffers(AscMesh *mesh, unsigned count) {
115
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
49 if (count == 1 && mesh->vbo == 0) return; // hack to skip this function until we remove it
81
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
50 asc_dprintf("Free mesh buffers for %u meshes.", count);
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
51 GLuint buffers[count];
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
52 GLuint arrays[count];
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
53
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
54 for (unsigned i = 0; i < count; i++) {
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
55 buffers[i] = mesh[i].vbo;
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
56 arrays[i] = mesh[i].vao;
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
57 mesh[i].vbo = 0;
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
58 mesh[i].vao = 0;
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
59 }
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
60
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
61 glDeleteBuffers(count, buffers);
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
62 glDeleteVertexArrays(count, arrays);
84a546e282b7 create catch-all util for GL errors + refactors mesh creation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
63 asc_error_catch_all_gl();
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
64 }
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents: 81
diff changeset
65
115
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
66 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
67 glBindVertexArray(mesh->vao);
115
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
68 glDrawArrays(GL_TRIANGLE_STRIP, 0, mesh->vtx_count);
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
69 #ifndef NDEBUG
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents: 81
diff changeset
70 // only unbind in debug mode to detect accidental re-use of the wrong VAO
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents: 81
diff changeset
71 glBindVertexArray(0);
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents: 81
diff changeset
72 #endif
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents: 81
diff changeset
73 }
115
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
74
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
75 void asc_mesh_destroy(AscMesh *mesh) {
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
76 asc_mesh_free_buffers(mesh, 1);
122
1b118cd3e369 replace all stdlib malloc/free with UCX allocator
Mike Becker <universe@uap-core.de>
parents: 118
diff changeset
77 cxFreeDefault(mesh->vtx_data);
115
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
78 }
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
79
116
bfb2a7d62047 replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents: 115
diff changeset
80 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: 106
diff changeset
81 if (mesh->vbo == 0) {
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
82 asc_mesh_allocate_buffers(mesh, 1);
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
83 }
116
bfb2a7d62047 replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents: 115
diff changeset
84
145
a3231310d66d consistent naming of structs and their typedefs
Mike Becker <universe@uap-core.de>
parents: 122
diff changeset
85 unsigned required_memory = 4 * sizeof(asc_vertex2d);
118
830608f7e7d9 apply texture scaling
Mike Becker <universe@uap-core.de>
parents: 117
diff changeset
86
116
bfb2a7d62047 replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents: 115
diff changeset
87 // free any previous data
118
830608f7e7d9 apply texture scaling
Mike Becker <universe@uap-core.de>
parents: 117
diff changeset
88 if (mesh->vtx_data && mesh->vtx_data_size < required_memory) {
122
1b118cd3e369 replace all stdlib malloc/free with UCX allocator
Mike Becker <universe@uap-core.de>
parents: 118
diff changeset
89 cxFreeDefault(mesh->vtx_data);
118
830608f7e7d9 apply texture scaling
Mike Becker <universe@uap-core.de>
parents: 117
diff changeset
90 mesh->vtx_data = NULL;
830608f7e7d9 apply texture scaling
Mike Becker <universe@uap-core.de>
parents: 117
diff changeset
91 }
830608f7e7d9 apply texture scaling
Mike Becker <universe@uap-core.de>
parents: 117
diff changeset
92
830608f7e7d9 apply texture scaling
Mike Becker <universe@uap-core.de>
parents: 117
diff changeset
93 // allocate memory
145
a3231310d66d consistent naming of structs and their typedefs
Mike Becker <universe@uap-core.de>
parents: 122
diff changeset
94 asc_vertex2d *data;
118
830608f7e7d9 apply texture scaling
Mike Becker <universe@uap-core.de>
parents: 117
diff changeset
95 if (mesh->vtx_data == NULL) {
830608f7e7d9 apply texture scaling
Mike Becker <universe@uap-core.de>
parents: 117
diff changeset
96 asc_dprintf("Create plane in VBO %u and VAO %u", mesh->vbo, mesh->vao);
830608f7e7d9 apply texture scaling
Mike Becker <universe@uap-core.de>
parents: 117
diff changeset
97 mesh->vtx_data_size = required_memory;
122
1b118cd3e369 replace all stdlib malloc/free with UCX allocator
Mike Becker <universe@uap-core.de>
parents: 118
diff changeset
98 data = cxMallocDefault(mesh->vtx_data_size);
118
830608f7e7d9 apply texture scaling
Mike Becker <universe@uap-core.de>
parents: 117
diff changeset
99 mesh->vtx_data = (float*) data;
830608f7e7d9 apply texture scaling
Mike Becker <universe@uap-core.de>
parents: 117
diff changeset
100 } else {
145
a3231310d66d consistent naming of structs and their typedefs
Mike Becker <universe@uap-core.de>
parents: 122
diff changeset
101 data = (asc_vertex2d*) mesh->vtx_data;
118
830608f7e7d9 apply texture scaling
Mike Becker <universe@uap-core.de>
parents: 117
diff changeset
102 }
830608f7e7d9 apply texture scaling
Mike Becker <universe@uap-core.de>
parents: 117
diff changeset
103 mesh->vtx_count = 4;
116
bfb2a7d62047 replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents: 115
diff changeset
104
bfb2a7d62047 replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents: 115
diff changeset
105 // default values
117
d1267f656a97 implement texture scaling
Mike Becker <universe@uap-core.de>
parents: 116
diff changeset
106 args.size.x = ASC_NONZERO_OR(1.f, args.size.x);
d1267f656a97 implement texture scaling
Mike Becker <universe@uap-core.de>
parents: 116
diff changeset
107 args.size.y = ASC_NONZERO_OR(1.f, args.size.y);
d1267f656a97 implement texture scaling
Mike Becker <universe@uap-core.de>
parents: 116
diff changeset
108 args.uv_scale.x = ASC_NONZERO_OR(1.f, args.uv_scale.x);
d1267f656a97 implement texture scaling
Mike Becker <universe@uap-core.de>
parents: 116
diff changeset
109 args.uv_scale.y = ASC_NONZERO_OR(1.f, args.uv_scale.y);
116
bfb2a7d62047 replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents: 115
diff changeset
110
118
830608f7e7d9 apply texture scaling
Mike Becker <universe@uap-core.de>
parents: 117
diff changeset
111 // bottom left
830608f7e7d9 apply texture scaling
Mike Becker <universe@uap-core.de>
parents: 117
diff changeset
112 data[0].pos = asc_vec2f_new(0.0f, 0.0f);
830608f7e7d9 apply texture scaling
Mike Becker <universe@uap-core.de>
parents: 117
diff changeset
113 data[0].uv = asc_vec2f_new(args.uv_offset.x, args.uv_offset.y);
830608f7e7d9 apply texture scaling
Mike Becker <universe@uap-core.de>
parents: 117
diff changeset
114 // top left
830608f7e7d9 apply texture scaling
Mike Becker <universe@uap-core.de>
parents: 117
diff changeset
115 data[1].pos = asc_vec2f_new(0.0f, args.size.y);
830608f7e7d9 apply texture scaling
Mike Becker <universe@uap-core.de>
parents: 117
diff changeset
116 data[1].uv = asc_vec2f_new(args.uv_offset.x, args.uv_offset.y + args.uv_scale.y);
830608f7e7d9 apply texture scaling
Mike Becker <universe@uap-core.de>
parents: 117
diff changeset
117 // bottom right
830608f7e7d9 apply texture scaling
Mike Becker <universe@uap-core.de>
parents: 117
diff changeset
118 data[2].pos = asc_vec2f_new(args.size.x, 0.0f);
830608f7e7d9 apply texture scaling
Mike Becker <universe@uap-core.de>
parents: 117
diff changeset
119 data[2].uv = asc_vec2f_new(args.uv_offset.x + args.uv_scale.x, args.uv_offset.y);
830608f7e7d9 apply texture scaling
Mike Becker <universe@uap-core.de>
parents: 117
diff changeset
120 // top right
830608f7e7d9 apply texture scaling
Mike Becker <universe@uap-core.de>
parents: 117
diff changeset
121 data[3].pos = asc_vec2f_new(args.size.x, args.size.y);
830608f7e7d9 apply texture scaling
Mike Becker <universe@uap-core.de>
parents: 117
diff changeset
122 data[3].uv = asc_vec2f_new(args.uv_offset.x + args.uv_scale.x, args.uv_offset.y + args.uv_scale.y);
115
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
123 glBindBuffer(GL_ARRAY_BUFFER, mesh->vbo);
118
830608f7e7d9 apply texture scaling
Mike Becker <universe@uap-core.de>
parents: 117
diff changeset
124 glBufferData(GL_ARRAY_BUFFER, mesh->vtx_data_size, mesh->vtx_data, GL_STATIC_DRAW);
116
bfb2a7d62047 replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents: 115
diff changeset
125 // TODO: this should not be repeated for every adjustment - but it will be moved to the batch renderer anyway
115
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
126 glBindVertexArray(mesh->vao);
145
a3231310d66d consistent naming of structs and their typedefs
Mike Becker <universe@uap-core.de>
parents: 122
diff changeset
127 glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(asc_vertex2d), (void*)offsetof(asc_vertex2d, pos));
115
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
128 glEnableVertexAttribArray(0);
145
a3231310d66d consistent naming of structs and their typedefs
Mike Becker <universe@uap-core.de>
parents: 122
diff changeset
129 glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(asc_vertex2d), (void*)offsetof(asc_vertex2d, uv));
115
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
130 glEnableVertexAttribArray(1);
e5f8c99b0987 refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
131 }

mercurial