// 32bit RGBA
#define TEXTYPE_RGBA 3
-// contents of this structure are private to gl_textures.c
+// contents of this structure are mostly private to gl_textures.c
typedef struct
{
- int useless;
+ // this is exposed (rather than private) for speed reasons only
+ int texnum;
}
rtexture_t;
// add a texture to a pool and optionally precache (upload) it
// (note: data == NULL is perfectly acceptable)
-rtexture_t *R_LoadTexture (rtexturepool_t *rtexturepool, char *identifier, int width, int height, qbyte *data, int textype, int flags);
+rtexture_t *R_LoadTexture(rtexturepool_t *rtexturepool, char *identifier, int width, int height, qbyte *data, int textype, int flags);
+rtexture_t *R_LoadTexture1D(rtexturepool_t *rtexturepool, char *identifier, int width, qbyte *data, int textype, int flags);
+rtexture_t *R_LoadTexture2D(rtexturepool_t *rtexturepool, char *identifier, int width, int height, qbyte *data, int textype, int flags);
+rtexture_t *R_LoadTexture3D(rtexturepool_t *rtexturepool, char *identifier, int width, int height, int depth, qbyte *data, int textype, int flags);
+rtexture_t *R_LoadTextureCubeMap(rtexturepool_t *rtexturepool, char *identifier, int width, qbyte *data, int textype, int flags);
// free a texture
void R_FreeTexture(rtexture_t *rt);
// location of the fragment in the texture (note: any parameter except rt can
// be NULL)
void R_FragmentLocation(rtexture_t *rt, int *x, int *y, float *fx1, float *fy1, float *fx2, float *fy2);
+void R_FragmentLocation3D(rtexture_t *rt, int *x, int *y, int *z, float *fx1, float *fy1, float *fz1, float *fx2, float *fy2, float *fz2);
// returns the renderer dependent texture slot number (call this before each
// use, as a texture might not have been precached)
-int R_GetTexture (rtexture_t *rt);
+#define R_GetTexture(rt) ((rt) ? ((rt)->texnum >= 0 ? (rt)->texnum : R_RealGetTexture(rt)) : 0)
+int R_RealGetTexture (rtexture_t *rt);
// returns true if the texture is transparent (useful for rendering code)
int R_TextureHasAlpha(rtexture_t *rt);
// returns height of texture, as was specified when it was uploaded
int R_TextureHeight(rtexture_t *rt);
+// frees processing buffers each frame, and may someday animate procedural textures
+void R_Textures_Frame(void);
+
#endif