diff --git a/basegraph.cpp b/basegraph.cpp index edd426bd..8d8ef557 100644 --- a/basegraph.cpp +++ b/basegraph.cpp @@ -324,13 +324,14 @@ void display_data::set_projection(int ed) { start_projection(ed, shaderside_projection); if(pmodel == mdRug) return; + #if CAP_SOLV if(glhr::new_shader_projection == glhr::shader_projection::standardSolv) { static bool toload = true; static GLuint invexpid = 0; - if(toload) { // if(!has_table.count(_program)) { + if(toload) { solv::load_table(); if(!solv::table_loaded) { pmodel = mdPerspective; set_projection(ed); return; } @@ -375,6 +376,7 @@ void display_data::set_projection(int ed) { glhr::set_solv_prec(solv::PRECX, solv::PRECY, solv::PRECZ); } + #endif if(glhr::new_shader_projection == glhr::shader_projection::standardSL2) { glhr::set_index_sl(0); diff --git a/geom-exp.cpp b/geom-exp.cpp index 22665bc3..a5568039 100644 --- a/geom-exp.cpp +++ b/geom-exp.cpp @@ -422,6 +422,8 @@ void ge_select_tiling() { dynamicval cg(geometry, g); if(archimedean && !CAP_ARCM) continue; if(cryst && !CAP_CRYSTAL) continue; + if(sol && !CAP_SOLV) continue; + if(WDIM == 3 && MAXMDIM == 3) continue; if(geometry == gFieldQuotient && !CAP_FIELD) continue; if((!!quotient) ^ select_quotient) continue; if((WDIM == 3) ^ select_dims) continue; @@ -481,7 +483,9 @@ void ge_select_tiling() { dialog::addBreak(100); dialog::addBoolItem_action(XLAT("show quotient spaces"), select_quotient, 'Q'); + #if MAXMDIM == 4 dialog::addBoolItem_action(XLAT("three-dimensional"), select_dims, 'D'); + #endif dual::add_choice(); dialog::addBack(); diff --git a/nonisotropic.cpp b/nonisotropic.cpp index 0a52785d..0f0c061c 100644 --- a/nonisotropic.cpp +++ b/nonisotropic.cpp @@ -37,7 +37,7 @@ EX namespace nisot { EX } EX namespace solv { - + #if CAP_SOLV EX int PRECX, PRECY, PRECZ; EX vector inverse_exp_table; @@ -336,6 +336,7 @@ EX namespace solv { "return res;" "}"; + #endif EX } EX namespace nilv { @@ -1319,14 +1320,18 @@ EX } EX namespace nisot { EX hyperpoint christoffel(const hyperpoint at, const hyperpoint velocity, const hyperpoint transported) { - if(sol) return solv::christoffel(at, velocity, transported); - else if(nil) return nilv::christoffel(at, velocity, transported); + if(nil) return nilv::christoffel(at, velocity, transported); + #if CAP_SOLV + else if(sol) return solv::christoffel(at, velocity, transported); + #endif else if(sl2) return slr::christoffel(at, velocity, transported); else return point3(0, 0, 0); } EX bool in_table_range(hyperpoint h) { + #if CAP_SOLV if(sol) return solv::in_table_range(h); + #endif return true; } @@ -1415,7 +1420,9 @@ EX namespace nisot { } EX hrmap *new_map() { + #if CAP_SOLV if(sol) return new solv::hrmap_sol; + #endif if(nil) return new nilv::hrmap_nil; if(prod) return new product::hrmap_product; if(hybri) return new rots::hrmap_rotation_space; @@ -1424,15 +1431,18 @@ EX namespace nisot { auto config = addHook(hooks_args, 0, [] () { using namespace arg; + #if CAP_SOLV if(argis("-solrange")) { shift_arg_formula(solv::solrange_xy); shift_arg_formula(solv::solrange_z); return 0; } + #endif if(argis("-slrange")) { shift_arg_formula(slr::range_xy); return 0; } + #if CAP_SOLV else if(argis("-fsol")) { shift(); solv::solfname = args(); return 0; @@ -1442,6 +1452,7 @@ EX namespace nisot { shift_arg_formula(solv::glitch_z); return 0; } + #endif else if(argis("-solgeo")) { geodesic_movement = true; pmodel = mdGeodesic; diff --git a/shaders.cpp b/shaders.cpp index 806dee8e..26aaea33 100644 --- a/shaders.cpp +++ b/shaders.cpp @@ -695,7 +695,7 @@ void init() { bool ball = (sp == shader_projection::ball); bool flatten = (sp == shader_projection::flatten); - if(ssol && ISWEB) continue; + if(ssol && !CAP_SOLV) continue; programs[i][j] = new GLprogram(stringbuilder( 1, "#define PI 3.14159265358979324\n", @@ -743,7 +743,9 @@ void init() { 1, " return (h[2] < 0.0 ? -1.0 : 1.0) * sqrt(h[2]*h[2] - h[0]*h[0] - h[1]*h[1]);", 1, " }", - ssol, solv::solshader, + #if CAP_SOLV + ssol, solv::solshader, + #endif snil, nilv::nilshader, ssl2, slr::slshader, diff --git a/sysconfig.h b/sysconfig.h index 16315b79..1180c525 100644 --- a/sysconfig.h +++ b/sysconfig.h @@ -504,6 +504,10 @@ union SDL_Event; #define CAP_STARTANIM (!(ISMINI)) #endif +#ifndef CAP_SOLV +#define CAP_SOLV (MAXMDIM >= 4 && !ISWEB) +#endif + #ifndef CAP_FIELD #define CAP_FIELD (!(ISMINI)) #endif