24 static inline int is_power_of_two(
int w,
int h)
26 return ( (w && !(w & (w-1))) && (h && !(h & (h-1))) );
39 int i, is_cubemap = 0;
40 int d_width = 0, d_height = 0, d_depth = 0, d_size = 0;
43 if (img_cfp == NULL) {
49 char *
p = strchr(real_name,
'.');
54 ddsfile =
cfopen(real_name,
"rb");
82 for (i = 0; i < 11; i++)
246 if (compression_type)
247 *compression_type = ct;
258 if (palette && (bits == 8)) {
260 cfread(palette, 1, 1024, ddsfile);
265 if (img_cfp == NULL) {
288 char *
p = strchr(real_name,
'.');
311 cfread(data, 1, size, cfp);
342 memset( &real_filename, 0,
sizeof(real_filename) );
349 if (filename == NULL) {
351 sprintf(real_filename,
"cubemap%.3d.dds", count++);
353 sprintf(real_filename,
"image%.3d.dds", count++);
361 char *
p = strchr(real_filename,
'.');
370 mprintf((
"Unable to open DDS image for saving!!\n"));
389 if (num_mipmaps > 1) {
424 int faces = (cubemap) ? 6 : 1;
427 int f_size = 0, f_offset = 0;
436 for (
int i = 0;
i < faces;
i++) {
437 for (
int j = 0; j < num_mipmaps; j++) {
438 f_size = (f_width * f_height * (bpp >> 3));
440 cfwrite(data + f_offset, 1, f_size, image);
475 return "File not found";
478 return "Filecode did not equal \"DDS \"";
481 return "DDS was in an unsupported/unknown format";
484 return "DDS format was known but is not supported (ie. DXT2/DXT4)";
487 return "DDS is compressed but compression support is not enabled";
490 return "Cannot load DDS if not power-of-2";
493 return "Cubemaps must have all 6 faces";
496 return "Abort, retry, fail?";
uint os_config_read_uint(const char *section, const char *name, uint default_value)
#define DDS_ERROR_INVALID_FORMAT
#define DDS_ERROR_BAD_HEADER
GLfloat GLfloat GLfloat GLfloat h
int dds_read_header(const char *filename, CFILE *img_cfp, int *width, int *height, int *bpp, int *compression_type, int *levels, int *size, ubyte *palette)
int cfread(void *buf, int elsize, int nelem, CFILE *fp)
#define DDS_ERROR_NON_POWER_OF_2
GLenum GLsizei GLenum GLenum const GLvoid * image
#define DDSCAPS2_CUBEMAP_ALLFACES
#define DDS_ERROR_NO_COMPRESSION
void os_config_write_uint(const char *section, const char *name, uint value)
typedef int(SCP_EXT_CALLCONV *SCPDLL_PFVERSION)(SCPDLL_Version *)
int Texture_compression_available
#define DDS_ERROR_CUBEMAP_FACES
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * bits
int Use_compressed_textures
sprintf(buf,"(%f,%f,%f)", v3->xyz.x, v3->xyz.y, v3->xyz.z)
int cfwrite(const void *buf, int elsize, int nelem, CFILE *cfile)
#define DDS_CUBEMAP_UNCOMPRESSED
int dds_read_bitmap(const char *filename, ubyte *data, ubyte *bpp, int cf_type)
GLint GLsizei GLsizei height
struct _DDSURFACEDESC2::@14 ddsCaps
GLubyte GLubyte GLubyte GLubyte w
const char * dds_error_string(int code)
struct _DDSURFACEDESC2::@13 ddpfPixelFormat
#define DDS_ERROR_INVALID_FILENAME
GLenum GLsizei GLenum GLenum const GLvoid * data
int cfread_int(CFILE *file, int ver, int deflt)
#define DDS_ERROR_UNSUPPORTED
int cfclose(CFILE *cfile)
void dds_save_image(int width, int height, int bpp, int num_mipmaps, ubyte *data, int cubemap, const char *filename)
uint cfread_uint(CFILE *file, int ver, uint deflt)
#define DDPF_PALETTEINDEXED8
int cfseek(CFILE *fp, int offset, int where)