LibGame v0.4.0
The LG Game Engine - Copyright (C) 2024-2026 ETMSoftware
Loading...
Searching...
No Matches
lg_textures.h
1/*
2 * LibGame - Copyright (C) Emmanuel Thomas-Maurin 2011-2026
3 * All rights reserved
4 */
5
6#ifndef LG_TEXTURES_H
7#define LG_TEXTURES_H
8
9#define LG_TEX_PATH_MAX_LEN (128 - 1)
10
11#define LG_FIRST_NODE_TEX_ID 500001
12#define LG_INVALID_TEX_ID 500002
13
14#define LG_TEX_TYPE_UNKNOWN (-1)
15
16#define LG_MAX_TEX_UNITS 256
17
18#define LG_CUBEMAP_FACES_NUM 6
19
20#define LG_TEX_SIG "LG_Texture"
21#define LG_TEX_SIG_LEN 10
22
23typedef struct __attribute__((packed)) {
24 uint8_t sig[8]; /* {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a} */
25 uint8_t padding1[8];
26 uint32_t width; /* Big-endian */
27 uint32_t height; /* Big-endian */
29
30/* TODO: specify if mipmaps were generated ? */
31typedef enum {
32 LG_TC_UNCOMPRESSED, /* Never with mipmaps */
33 LG_TC_DXT1,
34 LG_TC_DXT3,
35 LG_TC_ASTC, /* TODO: specify block size ? */
36 LG_TC_ETC1,
37 LG_TC_UNKNOWN
38} lg_tc_format;
39
40/*
41 * Actually a texture node in textures doubly-linked list
42 */
43typedef struct LG_Texture LG_Texture;
44
45struct LG_Texture {
46 uint32_t id; /* Texture 'handle', set to LG_INVALID_TEX_ID if not valid */
47 int32_t unit; /* GL_TEXTURE0 -> GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1 */
48 int type; /* GL_TEXTURE_2D or GL_TEXTURE_CUBE_MAP (so far ...) */
49 int w;
50 int h;
51 int tc_format; /* lg_tc_format enum */
52 char path[LG_TEX_PATH_MAX_LEN + 1]; /* Full path */
53 LG_Texture *prev;
54 LG_Texture *next;
55 uint8_t sig[LG_TEX_SIG_LEN]; /* Not NULL-terminated */
56};
57
59
60LG_Texture *lg_texture_new_from_data(lg_tc_format, int, const char *, void *, void **, size_t, int, int, int);
61
62LG_Texture *lg_texture_new_from_file(int, const char *);
63
64SDL_Surface *lg_sdl_surf_from_file(const char *, int, int);
65
66void *lg_compressed_texdata_from_file(const char *, lg_tc_format *, size_t *, int *, int *, int *);
67
68zboolean lg_test_file_extension(const char *, const char*);
69
70int lg_get_png_dims(const char *, int *, int *);
71/*
72 * === Doubly-linked list ops ===
73 */
74zboolean is_lg_tex(LG_Texture *);
75
77
79
81
83
85
87
89
90void lg_texture_info(const LG_Texture *);
91
93
95/*
96 * Other stuff
97 */
98zboolean lg_read_pixels_from_screen(void *, Rec2Di);
99
100zboolean lg_write_pixels_to_screen(void *, const Rec2Di *);
101
102void lg_texture_unbind();
103
104void lg_tex_units_info();
105
106unsigned int lg_get_active_tex();
107
108void lg_active_tex_info();
109
110void lg_free_sdl_surf(SDL_Surface *);
111
112int lg_surf_depth(SDL_Surface *);
113
115
116#endif /* LG_TEXTURES_H */
void lg_texture_unbind(LG_Texture *tex)
Definition lg_textures.c:1095
zboolean lg_test_file_extension(const char *path, const char *ext)
Definition lg_textures.c:594
void * lg_compressed_texdata_from_file(const char *path, lg_tc_format *tc_format, size_t *size, int *w, int *h, int *n_mipmaps)
Definition lg_textures.c:571
unsigned int lg_get_active_tex()
Definition lg_textures.c:1123
zboolean lg_write_pixels_to_screen(void *pixels, const Rec2Di *dest)
Definition lg_textures.c:1037
LG_Texture * lg_texture_find_by_id(uint32_t id)
Definition lg_textures.c:880
zboolean is_lg_tex(LG_Texture *node)
Definition lg_textures.c:686
int lg_get_png_dims(const char *path, int *w, int *h)
Definition lg_textures.c:608
void lg_init_textures_module()
Definition lg_textures.c:88
int lg_texture_count_nodes()
Definition lg_textures.c:900
void lg_texture_info_all()
Definition lg_textures.c:971
void lg_texture_remove(LG_Texture *node)
Definition lg_textures.c:803
void lg_texture_list_all()
Definition lg_textures.c:986
LG_Texture * lg_texture_new_from_data(lg_tc_format tc_format, int tex_type, const char *path, void *data, void **cubemap_data, size_t size, int w, int h, int n_mipmaps)
Definition lg_textures.c:127
int lg_surf_depth(SDL_Surface *surf)
Definition lg_textures.c:1158
int lg_texture_count_gl_tex()
Definition lg_textures.c:919
LG_Texture * lg_texture_first(LG_Texture *node)
Definition lg_textures.c:846
zboolean lg_read_pixels_from_screen(void *pixels, Rec2Di r)
Definition lg_textures.c:1009
LG_Texture * lg_texture_last(LG_Texture *node)
Definition lg_textures.c:863
void lg_free_sdl_surf(SDL_Surface *surf)
Definition lg_textures.c:1145
void lg_info_out_read_framebuffer()
Definition lg_textures.c:1166
void lg_texture_info(const LG_Texture *tex)
Definition lg_textures.c:962
SDL_Surface * lg_sdl_surf_from_file(const char *path, int scale_x, int scale_y)
Definition lg_textures.c:467
void lg_tex_units_info()
Definition lg_textures.c:1108
void lg_active_tex_info()
Definition lg_textures.c:1135
void lg_texture_remove_all()
Definition lg_textures.c:830
LG_Texture * lg_texture_new_from_file(int tex_type, const char *path)
Definition lg_textures.c:299
Definition lg_textures.h:45
Definition lg_textures.h:23
Definition lg_gr_func.h:49