added in_pitch_min and in_pitch_max cvars to limit pitch (default: -90 to +90)
[divverent/darkplaces.git] / r_textures.h
1
2 // transparent
3 #define TEXF_ALPHA 0x00000001
4 // mipmapped
5 #define TEXF_MIPMAP 0x00000002
6 // upload if r_textureprecache >= 1, otherwise defer loading until it is used
7 #define TEXF_PRECACHE 0x00000004
8 // upload immediately, never defer (ignore r_textureprecache)
9 #define TEXF_ALWAYSPRECACHE 0x00000008
10 // allocated as a fragment in a larger texture, mipmap is not allowed with
11 // this, mostly used for lightmaps (which are procedural textures)
12 #define TEXF_FRAGMENT 0x00000010
13 // used for checking if textures mismatch
14 #define TEXF_IMPORTANTBITS (TEXF_ALPHA | TEXF_MIPMAP | TEXF_FRAGMENT)
15
16 // 8bit quake paletted
17 #define TEXTYPE_QPALETTE 1
18 // 24bit RGB
19 #define TEXTYPE_RGB 2
20 // 32bit RGBA
21 #define TEXTYPE_RGBA 3
22
23 // contents of this structure are private to gl_textures.c
24 typedef struct
25 {
26         int useless;
27 }
28 rtexture_t;
29
30 // contents of this structure are private to gl_textures.c
31 typedef struct
32 {
33         int useless;
34 }
35 rtexturepool_t;
36
37 // allocate a texture pool, to be used with R_LoadTexture/R_ProceduralTexture
38 rtexturepool_t *R_AllocTexturePool(void);
39 // free a texture pool (textures can not be freed individually)
40 void R_FreeTexturePool(rtexturepool_t **rtexturepool);
41
42 // important technical note:
43 // fragment textures must have a width that is compatible with the fragment
44 // update system, to get a compliant size, use R_CompatibleFragmentWidth
45 int R_CompatibleFragmentWidth(int width, int textype, int flags);
46
47 // these two functions add a texture to a pool, and may precache (upload) it
48 // a normal static texture
49 rtexture_t *R_LoadTexture (rtexturepool_t *rtexturepool, char *identifier, int width, int height, byte *data, int textype, int flags);
50 // a procedurally generated texture, often animated over time, note: generate can be NULL (for odd uses)
51 rtexture_t *R_ProceduralTexture (rtexturepool_t *rtexturepool, char *identifier, int width, int height, int textype, int flags, int (*generate)(byte *buffer, int width, int height, void *parameterdata, int parameterdatasize), void *parameterdata, int parameterdatasize);
52
53 // update the image data of a texture, used by lightmap updates and procedural
54 // textures.
55 void R_UpdateTexture(rtexture_t *rt, byte *data);
56
57 // location of the fragment in the texture (note: any parameter except rt can be NULL)
58 void R_FragmentLocation(rtexture_t *rt, int *x, int *y, float *fx1, float *fy1, float *fx2, float *fy2);
59
60 // returns the renderer dependent texture slot number (call this before each use, as a texture might not have been precached, or it might change over time if it is procedural)
61 int R_GetTexture (rtexture_t *rt);
62
63 // returns true if the texture is transparent (useful for rendering code)
64 int R_TextureHasAlpha(rtexture_t *rt);
65
66 // returns width of texture, as was specified when it was uploaded
67 int R_TextureWidth(rtexture_t *rt);
68
69 // returns height of texture, as was specified when it was uploaded
70 int R_TextureHeight(rtexture_t *rt);