]> git.lizzy.rs Git - dragonblocks_alpha.git/commitdiff
Add texture type that includes id, width and height instead of just ID
authorElias Fleckenstein <eliasfleckenstein@web.de>
Mon, 12 Jul 2021 09:33:51 +0000 (11:33 +0200)
committerElias Fleckenstein <eliasfleckenstein@web.de>
Mon, 12 Jul 2021 09:33:51 +0000 (11:33 +0200)
src/clientnode.c
src/clientnode.h
src/mesh.c
src/mesh.h
src/texture.c
src/texture.h

index b82625a931d908991de0a9dd942d2a8b4c0e2aa2..7e502d310b195940ab87c11f93eadd4404031088 100644 (file)
@@ -4,11 +4,11 @@
 #include "texture.h"
 
 ClientNodeDefintion client_node_definitions[NODE_UNLOADED] = {
-       {RESSOURCEPATH "textures/invalid.png", 0},
-       {NULL, 0},
-       {RESSOURCEPATH "textures/grass.png", 0},
-       {RESSOURCEPATH "textures/dirt.png", 0},
-       {RESSOURCEPATH "textures/stone.png", 0},
+       {RESSOURCEPATH "textures/invalid.png", NULL},
+       {NULL, NULL},
+       {RESSOURCEPATH "textures/grass.png", NULL},
+       {RESSOURCEPATH "textures/dirt.png", NULL},
+       {RESSOURCEPATH "textures/stone.png", NULL},
 };
 
 void init_client_node_definitions()
index e51616b0c88334ff3c46fc49ea1ba8712d3d442c..8ee6028f8ead03d7497b0ecdd06a92654a187c58 100644 (file)
@@ -2,11 +2,12 @@
 #define _CLIENTNODE_H_
 
 #include "node.h"
+#include "texture.h"
 
 typedef struct
 {
        char *texture_path;
-       GLuint texture;
+       Texture *texture;
 } ClientNodeDefintion;
 
 extern ClientNodeDefintion client_node_definitions[];
index f2352174b95b523eb10c5863b682118adbf81055..f4db6cf30115af2b81d702e2d7272ffbeb3f5757 100644 (file)
@@ -11,12 +11,12 @@ VertexBuffer vertexbuffer_create()
        };
 }
 
-void vertexbuffer_set_texture(VertexBuffer *buffer, GLuint texture)
+void vertexbuffer_set_texture(VertexBuffer *buffer, Texture *texture)
 {
-       if (buffer->current && buffer->current->texture == texture)
+       if (buffer->current && buffer->current->texture == texture->id)
                return;
        Face face = {
-               .texture = texture,
+               .texture = texture->id,
                .vertices = array_create(sizeof(Vertex)),
        };
        array_append(&buffer->faces, &face);
index 15a2011a6265cabed32939a2b8c9dce6d2e248af..e4eb4b4dff900da0bb34c38d3de1e0d8db1ae69a 100644 (file)
@@ -7,6 +7,7 @@
 #include <stdbool.h>
 #include "array.h"
 #include "shaders.h"
+#include "texture.h"
 #include "types.h"
 
 typedef struct
@@ -50,7 +51,7 @@ typedef struct
 struct Scene;
 
 VertexBuffer vertexbuffer_create();
-void vertexbuffer_set_texture(VertexBuffer *buffer, GLuint texture);
+void vertexbuffer_set_texture(VertexBuffer *buffer, Texture *texture);
 void vertexbuffer_add_vertex(VertexBuffer *buffer, Vertex *vertex);
 
 MeshObject *meshobject_create(VertexBuffer buffer, struct Scene *scene, v3f pos);
index 9f32b9e4b60270698f3d109510985feff341a565..17844b23be7b47fe5265b8e0666f651472b1962b 100644 (file)
@@ -15,8 +15,9 @@ __attribute((constructor(101))) static void init_textures()
 
 static void list_delete_texture(__attribute__((unused)) void *key, void *value, __attribute__((unused)) void *unused)
 {
-       glDeleteTextures(1, value);
-       free(value);
+       Texture *texture = value;
+       glDeleteTextures(1, &texture->id);
+       free(texture);
 }
 
 __attribute((destructor)) static void delete_textures()
@@ -26,36 +27,35 @@ __attribute((destructor)) static void delete_textures()
 
 static void *create_texture(void *key)
 {
-       int width, height, channels;
+       Texture *texture = malloc(sizeof(Texture));
+       int channels;
 
-       unsigned char *data = stbi_load(key, &width, &height, &channels, 0);
+       unsigned char *data = stbi_load(key, &texture->width, &texture->height, &channels, 0);
        if (! data) {
                printf("Failed to load texture %s\n", (char *) key);
                return 0;
        }
 
-       GLuint *id = malloc(sizeof(GLuint));
+       glGenTextures(1, &texture->id);
 
-       glGenTextures(1, id);
-
-       glBindTexture(GL_TEXTURE_2D, *id);
+       glBindTexture(GL_TEXTURE_2D, texture->id);
 
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
 
-       glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
+       glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, texture->width, texture->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
        glGenerateMipmap(GL_TEXTURE_2D);
 
        stbi_image_free(data);
 
        glBindTexture(GL_TEXTURE_2D, 0);
 
-       return id;
+       return texture;
 }
 
-GLuint get_texture(char *path)
+Texture *get_texture(char *path)
 {
-       return *(GLuint *)list_get_cached(&textures, path, &create_texture);
+       return list_get_cached(&textures, path, &create_texture);
 }
index 33198e3ec1818f5b1f5901ff1803a200fb60b11f..cface04230b483608481affcb4f2d47813a0be6d 100644 (file)
@@ -4,6 +4,12 @@
 #include <GL/glew.h>
 #include <GL/gl.h>
 
-GLuint get_texture(char *path);
+typedef struct
+{
+       GLuint id;
+       int width, height;
+} Texture;
+
+Texture *get_texture(char *path);
 
 #endif