dca3-game/vendor/pvrtex/file_common.c
Stefanos Kornilios Mitsis Poiitidis 52ab6d6f0c Move files around
2025-03-09 12:38:13 +02:00

74 lines
1.9 KiB
C

#include <assert.h>
#include <string.h>
#include "file_common.h"
#include "pvr_texture_encoder.h"
void CheckedFwrite(const void *data, size_t size, FILE *f) {
int writeamt = fwrite(data, 1, size, f);
if (writeamt != size) {
perror("");
ErrorExit("write error, wanted to write %i, but only wrote %i\n", size, writeamt);
}
}
void WriteFourCC(const char *fourcc, FILE *f) {
assert(strlen(fourcc) == 4);
CheckedFwrite(fourcc, 4, f);
}
void Write8(unsigned int val, FILE *f) {
char vb[1] = {val};
CheckedFwrite(vb, 1, f);
}
void Write32LE(unsigned int val, FILE *f) {
char vb[4] = {val, val >> 8, val >> 16, val >> 24};
CheckedFwrite(vb, 4, f);
}
void Write16LE(unsigned int val, FILE *f) {
char vb[2] = {val, val >> 8};
CheckedFwrite(vb, 2, f);
}
void WritePadZero(size_t len, FILE *f) {
static char paddingarea[64] = {0};
assert(f);
assert(len < sizeof(paddingarea));
CheckedFwrite(&paddingarea, len, f);
}
void WritePvrTexEncoder(const PvrTexEncoder *pte, FILE *f, ptewSmallVQType svq, int mip_skip) {
assert(pte);
assert(pte->pvr_tex);
assert(f);
unsigned texsize = CalcTextureSize(pte->w, pte->h, pte->pixel_format, pteHasMips(pte), pteIsCompressed(pte), 0);
if (pteIsCompressed(pte)) {
assert(pte->pvr_codebook);
//Write CB
unsigned cbsize = pte->codebook_size * PVR_CODEBOOK_ENTRY_SIZE_BYTES;
if (svq == PTEW_NO_SMALL_VQ)
cbsize = PVR_CODEBOOK_SIZE_BYTES;
pteLog(LOG_DEBUG, "Writing %u bytes for codebook\n", (unsigned)cbsize);
CheckedFwrite(pte->pvr_codebook + pte->pvr_idx_offset * PVR_CODEBOOK_ENTRY_SIZE_BYTES, cbsize, f);
}
if (!pteIsCompressed(pte) && pteHasMips(pte)) {
CheckedFwrite(pte->pvr_tex + mip_skip, texsize-mip_skip, f);
} else {
CheckedFwrite(pte->pvr_tex, texsize, f);
}
}
int FileSize(const char *fname) {
assert(fname);
FILE *f = fopen(fname, "r");
if (f == NULL)
return -1;
fseek(f, 0, SEEK_END);
int size = ftell(f);
fclose(f);
return size;
}