diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-05-11 02:19:18 +0200 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-05-11 02:19:18 +0200 |
| commit | 6623e7fbdb4307536d3f5920c267c74f8bc6a989 (patch) | |
| tree | aa90789d7e5195e747997b507d09066c3758d777 /src | |
| parent | d153f42e732ffe1c4cac1c13207fa0ce1781b193 (diff) | |
| download | scop-6623e7fbdb4307536d3f5920c267c74f8bc6a989.tar.gz scop-6623e7fbdb4307536d3f5920c267c74f8bc6a989.tar.bz2 scop-6623e7fbdb4307536d3f5920c267c74f8bc6a989.zip | |
Generating triangles for polygon face in .obj file, opengl error/initialisation
Diffstat (limited to 'src')
| -rw-r--r-- | src/error.c | 42 | ||||
| -rw-r--r-- | src/gl.c | 27 | ||||
| -rw-r--r-- | src/glfw.c | 30 | ||||
| -rw-r--r-- | src/main.c | 40 | ||||
| -rw-r--r-- | src/parse.c | 18 |
5 files changed, 131 insertions, 26 deletions
diff --git a/src/error.c b/src/error.c new file mode 100644 index 0000000..17e2611 --- /dev/null +++ b/src/error.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* error.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/05/11 01:43:45 by charles #+# #+# */ +/* Updated: 2020/05/11 01:55:03 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "scop.h" + +void error_clear(void) +{ + while (glGetError() != GL_NO_ERROR) + ; +} + +void error_check(char *code, char *filename, int line_num) +{ + GLenum err; + bool occured; + + occured = false; + while ((err = glGetError()) != GL_NO_ERROR) + { + ft_putstr("[ERROR opengl] ("); + ft_putnbr(err); + ft_putstr(") "); + ft_putstr(code); + ft_putstr(" at "); + ft_putstr(filename); + ft_putchar(':'); + ft_putnbr(line_num); + ft_putchar('\n'); + occured = true; + } + if (occured) + exit(EXIT_FAILURE); +} diff --git a/src/gl.c b/src/gl.c new file mode 100644 index 0000000..c28bf9e --- /dev/null +++ b/src/gl.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* gl.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/05/11 01:31:10 by charles #+# #+# */ +/* Updated: 2020/05/11 02:17:16 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "scop.h" + +int gl_state_init(t_gl_state *state, t_object *object) +{ + GL_CALL(glGenBuffers(1, &state->vertex_buf)); + GL_CALL(glBindBuffer(GL_ARRAY_BUFFER, state->vertex_buf)); + GL_CALL(glBufferData(GL_ARRAY_BUFFER, sizeof(float) * object->vertices_len, + object->vertices, GL_STATIC_DRAW)); + + GL_CALL(glGenBuffers(1, &state->index_buf)); + GL_CALL(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, state->index_buf)); + GL_CALL(glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(float) * object->indices_len, + object->indices, GL_STATIC_DRAW)); + return (0); +} diff --git a/src/glfw.c b/src/glfw.c new file mode 100644 index 0000000..8afdfe4 --- /dev/null +++ b/src/glfw.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* glfw.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/05/11 01:58:00 by charles #+# #+# */ +/* Updated: 2020/05/11 02:16:58 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "scop.h" + +GLFWwindow *glfw_init(int width, int height) +{ + GLFWwindow *window; + + if (!glfwInit()) + return (NULL); + window = glfwCreateWindow(width, height, "scop", NULL, NULL); + if (window == NULL) + { + glfwTerminate(); + return (NULL); + } + glfwMakeContextCurrent(window); + glewInit(); + return (window); +} @@ -6,7 +6,7 @@ /* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/05/09 10:20:09 by charles #+# #+# */ -/* Updated: 2020/05/10 22:02:36 by charles ### ########.fr */ +/* Updated: 2020/05/11 02:14:14 by charles ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,8 +14,9 @@ int main(int argc, char **argv) { - /* GLFWwindow *window; */ + GLFWwindow *window; t_object object; + t_gl_state state; if (argc != 2) { @@ -31,28 +32,23 @@ int main(int argc, char **argv) return (1); } - for (size_t i = 0; i < object.indices_len; i++) - printf("%u\n", object.indices[i]); - for (size_t i = 0; i < object.vertices_len; i++) - printf("%f\n", object.vertices[i]); + /* for (size_t i = 0; i < object.indices_len; i++) */ + /* printf("%u\n", object.indices[i]); */ + /* for (size_t i = 0; i < object.vertices_len; i++) */ + /* printf("%f\n", object.vertices[i]); */ + /* printf("%lu\n", object.indices_len); */ + if ((window = glfw_init(400, 400)) == NULL + || gl_state_init(&state, &object) == -1) + return (1); + while (!glfwWindowShouldClose(window)) + { + glClear(GL_COLOR_BUFFER_BIT); + glfwSwapBuffers(window); + glfwPollEvents(); + } + glfwTerminate(); free(object.vertices); free(object.indices); - /* if (!glfwInit()) */ - /* return 1; */ - /* window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL); */ - /* if (window == NULL) */ - /* { */ - /* glfwTerminate(); */ - /* return 1; */ - /* } */ - /* glfwMakeContextCurrent(window); */ - /* while (!glfwWindowShouldClose(window)) */ - /* { */ - /* glClear(GL_COLOR_BUFFER_BIT); */ - /* glfwSwapBuffers(window); */ - /* glfwPollEvents(); */ - /* } */ - /* glfwTerminate(); */ return 0; } diff --git a/src/parse.c b/src/parse.c index fa9f2b5..b83d9e8 100644 --- a/src/parse.c +++ b/src/parse.c @@ -6,27 +6,37 @@ /* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/05/09 11:02:00 by charles #+# #+# */ -/* Updated: 2020/05/10 22:04:05 by charles ### ########.fr */ +/* Updated: 2020/05/11 01:29:13 by charles ### ########.fr */ /* */ /* ************************************************************************** */ #include "scop.h" -#define SCOP_VEC_DEFAULT_SIZE 32 +#define SCOP_VEC_DEFAULT_SIZE 64 static int st_parse_face(char **indexes_strs, t_ftvec *indices) { size_t i; size_t len; + unsigned int first; unsigned int tmp; len = ft_split_len(indexes_strs); - i = -1; - while (++i < len) + first = ft_atoi(indexes_strs[0]); + /* if (ft_vecpush(indices, *(void**)&first) == NULL) */ + /* return (-1); */ + i = 1; + while (i < len - 1) { + if (ft_vecpush(indices, *(void**)&first) == NULL) + return (-1); tmp = ft_atoi(indexes_strs[i]); if (ft_vecpush(indices, *(void**)&tmp) == NULL) return (-1); + tmp = ft_atoi(indexes_strs[i + 1]); + if (ft_vecpush(indices, *(void**)&tmp) == NULL) + return (-1); + i++; } return (0); } |
