diff --git a/premake/ddsdump.lua b/premake/ddsdump.lua index 7ec2f5f4..9c9917b4 100644 --- a/premake/ddsdump.lua +++ b/premake/ddsdump.lua @@ -14,5 +14,5 @@ project "ddsdump" } links { - "bgfx", +-- "bgfx", } diff --git a/tools/ddsdump.cpp b/tools/ddsdump.cpp index 9f0f2c08..351c282d 100644 --- a/tools/ddsdump.cpp +++ b/tools/ddsdump.cpp @@ -7,6 +7,7 @@ #include #include +// Just hacking DDS loading code in here. #include "bgfx_p.h" using namespace bgfx; @@ -21,6 +22,68 @@ using namespace bgfx; #include #include +namespace bgfx +{ + const Memory* alloc(uint32_t _size) + { + Memory* mem = (Memory*)::realloc(NULL, sizeof(Memory) + _size); + mem->size = _size; + mem->data = (uint8_t*)mem + sizeof(Memory); + return mem; + } + + void saveTga(const char* _filePath, uint32_t _width, uint32_t _height, uint32_t _srcPitch, const void* _src, bool _grayscale, bool _yflip) + { + FILE* file = fopen(_filePath, "wb"); + if ( NULL != file ) + { + uint8_t type = _grayscale ? 3 : 2; + uint8_t bpp = _grayscale ? 8 : 32; + + putc(0, file); + putc(0, file); + putc(type, file); + putc(0, file); + putc(0, file); + putc(0, file); + putc(0, file); + putc(0, file); + putc(0, file); + putc(0, file); + putc(0, file); + putc(0, file); + putc(_width&0xff, file); + putc( (_width>>8)&0xff, file); + putc(_height&0xff, file); + putc( (_height>>8)&0xff, file); + putc(bpp, file); + putc(32, file); + + uint32_t dstPitch = _width*bpp/8; + if (_yflip) + { + uint8_t* data = (uint8_t*)_src + dstPitch*_height - _srcPitch; + for (uint32_t yy = 0; yy < _height; ++yy) + { + fwrite(data, dstPitch, 1, file); + data -= _srcPitch; + } + } + else + { + uint8_t* data = (uint8_t*)_src; + for (uint32_t yy = 0; yy < _height; ++yy) + { + fwrite(data, dstPitch, 1, file); + data += _srcPitch; + } + } + + fclose(file); + } + } +} + long int fsize(FILE* _file) { long int pos = ftell(_file); @@ -36,7 +99,7 @@ int main(int _argc, const char* _argv[]) FILE* file = fopen(_argv[1], "rb"); uint32_t size = fsize(file); - const Memory* mem = bgfx::alloc(size); + const Memory* mem = alloc(size); size_t readSize = fread(mem->data, 1, size, file); BX_UNUSED(readSize); fclose(file); @@ -96,7 +159,7 @@ int main(int _argc, const char* _argv[]) char filePath[256]; _snprintf(filePath, sizeof(filePath), "mip%d_%d.tga", side, lod); - bgfx::saveTga(filePath, width, height, dstpitch, bits); + saveTga(filePath, width, height, dstpitch, bits); free(bits); }