@@ -40,17 +40,25 @@ using com_ptr = std::unique_ptr<T, ComDeleter>;
4040int wmain (int argc, LPCWSTR* argv)
4141{
4242 WCHAR dstName[MAX_PATH];
43- OpenGLRenderer renderer;
43+ std::unique_ptr<OpenGLRenderer> renderer;
44+ try {
45+ renderer = std::make_unique<OpenGLRenderer>();
46+ }
47+ catch (std::exception& e) {
48+ std::cout << e.what () << std::endl;
49+ exit (1 );
50+ }
4451 std::vector<uint32_t > buf;
4552 int targetSize = 0 ;
53+ bool renderHd = false ;
4654
4755 for (int i = 1 ; i < argc; i++) {
4856
4957 LPCWSTR f = argv[i];
5058 int newSize;
5159 if (fileExists (f)) {
5260
53-
61+
5462 std::unique_ptr<SarFile> sar;
5563 try {
5664 IStream* tmp;
@@ -67,24 +75,24 @@ int wmain(int argc, LPCWSTR* argv)
6775 std::cout << e.what () << std::endl;
6876 continue ;
6977 }
70-
78+
7179 DEBUG_SCOPE ({
7280 wcscpy_s (dstName, f);
7381 LPWSTR dot = wcsrchr (dstName, L' .' );
7482 *dot = ' \0 ' ;
7583 wcscat_s (dstName, L" .txt" );
7684
77- FILE* outFile;
85+ FILE * outFile;
7886 _wfopen_s (&outFile, dstName, L" wb" );
79-
87+
8088 for (int i = 0 ; i < sar->numLayers (); i++) {
8189 SarLayer& sl = sar->layer (i);
8290 fprintf_s (outFile, " Shape: " , sl.shape ());
8391 uint16_t shape = sl.shape ();
8492 for (int i = 0 ; i < 10 ; i++) {
8593 bool set = shape & (1 << (10 - 1 - i));
8694 fprintf_s (outFile, " %d" , set ? 1 : 0 );
87- if (i == 1 || i == 5 )
95+ if (i == 1 || i == 5 )
8896 fprintf_s (outFile, " _" );
8997 }
9098 fprintf_s (outFile, " %04d\n " , sl.shape ());
@@ -95,15 +103,16 @@ int wmain(int argc, LPCWSTR* argv)
95103
96104 int sw = sar->width ();
97105 int sh = sar->height ();
98- if (targetSize) {
106+ if (targetSize != 0 ) {
99107 int maxDim = __max (sw, sh);
100108 sw = sw * targetSize / maxDim;
101109 sh = sh * targetSize / maxDim;
102110 }
103111
104112 int numPixels = sw * sh;
105113 buf.resize (numPixels);
106- renderer.Render (*sar, sw, sh, &buf[0 ]);
114+ renderer->SetFlag (OpenGLRenderer::FLAG_HD, renderHd);
115+ renderer->Render (*sar, sw, sh, &buf[0 ]);
107116
108117 for (auto p = buf.begin (); p < buf.end (); p++) {
109118 uint32_t pixel = *p;
@@ -125,7 +134,8 @@ int wmain(int argc, LPCWSTR* argv)
125134
126135 }
127136 else if ((newSize = wcstol (f, nullptr , 10 )) != 0 ) {
128- targetSize = newSize < 0 ? 0 : newSize;
137+ targetSize = abs (newSize);
138+ renderHd = newSize < 0 ;
129139 }
130140 }
131141}
0 commit comments