From: Sam Moore Date: Sat, 4 Oct 2014 13:04:57 +0000 (+0800) Subject: More turtles X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fcode.git;a=commitdiff_plain;h=5ef972c655ad9d17ac01e208c3d7bc57a4c10c7c More turtles Also we can't take logarithms of negative numbers, dur --- diff --git a/src/Makefile b/src/Makefile index fd0b81b..23930b6 100644 --- a/src/Makefile +++ b/src/Makefile @@ -36,7 +36,9 @@ BIN = ../bin/ipdf REALTYPE=1 CONTROLPANEL=enabled QUADTREE=disabled -DEF = -DREALTYPE=$(REALTYPE) +DEF = -DREALTYPE=$(REALTYPE) + + ## Only link with things we care about diff --git a/src/debugscript.cpp b/src/debugscript.cpp index 7ca6d98..c2cc2ef 100644 --- a/src/debugscript.cpp +++ b/src/debugscript.cpp @@ -243,8 +243,8 @@ void DebugScript::PrintPerformance(View * view, Screen * scr) printf("%d\t%lu\t%lu\t%s\t%f\t%s\t%f\t%s\t%f\t%lu\n", now.object_count, (uint64_t)now.clock, (uint64_t)(now.clock - m_perf_last.clock), - Str(now.view_bounds.x).c_str(), Log10(now.view_bounds.x), - Str(now.view_bounds.y).c_str(), Log10(now.view_bounds.y), + Str(now.view_bounds.x).c_str(), Log10(Abs(now.view_bounds.x)), + Str(now.view_bounds.y).c_str(), Log10(Abs(now.view_bounds.y)), Str(now.view_bounds.w).c_str(), Log10(now.view_bounds.w), Size(now.view_bounds.w)); m_perf_last = now; diff --git a/src/gmprat.h b/src/gmprat.h index f5a2f1f..c19d95d 100644 --- a/src/gmprat.h +++ b/src/gmprat.h @@ -122,7 +122,7 @@ inline std::ostream & operator<<(std::ostream & os, const Gmprat & fith) inline std::string Str(const Gmprat & g) {return g.Str();} inline double Log10(const Gmprat & g) {return g.Log10();} inline size_t Size(const Gmprat & g) {return g.Size();} - +inline Gmprat Abs(const Gmprat & g) {return g.Abs();} #endif //_GMPRAT_H diff --git a/src/main.h b/src/main.h index 108e392..1f057ea 100644 --- a/src/main.h +++ b/src/main.h @@ -79,7 +79,7 @@ void MainLoop(Document & doc, Screen & scr, View & view, int max_frames = -1) // order is important... segfaults occur when screen (which inits GL) is not constructed first -_- DebugScript script; - scr.DebugFontInit("fonts/DejaVuSansMono.ttf"); + scr.DebugFontInit("fonts/DejaVuSansMono.ttf", 32); scr.SetMouseHandler(RatCatcher); if (script_filename) @@ -129,6 +129,11 @@ void MainLoop(Document & doc, Screen & scr, View & view, int max_frames = -1) printf("%lu\t%f\t%f\t%f\t%f\t%f\t%f\n", (long unsigned int)frames, total_real_time, total_cpu_time, total_gpu_time, real_frame, cpu_frame, gpu_frame); data_points++; } + + scr.DebugFontPrintF("View Width = %s m\n", Str(view.GetBounds().w * VReal(22e-3)).c_str()); + scr.DebugFontPrintF("Similar size: %s\n", HumanScale(view.GetBounds().w * VReal(22e-3))); + + #if 0 scr.DebugFontPrintF("Rendered frame %lu\n", (uint64_t)frames); scr.DebugFontPrintF("Lazy Rendering = %d\n", view.UsingLazyRendering()); if (cpu_frame > 0 && total_cpu_time > 0) @@ -170,6 +175,8 @@ void MainLoop(Document & doc, Screen & scr, View & view, int max_frames = -1) { scr.DebugFontPrint("Doing rendering using CPU.\n"); } + #endif // 0 + scr.Present(); } } diff --git a/src/real.h b/src/real.h index 917f3e0..42bc5c0 100644 --- a/src/real.h +++ b/src/real.h @@ -120,7 +120,7 @@ namespace IPDF inline Real Sqrt(const Real & r) {return Real(sqrt(r.ToDouble()));} inline Real RealFromStr(const char * str) {return Real(strtod(str, NULL));} inline Real Abs(const Real & a) {return (a > Real(0)) ? a : Real(0)-a;} - inline std::string Str(const Real & a) {return a.Str();} + #else #error "Type of Real unspecified." @@ -139,7 +139,6 @@ namespace IPDF inline double Log10(double a) {return log(a)/log(10.0);} inline size_t Size(double a) {return sizeof(a);} inline size_t Size(float a) {return sizeof(a);} - inline int64_t Int64(double a) { @@ -198,6 +197,91 @@ namespace IPDF inline Real RealFromStr(const std::string & str) {return RealFromStr(str.c_str());} + // things stolen from wikipedia and googling + inline const char * HumanScale(double f) + { + if (f < 1e-36) + return "RATHER SMALL"; + if (f < 1e-35) + return "Plank Length"; + if (f < 1e-25) + return "Turtles all the way"; + if (f < 1e-24) + return "More turtles"; + if (f < 1e-23) + return "Turtles"; + if (f < 1e-22) + return "This small"; + if (f < 1e-21) + return "To find things"; + if (f < 1e-20) + return "It is pretty difficult"; + if (f < 1e-19) + return "Not much"; + if (f < 1e-17) + return "Weak Force"; + if (f < 1e-16) + return "Proton"; + if (f < 1e-15) + return "(Classical) Electron"; + if (f < 1e-11) + return "Inter atomic (still)"; + if (f < 1e-10) + return "Inter atomic"; + if (f < 1e-9) + return "Atom"; + if (f < 1e-8) + return "DNA"; + if (f < 1e-7) + return "Virus"; + if (f < 1e-6) + return "Light"; + if (f < 1e-5) + return "Bacteria"; + if (f < 1e-4) + return "4004 Transistor"; + if (f < 1e-3) + return "Ant"; + if (f < 1e-2) + return "Coin"; + if (f < 1e-1) + return "iPhone"; + if (f < 1e0) + return "Person"; + if (f < 1e1) + return "Building"; + if (f < 1e2) + return "Football Field"; + if (f < 1e3) + return "Mountain"; + if (f < 1e4) + return "Clouds"; + if (f < 1e5) + return "Countries"; + if (f < 1e6) + return "Earth"; + if (f < 1e8) + return "Between Earth and Moon"; + if (f < 1e9) + return "Solar System"; + if (f < 1e13) + return "Distance to nearest Star"; + if (f < 1e21) + return "Milky Way"; + if (f < 1e26) + return "Universe"; + if (f < 1e27) + return "A bigger Universe"; + if (f < 1e28) + return "Really big things"; + if (f < 1e29) + return "Almost as big as..."; + if (f < 1e30) + return "Wolfram's Magestic Ego"; + return "QUITE BIG"; + + } + inline void DebugRealInfo() { Debug("Compiled with REAL = %d => \"%s\" sizeof(Real) == %d bytes", REALTYPE, g_real_name[REALTYPE], sizeof(Real)); diff --git a/src/turtles_all_the_way_down.script b/src/turtles_all_the_way_down.script index af85e89..fcddfe7 100644 --- a/src/turtles_all_the_way_down.script +++ b/src/turtles_all_the_way_down.script @@ -1,7 +1,29 @@ # BECAUSE I CAN gpu lazy -debugfont off +#debugfont off + + +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 1 +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 1 +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 1 +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 1 +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 1 +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 1 +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 1 +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 1 +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 1 +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 1 loadsvg svg-tests/turtle.svg loop 50 pxzoom 430 170 1 loadsvg svg-tests/turtle.svg @@ -24,11 +46,53 @@ loadsvg svg-tests/turtle.svg loop 50 pxzoom 430 170 1 # Hmm, we sort of need a for loop... +loop 1000 pxzoom 430 170 -1 + +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 -1 +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 -1 +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 -1 +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 -1 +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 -1 +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 -1 +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 -1 +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 -1 +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 -1 +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 -1 +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 -1 +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 -1 +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 -1 +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 -1 +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 -1 +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 -1 +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 -1 +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 -1 +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 -1 +loadsvg svg-tests/turtle.svg +loop 50 pxzoom 430 170 -1 clearperf label start printperf -loop 500 pxzoom 430 170 -1 -loop 500 pxzoom 430 170 1 +loop 3000 pxzoom 430 170 1 +loop 3000 pxzoom 430 170 -1 goto start wait