From a5bb9be4edbcaf2d4e4a962dd03fa21bde84e241 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Thu, 8 Dec 2016 20:45:01 -0800 Subject: [PATCH] Cleanup. --- examples/07-callback/callback.cpp | 181 +++++++------------- examples/10-font/font.cpp | 25 +-- examples/11-fontsdf/fontsdf.cpp | 46 +---- examples/13-stencil/stencil.cpp | 50 +++--- examples/14-shadowvolumes/shadowvolumes.cpp | 50 +++--- examples/16-shadowmaps/shadowmaps.cpp | 50 +++--- examples/common/entry/entry_sdl.cpp | 2 +- 7 files changed, 153 insertions(+), 251 deletions(-) diff --git a/examples/07-callback/callback.cpp b/examples/07-callback/callback.cpp index c5d7d4307..770131900 100644 --- a/examples/07-callback/callback.cpp +++ b/examples/07-callback/callback.cpp @@ -8,6 +8,8 @@ #include #include +#include + #include "aviwriter.h" #include @@ -61,64 +63,58 @@ static const uint16_t s_cubeIndices[36] = 6, 3, 7, }; -void saveTga(const char* _filePath, uint32_t _width, uint32_t _height, uint32_t _srcPitch, const void* _src, bool _grayscale, bool _yflip) +void imageWriteTga(bx::WriterI* _writer, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, bool _grayscale, bool _yflip, bx::Error* _err) { - FILE* file = fopen(_filePath, "wb"); - if (NULL != file) + BX_ERROR_SCOPE(_err); + + uint8_t type = _grayscale ? 3 : 2; + uint8_t bpp = _grayscale ? 8 : 32; + + uint8_t header[18] = {}; + header[ 2] = type; + header[12] = _width &0xff; + header[13] = (_width >>8)&0xff; + header[14] = _height &0xff; + header[15] = (_height>>8)&0xff; + header[16] = bpp; + header[17] = 32; + + bx::write(_writer, header, sizeof(header), _err); + + uint32_t dstPitch = _width*bpp/8; + if (_yflip) { - 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 + _pitch*_height - _pitch; + for (uint32_t yy = 0; yy < _height; ++yy) { - uint8_t* data = (uint8_t*)_src + _srcPitch*_height - _srcPitch; - for (uint32_t yy = 0; yy < _height; ++yy) - { - fwrite(data, dstPitch, 1, file); - data -= _srcPitch; - } + bx::write(_writer, data, dstPitch, _err); + data -= _pitch; } - else + } + else if (_pitch == dstPitch) + { + bx::write(_writer, _src, _height*_pitch, _err); + } + else + { + uint8_t* data = (uint8_t*)_src; + for (uint32_t yy = 0; yy < _height; ++yy) { - uint8_t* data = (uint8_t*)_src; - for (uint32_t yy = 0; yy < _height; ++yy) - { - fwrite(data, dstPitch, 1, file); - data += _srcPitch; - } + bx::write(_writer, data, dstPitch, _err); + data += _pitch; } - - fclose(file); } } -long int fsize(FILE* _file) +void saveTga(const char* _filePath, uint32_t _width, uint32_t _height, uint32_t _srcPitch, const void* _src, bool _grayscale, bool _yflip) { - long int pos = ftell(_file); - fseek(_file, 0L, SEEK_END); - long int size = ftell(_file); - fseek(_file, pos, SEEK_SET); - return size; + bx::CrtFileWriter writer; + bx::Error err; + if (bx::open(&writer, _filePath, false, &err) ) + { + imageWriteTga(&writer, _width, _height, _srcPitch, _src, _grayscale, _yflip, &err); + bx::close(&writer); + } } struct BgfxCallback : public bgfx::CallbackI @@ -148,11 +144,12 @@ struct BgfxCallback : public bgfx::CallbackI bx::snprintf(filePath, sizeof(filePath), "temp/%016" PRIx64, _id); // Use cache id as filename. - FILE* file = fopen(filePath, "rb"); - if (NULL != file) + bx::FileReaderI* reader = entry::getFileReader(); + bx::Error err; + if (bx::open(reader, filePath, &err) ) { - uint32_t size = fsize(file); - fclose(file); + uint32_t size = bx::getSize(reader); + bx::close(reader); // Return size of shader file. return size; } @@ -167,12 +164,13 @@ struct BgfxCallback : public bgfx::CallbackI bx::snprintf(filePath, sizeof(filePath), "temp/%016" PRIx64, _id); // Use cache id as filename. - FILE* file = fopen(filePath, "rb"); - if (NULL != file) + bx::FileReaderI* reader = entry::getFileReader(); + bx::Error err; + if (bx::open(reader, filePath, &err) ) { // Read shader. - size_t result = fread(_data, 1, _size, file); - fclose(file); + uint32_t result = bx::read(reader, _data, _size, &err); + bx::close(reader); // Make sure that read size matches requested size. return result == _size; @@ -188,12 +186,13 @@ struct BgfxCallback : public bgfx::CallbackI bx::snprintf(filePath, sizeof(filePath), "temp/%016" PRIx64, _id); // Use cache id as filename. - FILE* file = fopen(filePath, "wb"); - if (NULL != file) + bx::FileWriterI* writer = entry::getFileWriter(); + bx::Error err; + if (bx::open(writer, filePath, false, &err) ) { // Write shader to cache location. - fwrite(_data, 1, _size, file); - fclose(file); + bx::write(writer, _data, _size, &err); + bx::close(writer); } } @@ -202,70 +201,16 @@ struct BgfxCallback : public bgfx::CallbackI char temp[1024]; // Save screen shot as TGA. - bx::snprintf(temp, BX_COUNTOF(temp), "%s.mip0.tga", _filePath); + bx::snprintf(temp, BX_COUNTOF(temp), "%s.tga", _filePath); saveTga(temp, _width, _height, _pitch, _data, false, _yflip); - - uint32_t width = _width; - uint32_t height = _height; - uint32_t pitch = _pitch; - - uint8_t* data = (uint8_t*)_data; - - // Generate mip maps. - uint32_t mip = 1; - for (; 2 <= width && 2 <= height; ++mip) - { - bx::snprintf(temp, BX_COUNTOF(temp), "%s.mip%d.tga", _filePath, mip); - bgfx::imageRgba8Downsample2x2(width, height, pitch, data, data); - - width >>= 1; - height >>= 1; - pitch = width*4; - - saveTga(temp, width, height, pitch, _data, false, _yflip); - } - - if (width > height) - { - for (; 2 <= width; ++mip) - { - memcpy(&data[width*4], data, width*4); - - bx::snprintf(temp, BX_COUNTOF(temp), "%s.mip%d.tga", _filePath, mip); - bgfx::imageRgba8Downsample2x2(width, 2, pitch, data, data); - - width >>= 1; - pitch = width*4; - - saveTga(temp, width, 2, pitch, _data, false, _yflip); - } - } - else - { - for (; 2 <= height; ++mip) - { - uint32_t* src = (uint32_t*)data; - for (uint32_t ii = 0; ii < height; ++ii, src += 2) - { - src[1] = src[0]; - } - - bx::snprintf(temp, BX_COUNTOF(temp), "%s.mip%d.tga", _filePath, mip); - bgfx::imageRgba8Downsample2x2(2, height, 8, data, data); - - height >>= 1; - - saveTga(temp, 2, height, 8, _data, false, _yflip); - } - } } virtual void captureBegin(uint32_t _width, uint32_t _height, uint32_t /*_pitch*/, bgfx::TextureFormat::Enum /*_format*/, bool _yflip) BX_OVERRIDE { - m_writer = new AviWriter(entry::getFileWriter() ); + m_writer = BX_NEW(entry::getAllocator(), AviWriter)(entry::getFileWriter() ); if (!m_writer->open("temp/capture.avi", _width, _height, 60, _yflip) ) { - delete m_writer; + BX_DELETE(entry::getAllocator(), m_writer); m_writer = NULL; } } @@ -275,7 +220,7 @@ struct BgfxCallback : public bgfx::CallbackI if (NULL != m_writer) { m_writer->close(); - delete m_writer; + BX_DELETE(entry::getAllocator(), m_writer); m_writer = NULL; } } diff --git a/examples/10-font/font.cpp b/examples/10-font/font.cpp index 6b95fdafa..016e12fb7 100644 --- a/examples/10-font/font.cpp +++ b/examples/10-font/font.cpp @@ -20,28 +20,15 @@ #include #include -long int fsize(FILE* _file) -{ - long int pos = ftell(_file); - fseek(_file, 0L, SEEK_END); - long int size = ftell(_file); - fseek(_file, pos, SEEK_SET); - return size; -} - TrueTypeHandle loadTtf(FontManager* _fm, const char* _filePath) { - FILE* file = fopen(_filePath, "rb"); - if (NULL != file) + uint32_t size; + void* data = load(_filePath, &size); + + if (NULL != data) { - uint32_t size = (uint32_t)fsize(file); - uint8_t* mem = (uint8_t*)malloc(size+1); - size_t ignore = fread(mem, 1, size, file); - BX_UNUSED(ignore); - fclose(file); - mem[size-1] = '\0'; - TrueTypeHandle handle = _fm->createTtf(mem, size); - free(mem); + TrueTypeHandle handle = _fm->createTtf( (uint8_t*)data, size); + BX_FREE(entry::getAllocator(), data); return handle; } diff --git a/examples/11-fontsdf/fontsdf.cpp b/examples/11-fontsdf/fontsdf.cpp index 37a64abb7..61591b5d6 100644 --- a/examples/11-fontsdf/fontsdf.cpp +++ b/examples/11-fontsdf/fontsdf.cpp @@ -18,45 +18,15 @@ #include #include -long int fsize(FILE* _file) -{ - long int pos = ftell(_file); - fseek(_file, 0L, SEEK_END); - long int size = ftell(_file); - fseek(_file, pos, SEEK_SET); - return size; -} - -static char* loadText(const char* _filePath) -{ - FILE* file = fopen(_filePath, "rb"); - if (NULL != file) - { - uint32_t size = (uint32_t)fsize(file); - char* mem = (char*)malloc(size+1); - size_t ignore = fread(mem, 1, size, file); - BX_UNUSED(ignore); - fclose(file); - mem[size-1] = '\0'; - return mem; - } - - return NULL; -} - TrueTypeHandle loadTtf(FontManager* _fm, const char* _filePath) { - FILE* file = fopen(_filePath, "rb"); - if (NULL != file) + uint32_t size; + void* data = load(_filePath, &size); + + if (NULL != data) { - uint32_t size = (uint32_t)fsize(file); - uint8_t* mem = (uint8_t*)malloc(size+1); - size_t ignore = fread(mem, 1, size, file); - BX_UNUSED(ignore); - fclose(file); - mem[size-1] = '\0'; - TrueTypeHandle handle = _fm->createTtf(mem, size); - free(mem); + TrueTypeHandle handle = _fm->createTtf( (uint8_t*)data, size); + BX_FREE(entry::getAllocator(), data); return handle; } @@ -90,7 +60,7 @@ int _main_(int _argc, char** _argv) // Imgui. imguiCreate(); - char* bigText = loadText( "text/sherlock_holmes_a_scandal_in_bohemia_arthur_conan_doyle.txt"); + char* bigText = (char*)load("text/sherlock_holmes_a_scandal_in_bohemia_arthur_conan_doyle.txt"); // Init the text rendering system. FontManager* fontManager = new FontManager(512); @@ -267,7 +237,7 @@ int _main_(int _argc, char** _argv) imguiDestroy(); - free(bigText); + BX_FREE(entry::getAllocator(), bigText); fontManager->destroyTtf(font); // Destroy the fonts. diff --git a/examples/13-stencil/stencil.cpp b/examples/13-stencil/stencil.cpp index 39d7c6788..d96b591b7 100644 --- a/examples/13-stencil/stencil.cpp +++ b/examples/13-stencil/stencil.cpp @@ -674,29 +674,29 @@ struct Mesh #define BGFX_CHUNK_MAGIC_IB BX_MAKEFOURCC('I', 'B', ' ', 0x0) #define BGFX_CHUNK_MAGIC_PRI BX_MAKEFOURCC('P', 'R', 'I', 0x0) - bx::CrtFileReader reader; - bx::open(&reader, _filePath); + bx::FileReaderI* reader = entry::getFileReader(); + bx::open(reader, _filePath); Group group; uint32_t chunk; - while (4 == bx::read(&reader, chunk) ) + while (4 == bx::read(reader, chunk) ) { switch (chunk) { case BGFX_CHUNK_MAGIC_VB: { - bx::read(&reader, group.m_sphere); - bx::read(&reader, group.m_aabb); - bx::read(&reader, group.m_obb); + bx::read(reader, group.m_sphere); + bx::read(reader, group.m_aabb); + bx::read(reader, group.m_obb); - bgfx::read(&reader, m_decl); + bgfx::read(reader, m_decl); uint16_t stride = m_decl.getStride(); uint16_t numVertices; - bx::read(&reader, numVertices); + bx::read(reader, numVertices); const bgfx::Memory* mem = bgfx::alloc(numVertices*stride); - bx::read(&reader, mem->data, mem->size); + bx::read(reader, mem->data, mem->size); group.m_vbh = bgfx::createVertexBuffer(mem, m_decl); } @@ -705,9 +705,9 @@ struct Mesh case BGFX_CHUNK_MAGIC_IB: { uint32_t numIndices; - bx::read(&reader, numIndices); + bx::read(reader, numIndices); const bgfx::Memory* mem = bgfx::alloc(numIndices*2); - bx::read(&reader, mem->data, mem->size); + bx::read(reader, mem->data, mem->size); group.m_ibh = bgfx::createIndexBuffer(mem); } break; @@ -715,31 +715,31 @@ struct Mesh case BGFX_CHUNK_MAGIC_PRI: { uint16_t len; - bx::read(&reader, len); + bx::read(reader, len); std::string material; material.resize(len); - bx::read(&reader, const_cast(material.c_str() ), len); + bx::read(reader, const_cast(material.c_str() ), len); uint16_t num; - bx::read(&reader, num); + bx::read(reader, num); for (uint32_t ii = 0; ii < num; ++ii) { - bx::read(&reader, len); + bx::read(reader, len); std::string name; name.resize(len); - bx::read(&reader, const_cast(name.c_str() ), len); + bx::read(reader, const_cast(name.c_str() ), len); Primitive prim; - bx::read(&reader, prim.m_startIndex); - bx::read(&reader, prim.m_numIndices); - bx::read(&reader, prim.m_startVertex); - bx::read(&reader, prim.m_numVertices); - bx::read(&reader, prim.m_sphere); - bx::read(&reader, prim.m_aabb); - bx::read(&reader, prim.m_obb); + bx::read(reader, prim.m_startIndex); + bx::read(reader, prim.m_numIndices); + bx::read(reader, prim.m_startVertex); + bx::read(reader, prim.m_numVertices); + bx::read(reader, prim.m_sphere); + bx::read(reader, prim.m_aabb); + bx::read(reader, prim.m_obb); group.m_prims.push_back(prim); } @@ -750,13 +750,13 @@ struct Mesh break; default: - DBG("%08x at %d", chunk, reader.seek() ); + DBG("%08x at %d", chunk, bx::seek(reader) ); abort(); break; } } - bx::close(&reader); + bx::close(reader); } void unload() diff --git a/examples/14-shadowvolumes/shadowvolumes.cpp b/examples/14-shadowvolumes/shadowvolumes.cpp index 83e01eb79..8b61d60c6 100644 --- a/examples/14-shadowvolumes/shadowvolumes.cpp +++ b/examples/14-shadowvolumes/shadowvolumes.cpp @@ -1026,29 +1026,29 @@ struct Mesh #define BGFX_CHUNK_MAGIC_IB BX_MAKEFOURCC('I', 'B', ' ', 0x0) #define BGFX_CHUNK_MAGIC_PRI BX_MAKEFOURCC('P', 'R', 'I', 0x0) - bx::CrtFileReader reader; - bx::open(&reader, _filePath); + bx::FileReaderI* reader = entry::getFileReader(); + bx::open(reader, _filePath); Group group; uint32_t chunk; - while (4 == bx::read(&reader, chunk) ) + while (4 == bx::read(reader, chunk) ) { switch (chunk) { case BGFX_CHUNK_MAGIC_VB: { - bx::read(&reader, group.m_sphere); - bx::read(&reader, group.m_aabb); - bx::read(&reader, group.m_obb); + bx::read(reader, group.m_sphere); + bx::read(reader, group.m_aabb); + bx::read(reader, group.m_obb); - bgfx::read(&reader, m_decl); + bgfx::read(reader, m_decl); uint16_t stride = m_decl.getStride(); - bx::read(&reader, group.m_numVertices); + bx::read(reader, group.m_numVertices); const uint32_t size = group.m_numVertices*stride; group.m_vertices = (uint8_t*)malloc(size); - bx::read(&reader, group.m_vertices, size); + bx::read(reader, group.m_vertices, size); const bgfx::Memory* mem = bgfx::makeRef(group.m_vertices, size); group.m_vbh = bgfx::createVertexBuffer(mem, m_decl); @@ -1057,10 +1057,10 @@ struct Mesh case BGFX_CHUNK_MAGIC_IB: { - bx::read(&reader, group.m_numIndices); + bx::read(reader, group.m_numIndices); const uint32_t size = group.m_numIndices*2; group.m_indices = (uint16_t*)malloc(size); - bx::read(&reader, group.m_indices, size); + bx::read(reader, group.m_indices, size); const bgfx::Memory* mem = bgfx::makeRef(group.m_indices, size); group.m_ibh = bgfx::createIndexBuffer(mem); @@ -1070,31 +1070,31 @@ struct Mesh case BGFX_CHUNK_MAGIC_PRI: { uint16_t len; - bx::read(&reader, len); + bx::read(reader, len); std::string material; material.resize(len); - bx::read(&reader, const_cast(material.c_str() ), len); + bx::read(reader, const_cast(material.c_str() ), len); uint16_t num; - bx::read(&reader, num); + bx::read(reader, num); for (uint32_t ii = 0; ii < num; ++ii) { - bx::read(&reader, len); + bx::read(reader, len); std::string name; name.resize(len); - bx::read(&reader, const_cast(name.c_str() ), len); + bx::read(reader, const_cast(name.c_str() ), len); Primitive prim; - bx::read(&reader, prim.m_startIndex); - bx::read(&reader, prim.m_numIndices); - bx::read(&reader, prim.m_startVertex); - bx::read(&reader, prim.m_numVertices); - bx::read(&reader, prim.m_sphere); - bx::read(&reader, prim.m_aabb); - bx::read(&reader, prim.m_obb); + bx::read(reader, prim.m_startIndex); + bx::read(reader, prim.m_numIndices); + bx::read(reader, prim.m_startVertex); + bx::read(reader, prim.m_numVertices); + bx::read(reader, prim.m_sphere); + bx::read(reader, prim.m_aabb); + bx::read(reader, prim.m_obb); group.m_prims.push_back(prim); } @@ -1105,13 +1105,13 @@ struct Mesh break; default: - DBG("%08x at %d", chunk, reader.seek() ); + DBG("%08x at %d", chunk, bx::seek(reader) ); abort(); break; } } - bx::close(&reader); + bx::close(reader); for (GroupArray::iterator it = m_groups.begin(), itEnd = m_groups.end(); it != itEnd; ++it) { diff --git a/examples/16-shadowmaps/shadowmaps.cpp b/examples/16-shadowmaps/shadowmaps.cpp index 9071f0081..18524f901 100644 --- a/examples/16-shadowmaps/shadowmaps.cpp +++ b/examples/16-shadowmaps/shadowmaps.cpp @@ -884,29 +884,29 @@ struct Mesh #define BGFX_CHUNK_MAGIC_IB BX_MAKEFOURCC('I', 'B', ' ', 0x0) #define BGFX_CHUNK_MAGIC_PRI BX_MAKEFOURCC('P', 'R', 'I', 0x0) - bx::CrtFileReader reader; - bx::open(&reader, _filePath); + bx::FileReaderI* reader = entry::getFileReader(); + bx::open(reader, _filePath); Group group; uint32_t chunk; - while (4 == bx::read(&reader, chunk) ) + while (4 == bx::read(reader, chunk) ) { switch (chunk) { case BGFX_CHUNK_MAGIC_VB: { - bx::read(&reader, group.m_sphere); - bx::read(&reader, group.m_aabb); - bx::read(&reader, group.m_obb); + bx::read(reader, group.m_sphere); + bx::read(reader, group.m_aabb); + bx::read(reader, group.m_obb); - bgfx::read(&reader, m_decl); + bgfx::read(reader, m_decl); uint16_t stride = m_decl.getStride(); uint16_t numVertices; - bx::read(&reader, numVertices); + bx::read(reader, numVertices); const bgfx::Memory* mem = bgfx::alloc(numVertices*stride); - bx::read(&reader, mem->data, mem->size); + bx::read(reader, mem->data, mem->size); group.m_vbh = bgfx::createVertexBuffer(mem, m_decl); } @@ -915,9 +915,9 @@ struct Mesh case BGFX_CHUNK_MAGIC_IB: { uint32_t numIndices; - bx::read(&reader, numIndices); + bx::read(reader, numIndices); const bgfx::Memory* mem = bgfx::alloc(numIndices*2); - bx::read(&reader, mem->data, mem->size); + bx::read(reader, mem->data, mem->size); group.m_ibh = bgfx::createIndexBuffer(mem); } break; @@ -925,31 +925,31 @@ struct Mesh case BGFX_CHUNK_MAGIC_PRI: { uint16_t len; - bx::read(&reader, len); + bx::read(reader, len); std::string material; material.resize(len); - bx::read(&reader, const_cast(material.c_str() ), len); + bx::read(reader, const_cast(material.c_str() ), len); uint16_t num; - bx::read(&reader, num); + bx::read(reader, num); for (uint32_t ii = 0; ii < num; ++ii) { - bx::read(&reader, len); + bx::read(reader, len); std::string name; name.resize(len); - bx::read(&reader, const_cast(name.c_str() ), len); + bx::read(reader, const_cast(name.c_str() ), len); Primitive prim; - bx::read(&reader, prim.m_startIndex); - bx::read(&reader, prim.m_numIndices); - bx::read(&reader, prim.m_startVertex); - bx::read(&reader, prim.m_numVertices); - bx::read(&reader, prim.m_sphere); - bx::read(&reader, prim.m_aabb); - bx::read(&reader, prim.m_obb); + bx::read(reader, prim.m_startIndex); + bx::read(reader, prim.m_numIndices); + bx::read(reader, prim.m_startVertex); + bx::read(reader, prim.m_numVertices); + bx::read(reader, prim.m_sphere); + bx::read(reader, prim.m_aabb); + bx::read(reader, prim.m_obb); group.m_prims.push_back(prim); } @@ -960,12 +960,12 @@ struct Mesh break; default: - DBG("%08x at %d", chunk, reader.seek() ); + DBG("%08x at %d", chunk, bx::seek(reader) ); break; } } - bx::close(&reader); + bx::close(reader); } void unload() diff --git a/examples/common/entry/entry_sdl.cpp b/examples/common/entry/entry_sdl.cpp index 900ebc054..cde5aa0dd 100644 --- a/examples/common/entry/entry_sdl.cpp +++ b/examples/common/entry/entry_sdl.cpp @@ -486,7 +486,7 @@ namespace entry WindowHandle defaultWindow = { 0 }; setWindowSize(defaultWindow, m_width, m_height, true); - bx::CrtFileReader reader; + bx::FileReaderI* reader = getEileReader(); if (bx::open(&reader, "gamecontrollerdb.txt") ) { bx::AllocatorI* allocator = getAllocator();