diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-05-13 17:14:08 +0200 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-05-13 17:14:08 +0200 |
| commit | 46f56c104218f675daf2feb1366f53f4d84a1886 (patch) | |
| tree | 6b3a324e160bc601ff724d59dca5ed7d9f6a2766 /src/texture.c | |
| parent | 0267b512527b85af6cd815bb9215bd659b75931e (diff) | |
| download | scop-46f56c104218f675daf2feb1366f53f4d84a1886.tar.gz scop-46f56c104218f675daf2feb1366f53f4d84a1886.tar.bz2 scop-46f56c104218f675daf2feb1366f53f4d84a1886.zip | |
Very ugly and not working texture
Diffstat (limited to 'src/texture.c')
| -rw-r--r-- | src/texture.c | 54 |
1 files changed, 47 insertions, 7 deletions
diff --git a/src/texture.c b/src/texture.c index e499af6..75f4797 100644 --- a/src/texture.c +++ b/src/texture.c @@ -6,21 +6,60 @@ /* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/05/11 14:27:34 by charles #+# #+# */ -/* Updated: 2020/05/11 16:19:56 by charles ### ########.fr */ +/* Updated: 2020/05/13 17:11:06 by charles ### ########.fr */ /* */ /* ************************************************************************** */ #include "scop.h" +typedef struct __attribute__((__packed__)) +{ + uint8_t signature[2]; + uint32_t file_size; + uint32_t reserved; + uint32_t img_data_offset; +} t_bmp_file_header; + +typedef struct __attribute__((__packed__)) +{ + uint32_t header_size; + uint32_t width; + uint32_t height; + uint16_t color_planes; + uint16_t depth; + uint32_t compression; + uint32_t image_size; + uint32_t horizontal_res; + uint32_t vertical_res; + uint32_t color_table_len; + uint32_t color_count; +} t_bmp_info_header; + uint8_t *st_read_bmp(char *filepath, size_t *width, size_t *height) { - t_ftmem file; + uint8_t *data; + t_bmp_file_header file_header; + t_bmp_info_header info_header; + int fd; - if (ft_getfile(open(filepath, O_RDONLY), &file) == -1) + fd = open(filepath, O_RDONLY); + read(fd, &file_header, sizeof(t_bmp_file_header)); + if (file_header.signature[0] != 'B' || file_header.signature[1] != 'M') + { + close(fd); + return (NULL); + } + read(fd, &info_header, sizeof(t_bmp_info_header)); + if ((data = malloc(info_header.image_size)) == NULL) + { + close(fd); return (NULL); - *width = 0; - *height = 0; - return (file.data); + } + *width = info_header.width; + *height = info_header.height; + read(fd, data, info_header.image_size); // padding + close(fd); + return (data); } unsigned int texture_new(char *filepath) @@ -38,7 +77,8 @@ unsigned int texture_new(char *filepath) GL_CALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)); GL_CALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)); GL_CALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)); - GL_CALL(glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data)); + GL_CALL(glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data)); + /* glBindTexture(GL_TEXTURE_2D, 0); */ free(data); return (texture); } |
