Avoid bottle-neck while drwing lines, fix surface
This commit is contained in:
10
src/main.c
10
src/main.c
@@ -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)
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
22
src/mesh.c
22
src/mesh.c
@@ -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);
|
||||||
glDrawArrays(GL_TRIANGLES, 0, obj->vertex);
|
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
|
||||||
}
|
glDrawArrays(GL_TRIANGLES, 0, obj->vertex);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user