mirror of
https://github.com/ZDoom/Raze.git
synced 2024-12-23 18:51:00 +00:00
d9867cfaaf
git-svn-id: https://svn.eduke32.com/eduke32@1105 1a8010ca-5511-0410-912e-c29ae57300e0
90 lines
No EOL
2.3 KiB
C
90 lines
No EOL
2.3 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <dirent.h>
|
|
#include <sys/stat.h>
|
|
#include "compat.h"
|
|
|
|
#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0
|
|
#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1
|
|
#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2
|
|
#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3
|
|
|
|
typedef struct {
|
|
char magic[8]; // 'Polymost'
|
|
int xdim, ydim; // of image, unpadded
|
|
int flags; // 1 = !2^x, 2 = has alpha, 4 = lzw compressed
|
|
} texcacheheader;
|
|
typedef struct {
|
|
int size;
|
|
int format;
|
|
int xdim, ydim; // of mipmap (possibly padded)
|
|
int border, depth;
|
|
} texcachepicture;
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
DIR *dir;
|
|
struct dirent *dirent;
|
|
struct stat st;
|
|
FILE *fp;
|
|
texcacheheader head;
|
|
texcachepicture mip;
|
|
|
|
dir = opendir(".");
|
|
while ((dirent = readdir(dir))) {
|
|
if (stat(dirent->d_name, &st)) {
|
|
printf("%s: failed to stat\n", dirent->d_name);
|
|
continue;
|
|
}
|
|
if (!(st.st_mode&S_IFREG)) {
|
|
printf("%s: not a regular file\n", dirent->d_name);
|
|
continue;
|
|
}
|
|
|
|
fp = fopen(dirent->d_name,"rb");
|
|
if (!fp) {
|
|
printf("%s: failed to open\n", dirent->d_name);
|
|
continue;
|
|
}
|
|
|
|
if (fread(&head, sizeof(head), 1, fp) != 1) {
|
|
fclose(fp);
|
|
printf("%s: failed to read header\n", dirent->d_name);
|
|
continue;
|
|
}
|
|
head.xdim = B_LITTLE32(head.xdim);
|
|
head.ydim = B_LITTLE32(head.ydim);
|
|
head.flags = B_LITTLE32(head.flags);
|
|
if (fread(&mip, sizeof(mip), 1, fp) != 1) {
|
|
fclose(fp);
|
|
printf("%s: failed to read mipmap header\n", dirent->d_name);
|
|
continue;
|
|
}
|
|
mip.format = B_LITTLE32(mip.format);
|
|
fclose(fp);
|
|
if (memcmp(head.magic, "Polymost", 8)) {
|
|
printf("%s: bad signature\n", dirent->d_name);
|
|
continue;
|
|
}
|
|
else {
|
|
char *format;
|
|
char flags[4] = "", flagsc = 0;
|
|
switch (mip.format) {
|
|
case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: format = "RGB DXT1"; break;
|
|
case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: format = "RGBA DXT1"; break;
|
|
case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: format = "RGBA DXT3"; break;
|
|
case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: format = "RGBA DXT5"; break;
|
|
default: format = "Unknown"; break;
|
|
}
|
|
if (head.flags&1) flags[flagsc++] = '2';
|
|
if (head.flags&2) flags[flagsc++] = 'A';
|
|
if (head.flags&4) flags[flagsc++] = 'L';
|
|
flags[flagsc++] = 0;
|
|
|
|
printf("%s: flags=%s format=%s\n", dirent->d_name, flags, format);
|
|
}
|
|
}
|
|
closedir(dir);
|
|
|
|
return 0;
|
|
} |