first render
[retroray] / src / texture.h
1 /*
2 RetroRay - integrated standalone vintage modeller/renderer
3 Copyright (C) 2023  John Tsiombikas <nuclear@mutantstargoat.com>
4
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program.  If not, see <https://www.gnu.org/licenses/>.
17 */
18 #ifndef TEXTURE_H_
19 #define TEXTURE_H_
20
21 #include "cgmath/cgmath.h"
22 #include "imago2.h"
23
24 struct rayhit;
25
26 enum {
27         TEX_PIXMAP,
28         TEX_CHESS,
29         TEX_FBM2D,
30         TEX_FBM3D,
31         TEX_MARBLE2D,
32         TEX_MARBLE3D
33 };
34
35 #define TEX_COMMON_ATTR \
36         int type; \
37         char *name; \
38         cgm_vec3 offs, scale; \
39         cgm_vec3 (*lookup)(const struct texture*, const struct rayhit*)
40
41 struct texture {
42         TEX_COMMON_ATTR;
43 };
44
45 struct tex_pixmap {
46         TEX_COMMON_ATTR;
47         struct img_pixmap *img;
48 };
49
50 struct tex_chess {
51         TEX_COMMON_ATTR;
52         cgm_vec3 color[2];
53 };
54
55 struct tex_fbm {
56         TEX_COMMON_ATTR;
57         int octaves;
58         cgm_vec3 color[2];
59 };
60
61 struct texture *create_texture(int type);
62 void free_texture(struct texture *tex);
63
64 void tex_set_name(struct texture *tex, const char *name);
65
66 #endif  /* TEXTURE_H_ */