Avoid bottle-neck while drwing lines, fix surface

This commit is contained in:
PedroEdiaz
2024-12-01 12:19:53 -06:00
parent 8be2052c45
commit 6c322a9759
4 changed files with 45 additions and 38 deletions

View File

@@ -84,17 +84,17 @@ void main_loop(void)
#ifndef DEBUG #ifndef DEBUG
load_mdl_matrix(shader_plain, 0, 0); load_mdl_matrix(shader_plain, 0, 0);
draw_mesh(m_axis, 1); draw_mesh(m_axis);
load_mdl_matrix(shader_plain, 1, 1); load_mdl_matrix(shader_plain, 1, 1);
draw_mesh(m_axis, 1); draw_mesh(m_axis);
load_mdl_matrix(shader_plain, 2, 2); load_mdl_matrix(shader_plain, 2, 2);
draw_mesh(m_axis, 1); draw_mesh(m_axis);
#endif #endif
load_mdl_matrix(shader, 0, 3); load_mdl_matrix(shader, 0, 3);
draw_mesh(m_surface, 0); draw_mesh(m_surface);
load_mdl_matrix(shader_plain, 0, 3); load_mdl_matrix(shader_plain, 0, 3);
draw_mesh(m_surface, 1); draw_mesh_lines(m_surface);
} }
int main(void) int main(void)

View File

@@ -57,7 +57,9 @@ void set_projection_mesh( struct projection );
void destroy_mesh(mesh_t p); void destroy_mesh(mesh_t p);
void draw_mesh(mesh_t p, char lines); void draw_mesh(mesh_t p);
void draw_mesh_lines(mesh_t p);
/* /*
Set background color: Set background color:

View File

@@ -91,19 +91,19 @@ void destroy_mesh(mesh_t p)
free(p); free(p);
} }
void draw_mesh(mesh_t p, char lines ) void draw_mesh(mesh_t p)
{ {
struct obj *obj = p; struct obj *obj = p;
glBindVertexArray(obj->vao); glBindVertexArray(obj->vao);
if( lines ) glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
{ glDrawArrays(GL_TRIANGLES, 0, obj->vertex);
int i; }
for (i = 0; i < obj->vertex; i += 3) void draw_mesh_lines(mesh_t p)
glDrawArrays(GL_LINE_LOOP, i, 3); {
} struct obj *obj = p;
else
{ glBindVertexArray(obj->vao);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glDrawArrays(GL_TRIANGLES, 0, obj->vertex); glDrawArrays(GL_TRIANGLES, 0, obj->vertex);
}
} }

View File

@@ -20,6 +20,7 @@
#ifdef TEST #ifdef TEST
#include <assert.h> #include <assert.h>
#endif #endif
#include <stdio.h>
typedef void (*function_t)(float *, int *, int); typedef void (*function_t)(float *, int *, int);
@@ -62,8 +63,13 @@ void riemman(float *d_surface, int *coords, int grid)
void cube(float *d_surface, int *coord, int grid) void cube(float *d_surface, int *coord, int grid)
{ {
for (int i = 0; i < parm.m; i++) int i;
d_surface[i] = ((float)coord[i] / grid) - 0.5;
for (i = 0; i < parm.m; i++)
d_surface[i] = (2*(float)coord[i] / grid) - 1;
if( parm.m == 2 )
d_surface[2]=0;
} }
void mobius(float *d_surface, int *coord, int grid) void mobius(float *d_surface, int *coord, int grid)
@@ -103,13 +109,12 @@ float *generate_data_surface(unsigned char *s)
unsigned int i, j, k, o, p, n; unsigned int i, j, k, o, p, n;
long size, q = 0; long size, q = 0;
float *d_surface; float *d_surface;
int *cara; int *cara;
parm.f = cube; parm.f = klein;
parm.m = 6; parm.m = 2;
parm.n = parm.m; parm.n = 4;
parm.grid = 1; parm.grid = 16;
#ifdef TEST #ifdef TEST
assert(numero_caras(2) == 1); assert(numero_caras(2) == 1);
@@ -117,9 +122,9 @@ float *generate_data_surface(unsigned char *s)
assert(numero_caras(4) == 24); assert(numero_caras(4) == 24);
#endif #endif
cara = malloc(parm.m * sizeof(int)); *s = parm.n;
*s = parm.m;
cara = malloc(parm.m * sizeof(int));
size = parm.grid * parm.grid * 6 * (parm.n) * numero_caras(parm.m); size = parm.grid * parm.grid * 6 * (parm.n) * numero_caras(parm.m);
d_surface = malloc((size + 1) * sizeof(float)); d_surface = malloc((size + 1) * sizeof(float));
d_surface[0] = size; d_surface[0] = size;
@@ -143,33 +148,33 @@ float *generate_data_surface(unsigned char *s)
{ {
for (j = 0; j < parm.grid; j++) for (j = 0; j < parm.grid; j++)
{ {
cara[o] = i; cara[p] = i;
cara[p] = j; cara[o] = j;
parm.f(&d_surface[q + 1], cara, parm.grid); parm.f(&d_surface[q + 1], cara, parm.grid);
q += parm.n; q += parm.n;
cara[o] = i + 1; cara[p] = i + 1;
// cara[p] = j; cara[o] = j;
parm.f(&d_surface[q + 1], cara, parm.grid); parm.f(&d_surface[q + 1], cara, parm.grid);
q += parm.n; q += parm.n;
// cara[o] = i + 1; cara[p] = i + 1;
cara[p] = j + 1; cara[o] = j + 1;
parm.f(&d_surface[q + 1], cara, parm.grid); parm.f(&d_surface[q + 1], cara, parm.grid);
q += parm.n; q += parm.n;
cara[o] = i; cara[p] = i;
cara[p] = j; cara[o] = j;
parm.f(&d_surface[q + 1], cara, parm.grid); parm.f(&d_surface[q + 1], cara, parm.grid);
q += parm.n; q += parm.n;
// cara[o] = i; cara[p] = i;
cara[p] = j + 1; cara[o] = j + 1;
parm.f(&d_surface[q + 1], cara, parm.grid); parm.f(&d_surface[q + 1], cara, parm.grid);
q += parm.n; q += parm.n;
cara[o] = i + 1; cara[p] = i + 1;
// cara [p] = j + 1; cara[o] = j + 1;
parm.f(&d_surface[q + 1], cara, parm.grid); parm.f(&d_surface[q + 1], cara, parm.grid);
q += parm.n; q += parm.n;
} }