diff --git a/.gitignore b/.gitignore index 845e977..07d6fc6 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ font2png pntr2png treexplore *.vcxproj.user +*.gch diff --git a/LICENSES b/LICENSES index 15e00b9..c22796e 100644 --- a/LICENSES +++ b/LICENSES @@ -69,4 +69,24 @@ FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. \ No newline at end of file +DEALINGS IN THE SOFTWARE. + + +Simple DirectMedia Layer +Copyright (C) 1997-2014 Sam Lantinga + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. diff --git a/Makefile b/Makefile index 495964e..e684790 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ CXX=g++ -CXXOPTS=-Og -ggdb -fvar-tracking-assignments -Wall -Wextra -Wno-unused-function -pedantic -std=c++14 -march=native -fstack-protector-strong --param=ssp-buffer-size=4 -flto -I. -pthread +CXXOPTS=-Og -ggdb -fvar-tracking-assignments -Wall -Winvalid-pch -Wextra -Wno-unused-function -pedantic -std=c++14 -march=native -fstack-protector-strong --param=ssp-buffer-size=4 -flto -Isrc -pthread LDOPTS=-Wl,--sort-common render_CXXSRCS ::= render/Renderer.cc render/GlResource.cc render/ProgramProvider.cc render/renderutil.cc render/Overlay.cc render/VBOManager.cc render/Object.cc render/AlResource.cc render/AudioStream.cc @@ -29,12 +29,12 @@ progs ::= iffexplore treexplore mvedecode objdecode shapdecode all: $(progs) -objs/%.o: %.cc +objs/%.o: src/%.cc src/common.hh.gch $(CXX) $(CXXOPTS) -c -MMD -MP -o $@ $< @cp objs/$*.d objs/$*.P; rm -f objs/$*.d -%.pb.cc %.pb.h: %.proto - protoc --cpp_out=. $< +src/common.hh.gch: src/common.hh src/compiler.hh src/platform.hh src/exceptions.hh + $(CXX) $(CXXOPTS) -c -o $@ $< $(progs): %: $(CXX) $(CXXOPTS) $(LDOPTS) -o $@ $^ $($(@)_LIBS) diff --git a/common.hh b/common.hh deleted file mode 100644 index 26a58ba..0000000 --- a/common.hh +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef WC3RE__COMMON_HH__ -#define WC3RE__COMMON_HH__ - -#include -#include - -struct FILEDeleter { - void operator()(FILE* file) const { - fclose(file); - } -}; - -using FILEUPtr = std::unique_ptr; - -#include "exceptions.hh" - -#endif diff --git a/iffexplore.vcxproj b/iffexplore.vcxproj new file mode 100644 index 0000000..8bda37a --- /dev/null +++ b/iffexplore.vcxproj @@ -0,0 +1,121 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + + Create + Create + + + + + + + + + + + + + + + + + + + + + + + + {23DC33B8-9A83-49C4-A2F4-0EC407CCD7E8} + Win32Proj + iffexplore + + + + Application + true + v120 + Unicode + + + Application + false + v120 + true + Unicode + + + + + + + + + + + + + true + $(Configuration)\$(ProjectName)\ + + + false + $(Configuration)\$(ProjectName)\ + + + + Use + Level3 + Disabled + WIN32;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + true + 4101;4251 + env\SDL2_ttf-2.0.12\include;env\SDL2-2.0.3\include;libs\wingetopt;env\glm;env\glbinding\include;env\openal-soft-1.16.0-bin\include + common.hh + /Zm190 + + + Console + true + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;wingetopt.lib;%(AdditionalDependencies) + Debug + + + + + Level3 + Use + MaxSpeed + true + true + WIN32;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + true + 4101;4251 + env\SDL2_ttf-2.0.12\include;env\SDL2-2.0.3\include;libs\wingetopt;env\glm;env\glbinding\include;env\openal-soft-1.16.0-bin\include + common.hh + /Zm190 + + + Console + true + true + true + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;wingetopt.lib;%(AdditionalDependencies) + Release + + + + + + \ No newline at end of file diff --git a/iffexplore.vcxproj.filters b/iffexplore.vcxproj.filters new file mode 100644 index 0000000..f2bcf3f --- /dev/null +++ b/iffexplore.vcxproj.filters @@ -0,0 +1,74 @@ + + + + + {9d0923ce-d2f5-4368-b493-b775e9240a39} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {64a1e02e-886d-42ab-8338-5f224ee4f7b9} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/mvedecode.vcxproj b/mvedecode.vcxproj new file mode 100644 index 0000000..7997b07 --- /dev/null +++ b/mvedecode.vcxproj @@ -0,0 +1,144 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + + Create + Create + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {94524082-F925-415B-9ABC-D9C68CDCB01F} + Win32Proj + mvedecode + + + + Application + true + v120 + Unicode + + + Application + false + v120 + true + Unicode + + + + + + + + + + + + + true + $(Configuration)\$(ProjectName)\ + + + false + $(Configuration)\$(ProjectName)\ + + + + Use + Level3 + Disabled + WIN32;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + env\SDL2_ttf-2.0.12\include;env\SDL2-2.0.3\include;libs\wingetopt;env\glm;env\glbinding\include;env\openal-soft-1.16.0-bin\include;src + 4101;4251 + /Zm190 + common.hh + + + Console + true + env\SDL2_ttf-2.0.12\lib\x86;env\SDL2-2.0.3\lib\x86;env\openal-soft-1.16.0-bin\libs\Win32;env\glbinding\lib;Debug + wingetopt.lib;SDL2.lib;SDL2_ttf.lib;OpenAL32.lib;glbindingd.lib;%(AdditionalDependencies) + + + + + Level3 + Use + MaxSpeed + true + true + WIN32;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + env\SDL2_ttf-2.0.12\include;env\SDL2-2.0.3\include;libs\wingetopt;env\glm;env\glbinding\include;env\openal-soft-1.16.0-bin\include;src + 4101;4251 + /Zm190 + common.hh + + + Console + true + true + true + env\SDL2_ttf-2.0.12\lib\x86;env\SDL2-2.0.3\lib\x86;env\openal-soft-1.16.0-bin\libs\Win32;env\glbinding\lib;Release + wingetopt.lib;SDL2.lib;SDL2_ttf.lib;OpenAL32.lib;glbinding.lib;%(AdditionalDependencies) + + + + + + \ No newline at end of file diff --git a/mvedecode.vcxproj.filters b/mvedecode.vcxproj.filters new file mode 100644 index 0000000..815323c --- /dev/null +++ b/mvedecode.vcxproj.filters @@ -0,0 +1,147 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/objdecode.vcxproj b/objdecode.vcxproj new file mode 100644 index 0000000..0e87f2f --- /dev/null +++ b/objdecode.vcxproj @@ -0,0 +1,146 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {E3B62A51-0886-47B3-95CA-906AC56CC1A8} + Win32Proj + objdecode + + + + Application + true + v120 + Unicode + + + Application + false + v120 + true + Unicode + + + + + + + + + + + + + true + $(Configuration)\$(ProjectName)\ + + + false + $(Configuration)\$(ProjectName)\ + + + + Use + Level3 + Disabled + WIN32;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + true + common.hh + env\SDL2_ttf-2.0.12\include;env\SDL2-2.0.3\include;libs\wingetopt;env\glm;env\glbinding\include;env\openal-soft-1.16.0-bin\include;src + 4101;4251 + /Zm190 + + + Console + true + Debug;env\SDL2_ttf-2.0.12\lib\x86;env\SDL2-2.0.3\lib\x86;env\openal-soft-1.16.0-bin\libs\Win32;env\glbinding\lib; + glbindingd.lib;wingetopt.lib;SDL2.lib;SDL2_ttf.lib;OpenAL32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + Level3 + Use + MaxSpeed + true + true + WIN32;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + true + common.hh + env\SDL2_ttf-2.0.12\include;env\SDL2-2.0.3\include;libs\wingetopt;env\glm;env\glbinding\include;env\openal-soft-1.16.0-bin\include;src + 4101;4251 + /Zm190 + + + Console + true + true + true + Release;env\SDL2_ttf-2.0.12\lib\x86;env\SDL2-2.0.3\lib\x86;env\openal-soft-1.16.0-bin\libs\Win32;env\glbinding\lib; + glbinding.lib;wingetopt.lib;SDL2.lib;SDL2_ttf.lib;OpenAL32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + Create + Create + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/objdecode.vcxproj.filters b/objdecode.vcxproj.filters new file mode 100644 index 0000000..22cf9fc --- /dev/null +++ b/objdecode.vcxproj.filters @@ -0,0 +1,153 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/shapdecode.vcxproj b/shapdecode.vcxproj new file mode 100644 index 0000000..c7169bf --- /dev/null +++ b/shapdecode.vcxproj @@ -0,0 +1,123 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {5C417180-437D-4B93-92F2-1E6E6438573A} + Win32Proj + shapdecode + + + + Application + true + v120 + Unicode + + + Application + false + v120 + true + Unicode + + + + + + + + + + + + + true + $(Configuration)\$(ProjectName)\ + + + false + $(Configuration)\$(ProjectName)\ + + + + Use + Level3 + Disabled + WIN32;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + true + common.hh + env\SDL2_ttf-2.0.12\include;env\SDL2-2.0.3\include;libs\wingetopt;env\glm;env\glbinding\include;env\openal-soft-1.16.0-bin\include + 4101;4251 + /Zm190 + + + Console + true + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;wingetopt.lib;%(AdditionalDependencies) + Debug/ + + + + + Level3 + Use + MaxSpeed + true + true + WIN32;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + true + common.hh + env\SDL2_ttf-2.0.12\include;env\SDL2-2.0.3\include;libs\wingetopt;env\glm;env\glbinding\include;env\openal-soft-1.16.0-bin\include + 4101;4251 + /Zm190 + + + Console + true + true + true + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;wingetopt.lib;%(AdditionalDependencies) + Release/ + + + + + Create + Create + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/shapdecode.vcxproj.filters b/shapdecode.vcxproj.filters new file mode 100644 index 0000000..5be0ab4 --- /dev/null +++ b/shapdecode.vcxproj.filters @@ -0,0 +1,80 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/IffFile.cc b/src/IffFile.cc similarity index 99% rename from IffFile.cc rename to src/IffFile.cc index 3025b5b..f4426a5 100644 --- a/IffFile.cc +++ b/src/IffFile.cc @@ -1,8 +1,7 @@ -#include +#include "common.hh" #include "IffFile.hh" #include "util.hh" -#include "common.hh" struct ChunkHeader { unsigned char typeID[4]; diff --git a/IffFile.hh b/src/IffFile.hh similarity index 98% rename from IffFile.hh rename to src/IffFile.hh index bbd93ef..586a415 100644 --- a/IffFile.hh +++ b/src/IffFile.hh @@ -1,12 +1,6 @@ #ifndef WC3RE_IFFFILE_HH__ #define WC3RE_IFFFILE_HH__ -#include -#include -#include -#include -#include - #include "Resource.hh" class IffFile : public RefCounted { diff --git a/MveDecoder.cc b/src/MveDecoder.cc similarity index 99% rename from MveDecoder.cc rename to src/MveDecoder.cc index b019786..2c7c8a2 100644 --- a/MveDecoder.cc +++ b/src/MveDecoder.cc @@ -1,8 +1,5 @@ -#include -#include - #include "common.hh" -#include "compiler.hh" + #include "util.hh" #include "IffFile.hh" #include "decompress.hh" @@ -222,7 +219,7 @@ MveDecoder::Movie::Movie(std::vector::const_iterator shotIt, MveDecoder::Movie::~Movie() { #ifndef NDEBUG - printf("Maximum command buffer: %zu\n", maxCommand_); + printf("Maximum command buffer: " SIZE_T_FORMAT "\n", maxCommand_); #endif } diff --git a/MveDecoder.hh b/src/MveDecoder.hh similarity index 97% rename from MveDecoder.hh rename to src/MveDecoder.hh index 438490e..836c52b 100644 --- a/MveDecoder.hh +++ b/src/MveDecoder.hh @@ -1,9 +1,6 @@ #ifndef WC3RE_MVEDECODER_HH__ #define WC3RE_MVEDECODER_HH__ -#include -#include - #include "IffFile.hh" class MveDecoder { diff --git a/ObjDecoder.cc b/src/ObjDecoder.cc similarity index 99% rename from ObjDecoder.cc rename to src/ObjDecoder.cc index 0b05908..9b383fb 100644 --- a/ObjDecoder.cc +++ b/src/ObjDecoder.cc @@ -1,7 +1,6 @@ -#include +#include "common.hh" #include "ObjDecoder.hh" -#include "exceptions.hh" #include "util.hh" #include "ResourceProvider.hh" diff --git a/ObjDecoder.hh b/src/ObjDecoder.hh similarity index 96% rename from ObjDecoder.hh rename to src/ObjDecoder.hh index de1463c..bbf8066 100644 --- a/ObjDecoder.hh +++ b/src/ObjDecoder.hh @@ -1,11 +1,6 @@ #ifndef WC3RE_OBJDECODER_HH__ #define WC3RE_OBJDECODER_HH__ -#include -#include -#include -#include - #include "IffFile.hh" class ObjDecoder { diff --git a/PaletteDecoder.cc b/src/PaletteDecoder.cc similarity index 96% rename from PaletteDecoder.cc rename to src/PaletteDecoder.cc index 6e5cf8f..9566809 100644 --- a/PaletteDecoder.cc +++ b/src/PaletteDecoder.cc @@ -1,7 +1,6 @@ -#include +#include "common.hh" #include "PaletteDecoder.hh" -#include "exceptions.hh" #include "ResourceProvider.hh" PaletteDecoder::PaletteDecoder(std::string const& path) diff --git a/PaletteDecoder.hh b/src/PaletteDecoder.hh similarity index 91% rename from PaletteDecoder.hh rename to src/PaletteDecoder.hh index 1310976..5019a26 100644 --- a/PaletteDecoder.hh +++ b/src/PaletteDecoder.hh @@ -1,9 +1,6 @@ #ifndef WC3RE_PALETTEDECODER_HH__ #define WC3RE_PALETTEDECODER_HH__ -#include -#include - #include "IffFile.hh" class PaletteDecoder { diff --git a/Resource.hh b/src/Resource.hh similarity index 94% rename from Resource.hh rename to src/Resource.hh index a62b84c..f26b3b1 100644 --- a/Resource.hh +++ b/src/Resource.hh @@ -1,13 +1,6 @@ #ifndef WC3RE_RESOURCE_HH__ #define WC3RE_RESOURCE_HH__ -#include -#include -#include -#include -#include -#include - class RefCounted { public: RefCounted() : ref_(0) { @@ -81,7 +74,7 @@ public: } operator bool() const { - return res_; + return (res_ != nullptr); } Resource& operator*() { diff --git a/ResourceProvider.cc b/src/ResourceProvider.cc similarity index 92% rename from ResourceProvider.cc rename to src/ResourceProvider.cc index 671b0fe..0a13d14 100644 --- a/ResourceProvider.cc +++ b/src/ResourceProvider.cc @@ -1,10 +1,9 @@ -#include +#include "common.hh" #include "Resource.hh" -#include "exceptions.hh" #include "util.hh" #include "IffFile.hh" -//#include "TreFile.hh" +#include "TreFile.hh" #include "ResourceProvider.hh" template<> @@ -30,22 +29,22 @@ ResourceProvider::~ResourceProvider() void ResourceProvider::dumpCache_() const { for (auto& iff: iffs_) { - printf("IFF: %s: %u users, %zu size\n", iff.first.c_str(), iff.second->getRef(), + printf("IFF: %s: %u users, " SIZE_T_FORMAT " size\n", iff.first.c_str(), iff.second->getRef(), iff.second->footprint()); } for (auto& treObj: treObjs_) { - printf("TRE-Obj: %s: %u users, %zu size\n", treObj.first.c_str(), treObj.second->getRef(), + printf("TRE-Obj: %s: %u users, " SIZE_T_FORMAT " size\n", treObj.first.c_str(), treObj.second->getRef(), treObj.second->footprint()); } for (auto& tre: tres_) { - printf("TRE: %s: %u users, %zu size\n", tre.first.c_str(), tre.second->getRef(), + printf("TRE: %s: %u users, " SIZE_T_FORMAT " size\n", tre.first.c_str(), tre.second->getRef(), tre.second->footprint()); } for (auto& mmap: files_) { - printf("File: %s: %u users, %zu size\n", mmap.first.c_str(), mmap.second->getRef(), + printf("File: %s: %u users, " SIZE_T_FORMAT " size\n", mmap.first.c_str(), mmap.second->getRef(), mmap.second->footprint()); } } diff --git a/ResourceProvider.hh b/src/ResourceProvider.hh similarity index 96% rename from ResourceProvider.hh rename to src/ResourceProvider.hh index 787cf38..b5962c9 100644 --- a/ResourceProvider.hh +++ b/src/ResourceProvider.hh @@ -1,9 +1,6 @@ #ifndef WC3RE_RESOURCEPROVIDER_HH__ #define WC3RE_RESOURCEPROVIDER_HH__ -#include -#include - #include "Singleton.hh" #include "TreFile.hh" #include "IffFile.hh" diff --git a/ShapDecoder.cc b/src/ShapDecoder.cc similarity index 93% rename from ShapDecoder.cc rename to src/ShapDecoder.cc index aa8b986..5556f6f 100644 --- a/ShapDecoder.cc +++ b/src/ShapDecoder.cc @@ -1,9 +1,4 @@ -#include -#include -#include -#include - -#include +#include "common.hh" #include "util.hh" #include "Resource.hh" @@ -81,5 +76,5 @@ ShapDecoder::ShapDecoder(Resource::Handle res) printf("\t%.4x: %u\n", ent.first, ent.second); } - printf("\t%zu bytes of data\n", res_->size()-(lastofs+24)); + printf("\t" SIZE_T_FORMAT " bytes of data\n", res_->size()-(lastofs+24)); } diff --git a/ShapDecoder.hh b/src/ShapDecoder.hh similarity index 92% rename from ShapDecoder.hh rename to src/ShapDecoder.hh index 0f8148b..46d4186 100644 --- a/ShapDecoder.hh +++ b/src/ShapDecoder.hh @@ -1,8 +1,6 @@ #ifndef WC3RE_SHAPDECODER_HH__ #define WC3RE_SHAPDECODER_HH__ -#include - class Resource; class ShapDecoder { diff --git a/Singleton.hh b/src/Singleton.hh similarity index 90% rename from Singleton.hh rename to src/Singleton.hh index f76bb5b..f887f6d 100644 --- a/Singleton.hh +++ b/src/Singleton.hh @@ -1,9 +1,6 @@ #ifndef WC3RE_SINGLETON_HH__ #define WC3RE_SINGLETON_HH__ -#include -#include - template class Singleton { public: diff --git a/TreFile.cc b/src/TreFile.cc similarity index 98% rename from TreFile.cc rename to src/TreFile.cc index c7aed1d..14516a6 100644 --- a/TreFile.cc +++ b/src/TreFile.cc @@ -1,13 +1,5 @@ -#include -#include -#include -#include - -#ifdef WIN32 -#define snprintf _snprintf -#endif - #include "common.hh" + #include "util.hh" #include "decompress.hh" #include "TreFile.hh" @@ -247,7 +239,7 @@ std::unique_ptr TreFile::getObject(std::string const& spec) con if (crc <= std::numeric_limits::max()) { try { - return openCRC(crc); + return openCRC(static_cast(crc)); } catch (Exception &ex) { } } diff --git a/TreFile.hh b/src/TreFile.hh similarity index 97% rename from TreFile.hh rename to src/TreFile.hh index 403210e..c43d840 100644 --- a/TreFile.hh +++ b/src/TreFile.hh @@ -1,12 +1,6 @@ #ifndef WC3RE_TREFILE_HH__ #define WC3RE_TREFILE_HH__ -#include -#include -#include -#include -#include - #include "Resource.hh" class TreFile : public RefCounted { diff --git a/src/common.cc b/src/common.cc new file mode 100644 index 0000000..65b079b --- /dev/null +++ b/src/common.cc @@ -0,0 +1 @@ +#include "common.hh" \ No newline at end of file diff --git a/src/common.hh b/src/common.hh new file mode 100644 index 0000000..a51f751 --- /dev/null +++ b/src/common.hh @@ -0,0 +1,62 @@ +#ifndef WC3RE__COMMON_HH__ +#define WC3RE__COMMON_HH__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#define GLM_FORCE_RADIANS +#include +#include +#include +#include + +#include +#include + +#ifdef WIN32 +#define NOMINMAX +#include +#include "getopt.h" + +#include +#include +#undef main +#else +#include +#include + +#include +#include +#endif + +#include "compiler.hh" +#include "platform.hh" +#include "exceptions.hh" + +#endif diff --git a/compiler.hh b/src/compiler.hh similarity index 55% rename from compiler.hh rename to src/compiler.hh index 7fbb35f..b1a8266 100644 --- a/compiler.hh +++ b/src/compiler.hh @@ -3,11 +3,17 @@ #ifdef __GNUG__ #define RESTRICT __restrict__ +#define NO_EXCEPT noexcept +#define SIZE_T_FORMAT "%zu" #else #ifdef _MSC_VER #define RESTRICT __restrict +#define NO_EXCEPT _NOEXCEPT +#define SIZE_T_FORMAT "%Iu" #else #define RESTRICT +#define NO_EXCEPT +#define SIZE_T_FORMAT "%zu" #endif #endif diff --git a/decompress.cc b/src/decompress.cc similarity index 98% rename from decompress.cc rename to src/decompress.cc index e1a25cf..6d07bec 100644 --- a/decompress.cc +++ b/src/decompress.cc @@ -1,8 +1,5 @@ -#include -#include - #include "common.hh" -#include "compiler.hh" + #include "util.hh" #include "decompress.hh" diff --git a/decompress.hh b/src/decompress.hh similarity index 95% rename from decompress.hh rename to src/decompress.hh index 5385513..65abd1e 100644 --- a/decompress.hh +++ b/src/decompress.hh @@ -1,9 +1,6 @@ #ifndef WC3RE_DECOMPRESS_HH__ #define WC3RE_DECOMPRESS_HH__ -#include -#include - /* Decompression routines for various proprietary compression formats found in WC3 */ diff --git a/exceptions.cc b/src/exceptions.cc similarity index 94% rename from exceptions.cc rename to src/exceptions.cc index 2bb3224..26fd063 100644 --- a/exceptions.cc +++ b/src/exceptions.cc @@ -1,7 +1,4 @@ -#include -#include - -#include "exceptions.hh" +#include "common.hh" Exception::Exception(std::string msg) : msg_(std::move(msg)) diff --git a/exceptions.hh b/src/exceptions.hh similarity index 93% rename from exceptions.hh rename to src/exceptions.hh index d97d793..f440d04 100644 --- a/exceptions.hh +++ b/src/exceptions.hh @@ -1,8 +1,6 @@ #ifndef WC3RE_EXCEPTIONS_HH__ #define WC3RE_EXCEPTIONS_HH__ -#include - class Exception { public: Exception(std::string msg = ""); @@ -41,9 +39,6 @@ private: }; #ifdef WIN32 -#define NOMINMAX -#include - class Win32Exception : public Exception { public: Win32Exception(DWORD err, std::string msg = ""); diff --git a/font2png.cc b/src/font2png.cc similarity index 100% rename from font2png.cc rename to src/font2png.cc diff --git a/game/GSMvePlay.cc b/src/game/GSMvePlay.cc similarity index 99% rename from game/GSMvePlay.cc rename to src/game/GSMvePlay.cc index 424c0ad..01ee0f9 100644 --- a/game/GSMvePlay.cc +++ b/src/game/GSMvePlay.cc @@ -1,5 +1,6 @@ -#include "MveDecoder.hh" +#include "common.hh" +#include "MveDecoder.hh" #include "GSMvePlay.hh" #include "render/Overlay.hh" #include "render/Renderer.hh" diff --git a/game/GSMvePlay.hh b/src/game/GSMvePlay.hh similarity index 100% rename from game/GSMvePlay.hh rename to src/game/GSMvePlay.hh diff --git a/game/GSShowObject.cc b/src/game/GSShowObject.cc similarity index 99% rename from game/GSShowObject.cc rename to src/game/GSShowObject.cc index 93c8667..39846f3 100644 --- a/game/GSShowObject.cc +++ b/src/game/GSShowObject.cc @@ -1,4 +1,4 @@ -#include +#include "common.hh" #include "ObjDecoder.hh" diff --git a/game/GSShowObject.hh b/src/game/GSShowObject.hh similarity index 100% rename from game/GSShowObject.hh rename to src/game/GSShowObject.hh diff --git a/game/GameState.hh b/src/game/GameState.hh similarity index 96% rename from game/GameState.hh rename to src/game/GameState.hh index 6a9d94a..99c94d5 100644 --- a/game/GameState.hh +++ b/src/game/GameState.hh @@ -1,8 +1,6 @@ #ifndef WC3RE_GAME_GAMESTATE_HH__ #define WC3RE_GAME_GAMESTATE_HH__ -#include - namespace render { class Renderer; } diff --git a/iffexplore.cc b/src/iffexplore.cc similarity index 95% rename from iffexplore.cc rename to src/iffexplore.cc index aa28e32..c0bc484 100644 --- a/iffexplore.cc +++ b/src/iffexplore.cc @@ -1,12 +1,5 @@ -#include -#include -#include -#include -#include - -#include - #include "common.hh" + #include "util.hh" #include "ResourceProvider.hh" #include "IffFile.hh" diff --git a/mvedecode.cc b/src/mvedecode.cc similarity index 83% rename from mvedecode.cc rename to src/mvedecode.cc index 6d7fc5b..6001740 100644 --- a/mvedecode.cc +++ b/src/mvedecode.cc @@ -1,13 +1,5 @@ -#include -#include -#include -#include -#include -#include - -#include - #include "common.hh" + #include "util.hh" #include "MveDecoder.hh" #include "render/Renderer.hh" @@ -16,19 +8,20 @@ using render::Renderer; void usage(char *argv0) { - fprintf(stderr, "Usage: %s [-h] (tre-file name/crc)/iff-file\n", argv0); + fprintf(stderr, "Usage: %s [-hf] [-p [id]] (tre-file name/crc)/iff-file\n", argv0); fprintf(stderr, "\tAttempt to decode the movie stored in iff-file, or in the\n\tiff-object \"name\"/\"crc\" contained in tre-file\n"); fprintf(stderr, "\t-p [id]\tPlay branch id, or all branches if no id given\n"); + fprintf(stderr, "\t-f\tPlay video in fullscreen\n"); fprintf(stderr, "\t-h\tPrint this help\n"); } int main(int argc, char *argv[]) { std::string inPath; int branch = -1; - bool play = false; + bool play = false, fullscreen = false; { int opt; - while ((opt = getopt(argc, argv, "hp::")) != -1) { + while ((opt = getopt(argc, argv, "hp::f")) != -1) { switch (opt) { case 'h': usage(argv[0]); @@ -43,6 +36,9 @@ int main(int argc, char *argv[]) { } } break; + case 'f': + fullscreen = true; + break; default: usage(argv[0]); return 1; @@ -61,7 +57,7 @@ int main(int argc, char *argv[]) { auto mve = std::make_unique(inPath); if (play) { - Renderer renderer; + Renderer renderer(fullscreen); if (branch >= 0) { auto movie = mve->open(branch); diff --git a/objdecode.cc b/src/objdecode.cc similarity index 91% rename from objdecode.cc rename to src/objdecode.cc index fbf5522..b13f012 100644 --- a/objdecode.cc +++ b/src/objdecode.cc @@ -1,13 +1,5 @@ -#include -#include -#include -#include -#include -#include - -#include - #include "common.hh" + #include "util.hh" #include "TreFile.hh" #include "IffFile.hh" diff --git a/src/platform.hh b/src/platform.hh new file mode 100644 index 0000000..faf9311 --- /dev/null +++ b/src/platform.hh @@ -0,0 +1,10 @@ +#ifndef WC3RE_PLATFORM_HH_ +#define WC3RE_PLATFORM_HH_ + +#ifdef WIN32 +#define snprintf _snprintf +#else + +#endif + +#endif diff --git a/render/AlResource.cc b/src/render/AlResource.cc similarity index 96% rename from render/AlResource.cc rename to src/render/AlResource.cc index 000ca8b..57c8524 100644 --- a/render/AlResource.cc +++ b/src/render/AlResource.cc @@ -1,3 +1,5 @@ +#include "common.hh" + #include "AlResource.hh" namespace render { diff --git a/render/AlResource.hh b/src/render/AlResource.hh similarity index 93% rename from render/AlResource.hh rename to src/render/AlResource.hh index eca4fdb..55b0a67 100644 --- a/render/AlResource.hh +++ b/src/render/AlResource.hh @@ -1,10 +1,6 @@ #ifndef WC3RE_RENDER_ALRESOURCE_HH__ #define WC3RE_RENDER_ALRESOURCE_HH__ -#include -#include -#include - #include "GlResource.hh" namespace render { diff --git a/render/AudioStream.cc b/src/render/AudioStream.cc similarity index 93% rename from render/AudioStream.cc rename to src/render/AudioStream.cc index 7cb86e8..f116ad5 100644 --- a/render/AudioStream.cc +++ b/src/render/AudioStream.cc @@ -1,5 +1,6 @@ +#include "common.hh" + #include "AudioStream.hh" -#include "exceptions.hh" namespace render { AudioStream::AudioStream() @@ -12,7 +13,7 @@ namespace render { AudioStream::~AudioStream() { #ifndef NDEBUG - printf("%zu buffers at destruction\n", alBufs_.size()); + printf(SIZE_T_FORMAT " buffers at destruction\n", alBufs_.size()); #endif } diff --git a/render/AudioStream.hh b/src/render/AudioStream.hh similarity index 95% rename from render/AudioStream.hh rename to src/render/AudioStream.hh index 49ef78b..016fa54 100644 --- a/render/AudioStream.hh +++ b/src/render/AudioStream.hh @@ -1,8 +1,6 @@ #ifndef WC3RE_RENDER_AUDIOSTREAM_HH__ #define WC3RE_RENDER_AUDIOSTREAM_HH__ -#include - #include "AlResource.hh" namespace render { diff --git a/render/Drawable.hh b/src/render/Drawable.hh similarity index 100% rename from render/Drawable.hh rename to src/render/Drawable.hh diff --git a/render/GlResource.cc b/src/render/GlResource.cc similarity index 95% rename from render/GlResource.cc rename to src/render/GlResource.cc index eea4749..91ca1c2 100644 --- a/render/GlResource.cc +++ b/src/render/GlResource.cc @@ -1,4 +1,4 @@ -#include +#include "common.hh" #include "GlResource.hh" diff --git a/render/GlResource.hh b/src/render/GlResource.hh similarity index 98% rename from render/GlResource.hh rename to src/render/GlResource.hh index 330749a..219b702 100644 --- a/render/GlResource.hh +++ b/src/render/GlResource.hh @@ -1,8 +1,6 @@ #ifndef WC3RE_RENDER_GLRESOURCE_HH__ #define WC3RE_RENDER_GLRESOURCE_HH__ -#include - namespace render { struct TextureDeleter { void operator() (gl::GLuint tex) const; diff --git a/render/Object.cc b/src/render/Object.cc similarity index 99% rename from render/Object.cc rename to src/render/Object.cc index ecfedd3..5da9e96 100644 --- a/render/Object.cc +++ b/src/render/Object.cc @@ -1,10 +1,4 @@ -#include - -#include - -#include -#include -#include +#include "common.hh" #include "Object.hh" #include "ProgramProvider.hh" diff --git a/render/Object.hh b/src/render/Object.hh similarity index 93% rename from render/Object.hh rename to src/render/Object.hh index e682192..c8d0eba 100644 --- a/render/Object.hh +++ b/src/render/Object.hh @@ -1,9 +1,6 @@ #ifndef WC3RE_RENDER_OBJECT_HH__ #define WC3RE_RENDER_OBJECT_HH__ -#define GLM_FORCE_RADIANS -#include - #include "Drawable.hh" #include "GlResource.hh" #include "VBOManager.hh" diff --git a/render/Overlay.cc b/src/render/Overlay.cc similarity index 95% rename from render/Overlay.cc rename to src/render/Overlay.cc index 7efff18..350310e 100644 --- a/render/Overlay.cc +++ b/src/render/Overlay.cc @@ -1,8 +1,4 @@ -#include -#include - -#include -#include +#include "common.hh" #include "Overlay.hh" #include "renderutil.hh" @@ -73,7 +69,7 @@ namespace render { // void Overlay::clear() // { - // if (SDL_GL_ExtensionSupported("GL_ARB_clear_texture")) + // if (extensionSupported("GL_ARB_clear_texture")) // glClearTexImage(texture_, 0, GL_BGRA, GL_UNSIGNED_BYTE, nullptr); // else { // std::vector zeros(intWidth_*intHeight_*4, 0u); diff --git a/render/Overlay.hh b/src/render/Overlay.hh similarity index 91% rename from render/Overlay.hh rename to src/render/Overlay.hh index 260836b..4fadbb0 100644 --- a/render/Overlay.hh +++ b/src/render/Overlay.hh @@ -1,11 +1,6 @@ #ifndef WC3RE_RENDER_OVERLAY_HH__ #define WC3RE_RENDER_OVERLAY_HH__ -#include - -#define GLM_FORCE_RADIANS -#include - #include "Drawable.hh" #include "GlResource.hh" #include "VBOManager.hh" diff --git a/render/ProgramProvider.cc b/src/render/ProgramProvider.cc similarity index 98% rename from render/ProgramProvider.cc rename to src/render/ProgramProvider.cc index 6fdbb03..b1d4bd1 100644 --- a/render/ProgramProvider.cc +++ b/src/render/ProgramProvider.cc @@ -1,8 +1,8 @@ -#include +#include "common.hh" + #include #include "ProgramProvider.hh" -#include "exceptions.hh" #include "util.hh" using namespace gl; diff --git a/render/ProgramProvider.hh b/src/render/ProgramProvider.hh similarity index 97% rename from render/ProgramProvider.hh rename to src/render/ProgramProvider.hh index 39e3950..9ff6517 100644 --- a/render/ProgramProvider.hh +++ b/src/render/ProgramProvider.hh @@ -1,10 +1,9 @@ #ifndef WC3RE_RENDER_PROGRAMPROVIDER_HH__ #define WC3RE_RENDER_PROGRAMPROVIDER_HH__ -#include - #include "Singleton.hh" #include "GlResource.hh" + namespace render { using ProgramProviderKeyType = std::tuple; } diff --git a/render/Renderer.cc b/src/render/Renderer.cc similarity index 94% rename from render/Renderer.cc rename to src/render/Renderer.cc index 42341c5..1b906f7 100644 --- a/render/Renderer.cc +++ b/src/render/Renderer.cc @@ -1,12 +1,8 @@ -#include -#include -#include -#include +#include "common.hh" #include "Renderer.hh" #include "GlResource.hh" #include "game/GameState.hh" -#include "exceptions.hh" #include "Overlay.hh" using namespace gl; @@ -16,6 +12,9 @@ namespace render { public: GLException(GLenum err) : Exception(), err_(err) { } + + GLException(GLenum err, glbinding::FunctionCall const& fc) : Exception(fc.toString()), err_(err) { + } GLenum getErr() const {return err_;} @@ -40,7 +39,7 @@ namespace render { } std::string toString() const override { - return "GLException: " + errToString() + "(" + std::to_string(static_cast(err_)) + ")"; + return "GLException: " + errToString() + "(" + std::to_string(static_cast(err_)) + "):" + msg_; } private: @@ -53,12 +52,12 @@ namespace render { GLenum error = glGetError(); glbinding::setCallbackMask(glbinding::CallbackMask::After); if (error != GL_NO_ERROR) - throw GLException(error); + throw GLException(error, fc); } - Renderer::Renderer() + Renderer::Renderer(bool fullscreen) : sdlInit_(), ttfInit_(), window_(), context_() { // Initialize OpenGL @@ -73,8 +72,8 @@ namespace render { window_.reset(SDL_CreateWindow("WC3 RE", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, - 0, 0, - SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_OPENGL)); + 640, 400, + (fullscreen?SDL_WINDOW_FULLSCREEN_DESKTOP:0) | SDL_WINDOW_OPENGL)); if (!window_) throw SDLException{}; diff --git a/render/Renderer.hh b/src/render/Renderer.hh similarity index 95% rename from render/Renderer.hh rename to src/render/Renderer.hh index cbef52f..d5fee52 100644 --- a/render/Renderer.hh +++ b/src/render/Renderer.hh @@ -1,8 +1,6 @@ #ifndef WC3RE_RENDER_RENDERER_HH__ #define WC3RE_RENDER_RENDERER_HH__ -#include - #include "sdlutil.hh" #include "AlResource.hh" @@ -15,7 +13,7 @@ namespace render { class Renderer { public: - Renderer(); + Renderer(bool fullscreen = true); ~Renderer(); void run(); diff --git a/render/VBOManager.cc b/src/render/VBOManager.cc similarity index 98% rename from render/VBOManager.cc rename to src/render/VBOManager.cc index 6234820..3e3a113 100644 --- a/render/VBOManager.cc +++ b/src/render/VBOManager.cc @@ -1,6 +1,4 @@ -#include -#include -#include +#include "common.hh" #include "VBOManager.hh" diff --git a/render/VBOManager.hh b/src/render/VBOManager.hh similarity index 91% rename from render/VBOManager.hh rename to src/render/VBOManager.hh index a87d55e..2122543 100644 --- a/render/VBOManager.hh +++ b/src/render/VBOManager.hh @@ -1,15 +1,6 @@ #ifndef WC3RE_RENDER_VBOMANAGER_HH__ #define WC3RE_RENDER_VBOMANAGER_HH__ -#include -#include -#include -#include -#include - -#include -#include - #include "Singleton.hh" namespace render { @@ -67,7 +58,7 @@ namespace render { return _vbo->getID(); } - explicit operator bool() const noexcept { + explicit operator bool() const NO_EXCEPT { return (_vbo != nullptr); } diff --git a/render/renderutil.cc b/src/render/renderutil.cc similarity index 79% rename from render/renderutil.cc rename to src/render/renderutil.cc index 8bd43a0..323685f 100644 --- a/render/renderutil.cc +++ b/src/render/renderutil.cc @@ -1,8 +1,6 @@ -#include -#include +#include "common.hh" #include "renderutil.hh" -#include "exceptions.hh" using namespace gl; @@ -26,7 +24,8 @@ namespace render { if ((maxTexSize < 0) || (maxArrTexLayers < 0)) throw Exception{"GL returned negative values for max tex. dimensions"}; - return std::make_tuple(maxTexSize, maxArrTexLayers); + return std::make_tuple(static_cast(maxTexSize), + static_cast(maxArrTexLayers)); } void useProgram(GLuint program) @@ -38,6 +37,20 @@ namespace render { curProgram = program; } } + + bool extensionSupported(std::string const& extname) + { + static std::unordered_map extensions; + + auto it = extensions.find(extname); + if (it != extensions.end()) + return it->second; + + bool support = SDL_GL_ExtensionSupported(extname.c_str()); + extensions.emplace(extname, support); + + return support; + } TextureResource create2DTexture(unsigned width, unsigned height, bool alpha, unsigned levels) { @@ -46,15 +59,17 @@ namespace render { glBindTexture(GL_TEXTURE_2D, tex); unsigned logWidth = ilog2(width), logHeight = ilog2(height); + if (levels == 0) levels = std::max(logWidth,logHeight)+1u; - if(SDL_GL_ExtensionSupported("GL_ARB_texture_storage")) + + if(extensionSupported("GL_ARB_texture_storage")) glTexStorage2D(GL_TEXTURE_2D, levels, alpha?GL_RGBA8:GL_RGB8, width, height); else { std::printf("Warning: extension GL_ARB_texture_storage not supported!\n"); for (unsigned i = 0u; i < levels; ++i) { glTexImage2D(GL_TEXTURE_2D, i, static_cast(alpha?GL_RGBA8:GL_RGB8), width, height, 0, - alpha?GL_RGBA8:GL_RGB8, GL_UNSIGNED_BYTE, NULL); + alpha?GL_RGBA:GL_RGB, GL_UNSIGNED_BYTE, NULL); width = std::max(1u, (width / 2u)); height = std::max(1u, (height / 2u)); } @@ -72,9 +87,11 @@ namespace render { glBindTexture(GL_TEXTURE_2D_ARRAY, tex); unsigned logWidth = ilog2(width), logHeight = ilog2(height); + if (levels == 0) levels = std::max(logWidth,logHeight)+1u; - if(SDL_GL_ExtensionSupported("GL_ARB_texture_storage")) + + if(extensionSupported("GL_ARB_texture_storage")) glTexStorage3D(GL_TEXTURE_2D_ARRAY, levels, alpha?GL_RGBA8:GL_RGB8, width, height, count); else { std::printf("Warning: extension GL_ARB_texture_storage not supported!\n"); diff --git a/render/renderutil.hh b/src/render/renderutil.hh similarity index 91% rename from render/renderutil.hh rename to src/render/renderutil.hh index f6b0358..9da17e3 100644 --- a/render/renderutil.hh +++ b/src/render/renderutil.hh @@ -11,6 +11,8 @@ namespace render { // call glUseProgram if program != current program void useProgram(gl::GLuint program); + + bool extensionSupported(std::string const& extname); TextureResource create2DTexture(unsigned width, unsigned height, bool alpha, unsigned levels = 0); TextureResource create2DArrayTexture(unsigned width, unsigned height, unsigned count, diff --git a/render/sdlutil.hh b/src/render/sdlutil.hh similarity index 96% rename from render/sdlutil.hh rename to src/render/sdlutil.hh index 3a27528..317beb4 100644 --- a/render/sdlutil.hh +++ b/src/render/sdlutil.hh @@ -1,14 +1,6 @@ #ifndef WC3RE_RENDER_SDLUTIL_HH__ #define WC3RE_RENDER_SDLUTIL_HH__ -#include -#include - -#include -#include - -#include "exceptions.hh" - namespace render { class SDLException : public Exception { diff --git a/shapdecode.cc b/src/shapdecode.cc similarity index 94% rename from shapdecode.cc rename to src/shapdecode.cc index 7a28040..bfaf19b 100644 --- a/shapdecode.cc +++ b/src/shapdecode.cc @@ -1,9 +1,5 @@ -#include -#include - -#include - #include "common.hh" + #include "util.hh" #include "ShapDecoder.hh" #include "IffFile.hh" diff --git a/treexplore.cc b/src/treexplore.cc similarity index 93% rename from treexplore.cc rename to src/treexplore.cc index b7f8763..287cca4 100644 --- a/treexplore.cc +++ b/src/treexplore.cc @@ -1,17 +1,5 @@ -#include -#include -#include -#include -#include -#include - -#ifndef WIN32 -#include -#else -#include "getopt.h" -#endif - #include "common.hh" + #include "util.hh" #include "TreFile.hh" #include "IffFile.hh" diff --git a/util.cc b/src/util.cc similarity index 96% rename from util.cc rename to src/util.cc index 37e35e6..aa1ec78 100644 --- a/util.cc +++ b/src/util.cc @@ -1,16 +1,5 @@ -#include -#include -#include -#include - -#ifndef WIN32 -#include -#include -#else -#define fileno _fileno -#endif - #include "common.hh" + #include "util.hh" #ifndef WIN32 @@ -76,7 +65,10 @@ MmapFile::MmapFile(std::string fileName) LARGE_INTEGER size; if (!GetFileSizeEx(file_hnd_, &size)) throw Win32Exception(GetLastError(), "GetFileSizeEx() failed"); - size_ = size.QuadPart; + + if (size.QuadPart > std::numeric_limits::max()) + throw Exception("File size exceeds size_t"); + size_ = static_cast(size.QuadPart); fm_hnd_ = CreateFileMapping(file_hnd_, NULL, PAGE_READONLY, 0, 0, NULL); if (fm_hnd_ == INVALID_HANDLE_VALUE) { @@ -157,7 +149,7 @@ uint8_t const* MmapFile::data() const MmapFile::operator bool() const { - return base_; + return (base_ != nullptr); } diff --git a/util.hh b/src/util.hh similarity index 91% rename from util.hh rename to src/util.hh index 03751e1..5bfc81b 100644 --- a/util.hh +++ b/src/util.hh @@ -1,17 +1,16 @@ #ifndef WC3RE_UTIL_HH__ #define WC3RE_UTIL_HH__ -#include -#include - -#ifdef WIN32 -#define NOMINMAX -#include -#endif - -#include "common.hh" #include "Resource.hh" +struct FILEDeleter { + void operator()(FILE* file) const { + fclose(file); + } +}; + +using FILEUPtr = std::unique_ptr; + class MmapFile : public Resource { public: MmapFile(std::string fileName); diff --git a/treexplore.vcxproj b/treexplore.vcxproj index f88ff0b..a96901a 100644 --- a/treexplore.vcxproj +++ b/treexplore.vcxproj @@ -10,6 +10,34 @@ Win32 + + + Create + common.hh + Create + common.hh + + + + + + + + + + + + + + + + + + + + + + {5AB0D2CB-6E7B-400C-86AE-2D61AA70B3EC} Win32Proj @@ -41,67 +69,54 @@ true + $(Configuration)\$(ProjectName)\ false + $(Configuration)\$(ProjectName)\ - - + Use Level3 Disabled WIN32;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) true - D:\devel\wc3re\libs\wingetopt;%(AdditionalIncludeDirectories) + env\SDL2_ttf-2.0.12\include;env\SDL2-2.0.3\include;libs\wingetopt;env\glm;env\glbinding\include;env\openal-soft-1.16.0-bin\include + common.hh + 4101;4251 + /Zm190 Console true - D:\devel\wc3re\Debug;%(AdditionalLibraryDirectories) + Debug;%(AdditionalLibraryDirectories) kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;wingetopt.lib;%(AdditionalDependencies) Level3 - - + Use MaxSpeed true true WIN32;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGSNDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) true - D:\devel\wc3re\libs\wingetopt; + env\SDL2_ttf-2.0.12\include;env\SDL2-2.0.3\include;libs\wingetopt;env\glm;env\glbinding\include;env\openal-soft-1.16.0-bin\include + 4101;4251 + common.hh + /Zm190 Console true true true - D:\devel\wc3re\Release;%(AdditionalLibraryDirectories) + Release;%(AdditionalLibraryDirectories) kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;wingetopt.lib;%(AdditionalDependencies) - - - - - - - - - - - - - - - - - - - diff --git a/treexplore.vcxproj.filters b/treexplore.vcxproj.filters new file mode 100644 index 0000000..ea02fbd --- /dev/null +++ b/treexplore.vcxproj.filters @@ -0,0 +1,74 @@ + + + + + {aab1f74c-b199-4808-94b3-355ea8c10661} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {a477e5a5-8ced-430d-a7b4-f3ed476e4e8b} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/wc3re.sln b/wc3re.sln index 4b27bc1..d95867d 100644 --- a/wc3re.sln +++ b/wc3re.sln @@ -4,9 +4,29 @@ Microsoft Visual Studio Solution File, Format Version 12.00 VisualStudioVersion = 12.0.31101.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "treexplore", "treexplore.vcxproj", "{5AB0D2CB-6E7B-400C-86AE-2D61AA70B3EC}" + ProjectSection(ProjectDependencies) = postProject + {50D0969D-054D-4726-A85B-3ED2FBCCC43E} = {50D0969D-054D-4726-A85B-3ED2FBCCC43E} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wingetopt", "libs\wingetopt\wingetopt.vcxproj", "{50D0969D-054D-4726-A85B-3ED2FBCCC43E}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iffexplore", "iffexplore.vcxproj", "{23DC33B8-9A83-49C4-A2F4-0EC407CCD7E8}" + ProjectSection(ProjectDependencies) = postProject + {50D0969D-054D-4726-A85B-3ED2FBCCC43E} = {50D0969D-054D-4726-A85B-3ED2FBCCC43E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shapdecode", "shapdecode.vcxproj", "{5C417180-437D-4B93-92F2-1E6E6438573A}" + ProjectSection(ProjectDependencies) = postProject + {50D0969D-054D-4726-A85B-3ED2FBCCC43E} = {50D0969D-054D-4726-A85B-3ED2FBCCC43E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mvedecode", "mvedecode.vcxproj", "{94524082-F925-415B-9ABC-D9C68CDCB01F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "objdecode", "objdecode.vcxproj", "{E3B62A51-0886-47B3-95CA-906AC56CC1A8}" + ProjectSection(ProjectDependencies) = postProject + {50D0969D-054D-4726-A85B-3ED2FBCCC43E} = {50D0969D-054D-4726-A85B-3ED2FBCCC43E} + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -21,6 +41,22 @@ Global {50D0969D-054D-4726-A85B-3ED2FBCCC43E}.Debug|Win32.Build.0 = Debug|Win32 {50D0969D-054D-4726-A85B-3ED2FBCCC43E}.Release|Win32.ActiveCfg = Release|Win32 {50D0969D-054D-4726-A85B-3ED2FBCCC43E}.Release|Win32.Build.0 = Release|Win32 + {23DC33B8-9A83-49C4-A2F4-0EC407CCD7E8}.Debug|Win32.ActiveCfg = Debug|Win32 + {23DC33B8-9A83-49C4-A2F4-0EC407CCD7E8}.Debug|Win32.Build.0 = Debug|Win32 + {23DC33B8-9A83-49C4-A2F4-0EC407CCD7E8}.Release|Win32.ActiveCfg = Release|Win32 + {23DC33B8-9A83-49C4-A2F4-0EC407CCD7E8}.Release|Win32.Build.0 = Release|Win32 + {5C417180-437D-4B93-92F2-1E6E6438573A}.Debug|Win32.ActiveCfg = Debug|Win32 + {5C417180-437D-4B93-92F2-1E6E6438573A}.Debug|Win32.Build.0 = Debug|Win32 + {5C417180-437D-4B93-92F2-1E6E6438573A}.Release|Win32.ActiveCfg = Release|Win32 + {5C417180-437D-4B93-92F2-1E6E6438573A}.Release|Win32.Build.0 = Release|Win32 + {94524082-F925-415B-9ABC-D9C68CDCB01F}.Debug|Win32.ActiveCfg = Debug|Win32 + {94524082-F925-415B-9ABC-D9C68CDCB01F}.Debug|Win32.Build.0 = Debug|Win32 + {94524082-F925-415B-9ABC-D9C68CDCB01F}.Release|Win32.ActiveCfg = Release|Win32 + {94524082-F925-415B-9ABC-D9C68CDCB01F}.Release|Win32.Build.0 = Release|Win32 + {E3B62A51-0886-47B3-95CA-906AC56CC1A8}.Debug|Win32.ActiveCfg = Debug|Win32 + {E3B62A51-0886-47B3-95CA-906AC56CC1A8}.Debug|Win32.Build.0 = Debug|Win32 + {E3B62A51-0886-47B3-95CA-906AC56CC1A8}.Release|Win32.ActiveCfg = Release|Win32 + {E3B62A51-0886-47B3-95CA-906AC56CC1A8}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE