Skip to content

Commit 1c3f5a4

Browse files
change order so svga is used before text and so svga reports when it can't initialize rather than terminating the program
1 parent 4298267 commit 1c3f5a4

File tree

4 files changed

+28
-8
lines changed

4 files changed

+28
-8
lines changed

Diff for: lib3d.cbp

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<Option object_output="obj/Debug/" />
1212
<Option type="1" />
1313
<Option compiler="gcc" />
14-
<Option parameters="test_objects/f16/f16.ac" />
14+
<Option parameters="/usr/share/games/flightgear/Aircraft/Dragonfly/Models/Dragonfly.ac" />
1515
<Compiler>
1616
<Add option="-g" />
1717
<Add option="`sdl2-config --cflags` `pkg-config libavcodec libavformat libavutil libswscale MagickWand --cflags`" />

Diff for: model.cpp

+9-5
Original file line numberDiff line numberDiff line change
@@ -702,11 +702,11 @@ class AC3DModelLoader : public ModelLoader // documentation is at http://www.ini
702702
}
703703
return RGBAF(limit<float>(color.r, 0, 1), limit<float>(color.g, 0, 1), limit<float>(color.b, 0, 1), limit<float>(color.a, 0, 1));
704704
}
705-
ColorF parseColorSpecifier(size_t startingIndex, function<void(string)> warningFunction)
705+
ColorF parseColorSpecifier(size_t startingIndex, function<void(string)> warningFunction, float scale = 1.0f)
706706
{
707707
if(line.size() < 3 + startingIndex)
708708
throw ModelLoadException("too few arguments for " + line[0]);
709-
return validateColor(RGBF(parseFloat(line[startingIndex]), parseFloat(line[startingIndex + 1]), parseFloat(line[startingIndex + 2])), warningFunction);
709+
return validateColor(RGBF(parseFloat(line[startingIndex]) * scale, parseFloat(line[startingIndex + 1]) * scale, parseFloat(line[startingIndex + 2]) * scale), warningFunction);
710710
}
711711
shared_ptr<Texture> loadImage(string fileName)
712712
{
@@ -912,9 +912,9 @@ class AC3DModelLoader : public ModelLoader // documentation is at http://www.ini
912912
};
913913
if((flags & typeMask) > 2)
914914
throw ModelLoadException("invalid SURF flags : invalid type");
915-
bool isShaded = false;
915+
bool isShaded = true;
916916
if(flags & shadedFlagMask)
917-
isShaded = true;
917+
isShaded = false;
918918
bool isTwoSided = false;
919919
if(flags & twoSidedFlagMask)
920920
isTwoSided = true;
@@ -940,6 +940,10 @@ class AC3DModelLoader : public ModelLoader // documentation is at http://www.ini
940940
material = materials[materialIndex];
941941
material.texture = texture;
942942
}
943+
warning(!isShaded, warningFunction, []()->string
944+
{
945+
return "material specified for non-shaded SURF";
946+
});
943947
line = readTokenizedLine(is);
944948
}
945949
if(line[0] == "refs")
@@ -1056,7 +1060,7 @@ class AC3DModelLoader : public ModelLoader // documentation is at http://www.ini
10561060
ColorF rgb = parseColorSpecifier(3, warningFunction);
10571061
if(line[6] != "amb")
10581062
throw ModelLoadException("missing amb for " + line[0]);
1059-
ColorF amb = parseColorSpecifier(7, warningFunction);
1063+
ColorF amb = parseColorSpecifier(7, warningFunction, 0.2f);
10601064
if(line[10] != "emis")
10611065
throw ModelLoadException("missing emis for " + line[0]);
10621066
ColorF emis = parseColorSpecifier(11, warningFunction);

Diff for: render.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1226,9 +1226,9 @@ const Driver drivers[] =
12261226
#endif
12271227
Driver("sdl", []()->shared_ptr<WindowRenderer>{return make_shared<SDLWindowRenderer>();}, makeSoftwareImageRenderer),
12281228
#ifndef __EMSCRIPTEN__
1229+
Driver("svga", makeSVGARenderer, makeSoftwareImageRenderer),
12291230
Driver("caca", makeCacaRenderer, makeSoftwareImageRenderer),
12301231
Driver("aalib", makeLibAARenderer, makeSoftwareImageRenderer),
1231-
Driver("svga", makeSVGARenderer, makeSoftwareImageRenderer),
12321232
#endif
12331233
Driver("null", []()->shared_ptr<WindowRenderer>{return make_shared<NullWindowRenderer>();}, makeSoftwareImageRenderer),
12341234
#ifndef __EMSCRIPTEN__

Diff for: svgarenderer.cpp

+17-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <unistd.h>
1010
#include <sys/select.h>
1111
#include <thread>
12+
#include <stdio.h>
1213

1314
using namespace std;
1415

@@ -103,8 +104,23 @@ class SVGARenderer : public WindowRenderer
103104
static bool didInit = false;
104105
if(didInit)
105106
return;
107+
const char *n = ttyname(0);
108+
if(!n)
109+
throw runtime_error("not running on a virtual console");
110+
string ttyname = n;
111+
string ttyprefix = "/dev/tty";
112+
if(ttyname.substr(0, ttyprefix.size()) != ttyprefix || ttyname == ttyprefix)
113+
throw runtime_error("not running on a virtual console");
114+
for(char ch : ttyname.substr(ttyprefix.size()))
115+
{
116+
if(!isdigit(ch))
117+
throw runtime_error("not running on a virtual console");
118+
}
119+
if(getuid() != 0 && geteuid() != 0)
120+
throw runtime_error("not running as the root user");
106121
didInit = true;
107-
vga_init();
122+
if(0 != vga_init())
123+
throw runtime_error("vga_init failed");
108124
atexit([](){vga_setmode(TEXT);});
109125
}
110126
void writeFrame()

0 commit comments

Comments
 (0)