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_FIRST_NODE_TEX_ID 500001
10#define LG_INVALID_TEX_ID 500002
11
12#define LG_TEX_TYPE_UNKNOWN (-1)
13
14#define LG_MAX_TEX_UNITS 256
15
16#define CUBEMAP_N_FACES 6
17
18#define LG_TEX_SIG "LG_Texture"
19#define LG_TEX_SIG_LEN 10
20
21typedef struct __attribute__((packed)) {
22 uint8_t sig[8]; /* {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a} */
23 uint8_t padding1[8];
24 uint32_t width; /* Big-endian */
25 uint32_t height; /* Big-endian */
27
28#if 0
29typedef struct __attribute__((packed)) {
30} JPG_Header;
31#endif
32
33/* TODO: specify if mipmaps were generated ? */
34typedef enum {
35 LG_TC_UNCOMPRESSED, /* Never with mipmaps */
36 LG_TC_DXT1,
37 LG_TC_DXT3,
38 LG_TC_ASTC, /* TODO: specify block size ? */
39 LG_TC_ETC1,
40 LG_TC_UNKNOWN
41} lg_tc_format;
42
43/*
44 * Actually a texture node in textures doubly-linked list
45 */
46typedef struct LG_Texture LG_Texture;
47
48struct LG_Texture {
49 uint32_t id; /* Texture 'handle', set to LG_INVALID_TEX_ID if not valid */
50 int32_t unit; /* GL_TEXTURE0 -> GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1 */
51 int type; /* GL_TEXTURE_2D or GL_TEXTURE_CUBE_MAP (so far ...) */
52 int w;
53 int h;
54 int tc_format; /* lg_tc_format enum */
55 LG_Path path;
56 LG_Texture *prev;
57 LG_Texture *next;
58 uint8_t sig[LG_TEX_SIG_LEN]; /* Not NULL-terminated */
59};
60
61typedef struct {
62 LG_Path path[CUBEMAP_N_FACES];
64
66
67void lg_tex_set_min_filter(int);
68
69void lg_tex_set_mag_filter(int);
70
72
74
75LG_Texture *lg_texture_new_from_data(lg_tc_format, int, LG_Path, void *, void **, size_t, int, int, int);
76
78
79SDL_Surface *lg_sdl_surf_from_file(LG_Path, int, int);
80
81void *lg_compressed_texdata_from_file(LG_Path, lg_tc_format *, size_t *, int *, int *, int *);
82
83zboolean lg_test_file_extension(const char *, const char *);
84
85int lg_get_png_dims(LG_Path, int *, int *);
86/*
87 * === Doubly-linked list ops ===
88 */
89zboolean is_lg_tex(LG_Texture *);
90
92
94
96
98
100
102
104
105void lg_texture_info(const LG_Texture *);
106
108
110/*
111 * Other stuff
112 */
113zboolean lg_read_pixels_from_screen(void *, Rec2Di);
114
115zboolean lg_write_pixels_to_screen(void *, const Rec2Di *);
116
118
119void lg_tex_units_info();
120
121unsigned int lg_get_active_tex();
122
123void lg_active_tex_info();
124
125void lg_free_sdl_surf(SDL_Surface *);
126
127int lg_surf_depth(SDL_Surface *);
128
130
131#endif /* LG_TEXTURES_H */
int lg_tex_get_min_filter()
Definition lg_textures.c:133
void lg_texture_unbind(LG_Texture *tex)
Definition lg_textures.c:1154
zboolean lg_test_file_extension(const char *path, const char *ext)
Definition lg_textures.c:641
unsigned int lg_get_active_tex()
Definition lg_textures.c:1182
zboolean lg_write_pixels_to_screen(void *pixels, const Rec2Di *dest)
Definition lg_textures.c:1096
LG_Texture * lg_texture_find_by_id(uint32_t id)
Definition lg_textures.c:933
zboolean is_lg_tex(LG_Texture *node)
Definition lg_textures.c:725
void lg_init_textures_module()
Definition lg_textures.c:88
int lg_texture_count_nodes()
Definition lg_textures.c:953
void lg_texture_info_all()
Definition lg_textures.c:1030
void lg_texture_remove(LG_Texture *node)
Definition lg_textures.c:856
int lg_tex_get_mag_filter()
Definition lg_textures.c:143
void lg_texture_list_all()
Definition lg_textures.c:1045
LG_Texture * lg_texture_new_from_data(lg_tc_format tc_format, int tex_type, LG_Path path, void *data, void **cubemap_data, size_t size, int w, int h, int n_mipmaps)
Definition lg_textures.c:173
int lg_surf_depth(SDL_Surface *surf)
Definition lg_textures.c:1217
int lg_texture_count_gl_tex()
Definition lg_textures.c:972
SDL_Surface * lg_sdl_surf_from_file(LG_Path path, int scale_x, int scale_y)
Definition lg_textures.c:511
LG_Texture * lg_texture_first(LG_Texture *node)
Definition lg_textures.c:899
zboolean lg_read_pixels_from_screen(void *pixels, Rec2Di r)
Definition lg_textures.c:1068
LG_Texture * lg_texture_last(LG_Texture *node)
Definition lg_textures.c:916
void lg_free_sdl_surf(SDL_Surface *surf)
Definition lg_textures.c:1204
void lg_info_out_read_framebuffer()
Definition lg_textures.c:1225
void * lg_compressed_texdata_from_file(LG_Path path, lg_tc_format *tc_format, size_t *size, int *w, int *h, int *n_mipmaps)
Definition lg_textures.c:616
void lg_texture_info(const LG_Texture *tex)
Definition lg_textures.c:1021
void lg_tex_set_mag_filter(int v)
Definition lg_textures.c:123
void lg_tex_units_info()
Definition lg_textures.c:1167
int lg_get_png_dims(LG_Path path, int *w, int *h)
Definition lg_textures.c:654
LG_Texture * lg_texture_new_from_file(int tex_type, LG_Path path, LG_CubeMap_Paths *cubemap_paths)
Definition lg_textures.c:347
void lg_tex_set_min_filter(int v)
Definition lg_textures.c:113
void lg_active_tex_info()
Definition lg_textures.c:1194
void lg_texture_remove_all()
Definition lg_textures.c:883
Definition lg_textures.h:61
Definition lg_goodies.h:20
Definition lg_textures.h:48
Definition lg_textures.h:21
Definition lg_gr_func.h:49