diff --git a/libid/engine/calc_frac_init.cpp b/libid/engine/calc_frac_init.cpp index 509ad0933..48935d49f 100644 --- a/libid/engine/calc_frac_init.cpp +++ b/libid/engine/calc_frac_init.cpp @@ -244,7 +244,7 @@ void calc_frac_init() // initialize a *pile* of stuff for fractal calculation } // match Julibrot with integer mode of orbit - if (g_fractal_type == FractalType::JULIBROT && get_fractal_specific(g_new_orbit_type)->is_integer == 0) + if (g_fractal_type == FractalType::JULIBROT) { set_fractal_type(FractalType::JULIBROT_FP); } @@ -252,7 +252,7 @@ void calc_frac_init() // initialize a *pile* of stuff for fractal calculation assert(g_cur_fractal_specific == get_fractal_specific(g_fractal_type)); g_cur_fractal_specific = get_fractal_specific(g_fractal_type); - g_integer_fractal = g_cur_fractal_specific->is_integer; + g_integer_fractal = 0; if (g_potential_flag && g_potential_params[2] != 0.0) { diff --git a/libid/engine/fractals.cpp b/libid/engine/fractals.cpp index a7eb926af..a7a2ce3ea 100644 --- a/libid/engine/fractals.cpp +++ b/libid/engine/fractals.cpp @@ -177,13 +177,6 @@ int pow(LComplex *base, int exp, LComplex *result, int bit_shift) return g_overflow; } -int julia_fractal() -{ - g_l_new_z.x = g_l_temp_sqr_x - g_l_temp_sqr_y + g_long_param->x; - g_l_new_z.y = multiply(g_l_old_z.x, g_l_old_z.y, g_bit_shift_less_1) + g_long_param->y; - return g_bailout_long(); -} - int julia_fp_fractal() { g_new_z.x = g_temp_sqr_x - g_temp_sqr_y + g_float_param->x; diff --git a/libid/fractals/fractalp.cpp b/libid/fractals/fractalp.cpp index d0ca3d4e4..4124cab67 100644 --- a/libid/fractals/fractalp.cpp +++ b/libid/fractals/fractalp.cpp @@ -217,7 +217,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_NEWTON_BASINS, HelpLabels::HF_NEWTON_BASIN, // FractalFlags::NONE, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // newton_fractal2, other_julia_fp_per_pixel, newton_setup, standard_fractal, // @@ -232,7 +231,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_MANDEL, HelpLabels::HF_MANDEL, // FractalFlags::BAIL_TEST | FractalFlags::BF_MATH | FractalFlags::PERTURB, // -2.5F, 1.5F, -1.5F, 1.5F, // - 0, // FractalType::JULIA_FP, FractalType::NO_FRACTAL, // SymmetryType::X_AXIS_NO_PARAM, // julia_fp_fractal, mandel_fp_per_pixel, mandel_fp_setup, standard_fractal, // @@ -248,7 +246,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_NEWTON, HelpLabels::HF_NEWTON, // FractalFlags::NONE, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::X_AXIS, // newton_fractal2, other_julia_fp_per_pixel, newton_setup, standard_fractal, // @@ -263,7 +260,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_JULIA, HelpLabels::HF_JULIA, // FractalFlags::OK_JB | FractalFlags::BAIL_TEST | FractalFlags::BF_MATH, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::MANDEL_FP, // SymmetryType::ORIGIN, // julia_fp_fractal, julia_fp_per_pixel, julia_fp_setup, standard_fractal, // @@ -283,7 +279,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_PLASMA, HelpLabels::HF_PLASMA, // FractalFlags::NO_ZOOM | FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::NO_RESUME, // -2.0F, 2.0F, -1.5F, 1.5F, // - 1, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // nullptr, nullptr, standalone_setup, plasma, // @@ -298,7 +293,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_MANDEL_FN, HelpLabels::HF_MANDEL_FN, // FractalFlags::TRIG1, // -8.0F, 8.0F, -6.0F, 6.0F, // - 0, // FractalType::LAMBDA_TRIG_FP, FractalType::NO_FRACTAL, // SymmetryType::XY_AXIS_NO_PARAM, // lambda_trig_fp_fractal, other_mandel_fp_per_pixel, mandel_trig_setup, // @@ -314,7 +308,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_TAYLOR_SKINNER_VARIATIONS, HelpLabels::HF_MAN_O_WAR, // FractalFlags::BAIL_TEST, // -2.5F, 1.5F, -1.5F, 1.5F, // - 0, // FractalType::MAN_O_WAR_J_FP, FractalType::NO_FRACTAL, // SymmetryType::X_AXIS_NO_PARAM, // man_o_war_fp_fractal, mandel_fp_per_pixel, mandel_fp_setup, standard_fractal, // @@ -334,7 +327,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_TEST, HelpLabels::HF_TEST, // FractalFlags::NONE, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // nullptr, nullptr, standalone_setup, test, // @@ -349,7 +341,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_TAYLOR_SKINNER_VARIATIONS, HelpLabels::HF_SQR_FN, // FractalFlags::TRIG1 | FractalFlags::BAIL_TEST, // -4.0F, 4.0F, -3.0F, 3.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::X_AXIS, // sqr_trig_fp_fractal, other_julia_fp_per_pixel, sqr_trig_setup, standard_fractal, // @@ -364,7 +355,7 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_IFS, HelpLabels::SPECIAL_IFS, // FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::NO_RESUME | FractalFlags::INF_CALC, // -8.0F, 8.0F, -1.0F, 11.0F, // - 16, // + // 16, TODO: convert to floating-point // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // nullptr, nullptr, standalone_setup, ifs, // @@ -380,7 +371,6 @@ FractalSpecific g_fractal_specific[] = FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::NO_RESUME | FractalFlags::PARAMS_3D | FractalFlags::INF_CALC, // -11.0F, 11.0F, -11.0F, 11.0F, // - 16, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // nullptr, nullptr, standalone_setup, ifs, // @@ -395,7 +385,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_TAYLOR_SKINNER_VARIATIONS, HelpLabels::HF_FN_Z_TIMES_Z, // FractalFlags::TRIG1 | FractalFlags::BAIL_TEST, // -4.0F, 4.0F, -3.0F, 3.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::XY_AXIS, // trig_z_sqrd_fp_fractal, julia_fp_per_pixel, julia_fp_setup, standard_fractal, // @@ -410,7 +399,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_BIFURCATION, HelpLabels::HF_BIFURCATION, // FractalFlags::TRIG1 | FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::NO_ROTATE, // 1.9F, 3.0F, 0.0F, 1.34F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // bifurc_verhulst_trig, nullptr, standalone_setup, bifurcation, // @@ -425,7 +413,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_TAYLOR_SKINNER_VARIATIONS, HelpLabels::HF_FN_PLUS_FN, // FractalFlags::TRIG2 | FractalFlags::BAIL_TEST, // -4.0F, 4.0F, -3.0F, 3.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::X_AXIS, // trig_plus_trig_fp_fractal, other_julia_fp_per_pixel, trig_plus_trig_fp_setup, // @@ -441,7 +428,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_TAYLOR_SKINNER_VARIATIONS, HelpLabels::HF_FN_TIMES_FN, // FractalFlags::TRIG2 | FractalFlags::BAIL_TEST, // -4.0F, 4.0F, -3.0F, 3.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::X_AXIS, // trig_x_trig_fp_fractal, other_julia_fp_per_pixel, fn_x_fn_setup, standard_fractal, // @@ -456,7 +442,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_TAYLOR_SKINNER_VARIATIONS, HelpLabels::HF_SQR_1_OVER_FN, // FractalFlags::TRIG1 | FractalFlags::BAIL_TEST, // -4.0F, 4.0F, -3.0F, 3.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // sqr_1_over_trig_fp_fractal, other_julia_fp_per_pixel, sqr_trig_setup, // @@ -472,7 +457,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_TAYLOR_SKINNER_VARIATIONS, HelpLabels::HF_FN_X_Z_PLUS_Z, // FractalFlags::TRIG1 | FractalFlags::BAIL_TEST, // -4.0F, 4.0F, -3.0F, 3.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::X_AXIS, // z_x_trig_plus_z_fp_fractal, julia_fp_per_pixel, z_x_trig_plus_z_setup, // @@ -488,7 +472,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_KAM, HelpLabels::HF_KAM, // FractalFlags::NO_GUESS | FractalFlags::NO_TRACE, // -1.0F, 1.0F, -.75F, .75F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // (VF) kam_torus_float_orbit, nullptr, orbit3d_float_setup, orbit2d_float, // @@ -504,7 +487,6 @@ FractalSpecific g_fractal_specific[] = FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::NO_RESUME | FractalFlags::PARAMS_3D, // -3.0F, 3.0F, -1.0F, 3.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // (VF) kam_torus_float_orbit, nullptr, orbit3d_float_setup, orbit3d_float, // @@ -519,7 +501,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_PICKOVER_MANDEL_JULIA, HelpLabels::HF_MANDEL_FN_PLUS_Z_SQRD, // FractalFlags::TRIG1 | FractalFlags::BAIL_TEST, // -2.5F, 1.5F, -1.5F, 1.5F, // - 0, // FractalType::JUL_TRIG_PLUS_Z_SQRD_FP, FractalType::NO_FRACTAL, // SymmetryType::X_AXIS_NO_PARAM, // trig_plus_z_squared_fp_fractal, mandel_fp_per_pixel, mandel_fp_setup, // @@ -535,7 +516,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_PICKOVER_MANDEL_JULIA, HelpLabels::HF_JULIA_FN_PLUS_Z_SQRD, // FractalFlags::TRIG1 | FractalFlags::OK_JB | FractalFlags::BAIL_TEST, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::MAN_TRIG_PLUS_Z_SQRD_FP, // SymmetryType::NONE, // trig_plus_z_squared_fp_fractal, julia_fp_per_pixel, julia_fn_plus_z_sqrd_setup, // @@ -551,7 +531,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_LAMBDA_FN, HelpLabels::HF_LAMBDA_FN, // FractalFlags::TRIG1 | FractalFlags::OK_JB, // -4.0F, 4.0F, -3.0F, 3.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::MANDEL_TRIG_FP, // SymmetryType::PI_SYM, // lambda_trig_fp_fractal, other_julia_fp_per_pixel, lambda_trig_setup, // @@ -567,7 +546,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_PICKOVER_MANDEL_JULIA, HelpLabels::HF_MANDEL_Z_POWER, // FractalFlags::BAIL_TEST | FractalFlags::BF_MATH | FractalFlags::PERTURB, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::JULIA_Z_POWER_FP, FractalType::NO_FRACTAL, // SymmetryType::X_AXIS_NO_IMAG, // float_z_power_fractal, other_mandel_fp_per_pixel, mandel_fp_setup, // @@ -584,7 +562,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_PICKOVER_MANDEL_JULIA, HelpLabels::HF_JULIA_Z_POWER, // FractalFlags::OK_JB | FractalFlags::BAIL_TEST | FractalFlags::BF_MATH, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::MANDEL_Z_POWER_FP, // SymmetryType::ORIGIN, // float_z_power_fractal, other_julia_fp_per_pixel, julia_fp_setup, // @@ -600,7 +577,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_PICKOVER_MANDEL_JULIA, HelpLabels::HF_MANDEL_Z_Z_POWER, // FractalFlags::BAIL_TEST | FractalFlags::BF_MATH, // -2.5F, 1.5F, -1.5F, 1.5F, // - 0, // FractalType::JUL_Z_TO_Z_PLUS_Z_PWR_FP, FractalType::NO_FRACTAL, // SymmetryType::X_AXIS_NO_PARAM, // float_z_to_z_plus_z_pwr_fractal, other_mandel_fp_per_pixel, mandel_fp_setup, // @@ -616,7 +592,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_PICKOVER_MANDEL_JULIA, HelpLabels::HF_JULIA_Z_Z_PWR, // FractalFlags::OK_JB | FractalFlags::BAIL_TEST, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::MAN_Z_TO_Z_PLUS_Z_PWR_FP, // SymmetryType::NONE, // float_z_to_z_plus_z_pwr_fractal, other_julia_fp_per_pixel, julia_fp_setup, // @@ -632,7 +607,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_PICKOVER_MANDEL_JULIA, HelpLabels::HF_MANDEL_FN_PLUS_EXP, // FractalFlags::TRIG1 | FractalFlags::BAIL_TEST, // -8.0F, 8.0F, -6.0F, 6.0F, // - 0, // FractalType::JUL_TRIG_PLUS_EXP_FP, FractalType::NO_FRACTAL, // SymmetryType::X_AXIS_NO_PARAM, // float_trig_plus_exponent_fractal, other_mandel_fp_per_pixel, mandel_fp_setup, // @@ -648,7 +622,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_PICKOVER_MANDEL_JULIA, HelpLabels::HF_JULIA_FN_PLUS_EXP, // FractalFlags::TRIG1 | FractalFlags::OK_JB | FractalFlags::BAIL_TEST, // -4.0F, 4.0F, -3.0F, 3.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::MAN_TRIG_PLUS_EXP_FP, // SymmetryType::NONE, // float_trig_plus_exponent_fractal, other_julia_fp_per_pixel, julia_fp_setup, // @@ -664,7 +637,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_POPCORN, HelpLabels::HF_POPCORN, // FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::TRIG4, // -3.0F, 3.0F, -2.25F, 2.25F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NO_PLOT, // popcorn_fractal_fn, other_julia_fp_per_pixel, julia_fp_setup, popcorn, // @@ -679,7 +651,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_LORENZ, HelpLabels::HF_LORENZ, // FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::INF_CALC, // -15.0F, 15.0F, 0.0F, 30.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // (VF) lorenz3d_float_orbit, nullptr, orbit3d_float_setup, orbit2d_float, // @@ -694,7 +665,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_NEWTON_COMPLEX, HelpLabels::HF_COMPLEX_NEWTON, // FractalFlags::NONE, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // complex_newton, other_julia_fp_per_pixel, complex_newton_setup, // @@ -710,7 +680,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_NEWTON_COMPLEX, HelpLabels::HF_COMPLEX_NEWTON, // FractalFlags::NONE, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // complex_basin, other_julia_fp_per_pixel, complex_newton_setup, // @@ -726,7 +695,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_PETERSON_VARIATIONS, HelpLabels::HF_COMPLEX_MARKS_MAND, // FractalFlags::BAIL_TEST, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::COMPLEX_MARKS_JUL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // marks_cplx_mand, marks_cplx_mand_per_pixel, mandel_fp_setup, standard_fractal, // @@ -741,7 +709,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_PETERSON_VARIATIONS, HelpLabels::HF_COMPLEX_MARKS_JUL, // FractalFlags::BAIL_TEST, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::COMPLEX_MARKS_MAND, // SymmetryType::NONE, // marks_cplx_mand, julia_fp_per_pixel, julia_fp_setup, standard_fractal, // @@ -756,7 +723,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_FORMULA, HelpLabels::SPECIAL_FORMULA, // FractalFlags::MORE, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::SETUP, // formula, form_per_pixel, formula_setup_fp, standard_fractal, // @@ -771,7 +737,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_SIERPINSKI, HelpLabels::HF_SIERPINSKI, // FractalFlags::NONE, // -4.0F / 3.0F, 96.0F / 45.0F, -0.9F, 1.7F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // sierpinski_fp_fractal, other_julia_fp_per_pixel, sierpinski_fp_setup, // @@ -787,7 +752,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_LAMBDA, HelpLabels::HF_LAMBDA, // FractalFlags::OK_JB | FractalFlags::BAIL_TEST, // -1.5F, 2.5F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::MANDEL_LAMBDA_FP, // SymmetryType::NONE, // lambda_fp_fractal, julia_fp_per_pixel, julia_fp_setup, standard_fractal, // @@ -802,7 +766,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_BARNSLEY, HelpLabels::HF_BARNSLEY_M1, // FractalFlags::BAIL_TEST, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::BARNSLEY_J1_FP, FractalType::NO_FRACTAL, // SymmetryType::XY_AXIS_NO_PARAM, // barnsley1_fp_fractal, other_mandel_fp_per_pixel, mandel_fp_setup, // @@ -818,7 +781,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_BARNSLEY, HelpLabels::HF_BARNSLEY_J1, // FractalFlags::OK_JB | FractalFlags::BAIL_TEST, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::BARNSLEY_M1_FP, // SymmetryType::ORIGIN, // barnsley1_fp_fractal, other_julia_fp_per_pixel, julia_fp_setup, // @@ -834,7 +796,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_BARNSLEY, HelpLabels::HF_BARNSLEY_M2, // FractalFlags::BAIL_TEST, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::BARNSLEY_J2_FP, FractalType::NO_FRACTAL, // SymmetryType::Y_AXIS_NO_PARAM, // barnsley2_fp_fractal, other_mandel_fp_per_pixel, mandel_fp_setup, // @@ -850,7 +811,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_BARNSLEY, HelpLabels::HF_BARNSLEY_J2, // FractalFlags::OK_JB | FractalFlags::BAIL_TEST, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::BARNSLEY_M2_FP, // SymmetryType::ORIGIN, // barnsley2_fp_fractal, other_julia_fp_per_pixel, julia_fp_setup, // @@ -866,7 +826,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_BARNSLEY, HelpLabels::HF_BARNSLEY_M3, // FractalFlags::BAIL_TEST, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::BARNSLEY_J3_FP, FractalType::NO_FRACTAL, // SymmetryType::X_AXIS_NO_PARAM, // barnsley3_fp_fractal, other_mandel_fp_per_pixel, mandel_fp_setup, // @@ -882,7 +841,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_BARNSLEY, HelpLabels::HF_BARNSLEY_J3, // FractalFlags::OK_JB | FractalFlags::BAIL_TEST, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::BARNSLEY_M3_FP, // SymmetryType::NONE, // barnsley3_fp_fractal, other_julia_fp_per_pixel, julia_fp_setup, // @@ -898,7 +856,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_MANDEL_LAMBDA, HelpLabels::HF_MANDEL_LAMBDA, // FractalFlags::BAIL_TEST, // -3.0F, 5.0F, -3.0F, 3.0F, // - 0, // FractalType::LAMBDA_FP, FractalType::NO_FRACTAL, // SymmetryType::X_AXIS_NO_PARAM, // lambda_fp_fractal, mandel_fp_per_pixel, mandel_fp_setup, standard_fractal, // @@ -914,7 +871,6 @@ FractalSpecific g_fractal_specific[] = FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::NO_RESUME | FractalFlags::PARAMS_3D | FractalFlags::INF_CALC, // -30.0F, 30.0F, -30.0F, 30.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // (VF) lorenz3d_float_orbit, nullptr, orbit3d_float_setup, orbit3d_float, // @@ -930,7 +886,6 @@ FractalSpecific g_fractal_specific[] = FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::NO_RESUME | FractalFlags::PARAMS_3D | FractalFlags::INF_CALC, // -30.0F, 30.0F, -20.0F, 40.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // (VF) rossler_float_orbit, nullptr, orbit3d_float_setup, orbit3d_float, // @@ -945,7 +900,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_HENON, HelpLabels::HF_HENON, // FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::INF_CALC, // -1.4F, 1.4F, -.5F, .5F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // (VF) henon_float_orbit, nullptr, orbit3d_float_setup, orbit2d_float, // @@ -961,7 +915,6 @@ FractalSpecific g_fractal_specific[] = FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::NO_RESUME | FractalFlags::PARAMS_3D, // -8.0F / 3.0F, 8.0F / 3.0F, -2.0F, 2.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // (VF) pickover_float_orbit, nullptr, orbit3d_float_setup, orbit3d_float, // @@ -976,7 +929,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_GINGER, HelpLabels::HF_GINGERBREAD, // FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::INF_CALC, // -4.5F, 8.5F, -4.5F, 8.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // (VF) ginger_bread_float_orbit, nullptr, orbit3d_float_setup, orbit2d_float, // @@ -996,7 +948,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_DIFFUSION, HelpLabels::HF_DIFFUSION, // FractalFlags::NO_ZOOM | FractalFlags::NO_GUESS | FractalFlags::NO_TRACE, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // nullptr, nullptr, standalone_setup, diffusion, // @@ -1011,7 +962,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_UNITY, HelpLabels::HF_UNITY, // FractalFlags::NONE, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::XY_AXIS, // unity_fp_fractal, other_julia_fp_per_pixel, standard_setup, standard_fractal, // @@ -1026,7 +976,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_TAYLOR_SKINNER_VARIATIONS, HelpLabels::HF_SPIDER, // FractalFlags::BAIL_TEST, // -2.5F, 1.5F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::X_AXIS_NO_PARAM, // spider_fp_fractal, mandel_fp_per_pixel, mandel_fp_setup, standard_fractal, // @@ -1041,7 +990,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_TAYLOR_SKINNER_VARIATIONS, HelpLabels::HF_TETRATE, // FractalFlags::BAIL_TEST, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::X_AXIS_NO_IMAG, // tetrate_fp_fractal, other_mandel_fp_per_pixel, mandel_fp_setup, // @@ -1057,7 +1005,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_MAGNET, HelpLabels::HF_MAGNET_M1, // FractalFlags::NONE, // -4.0F, 4.0F, -3.0F, 3.0F, // - 0, // FractalType::MAGNET_1J, FractalType::NO_FRACTAL, // SymmetryType::X_AXIS_NO_PARAM, // magnet1_fractal, mandel_fp_per_pixel, mandel_fp_setup, standard_fractal, // @@ -1072,7 +1019,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_MAGNET, HelpLabels::HF_MAGNET_J1, // FractalFlags::NONE, // -8.0F, 8.0F, -6.0F, 6.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::MAGNET_1M, // SymmetryType::X_AXIS_NO_IMAG, // magnet1_fractal, julia_fp_per_pixel, julia_fp_setup, standard_fractal, // @@ -1087,7 +1033,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_MAGNET, HelpLabels::HF_MAGNET_M2, // FractalFlags::NONE, // -1.5F, 3.7F, -1.95F, 1.95F, // - 0, // FractalType::MAGNET_2J, FractalType::NO_FRACTAL, // SymmetryType::X_AXIS_NO_PARAM, // magnet2_fractal, mandel_fp_per_pixel, mandel_fp_setup, standard_fractal, // @@ -1102,7 +1047,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_MAGNET, HelpLabels::HF_MAGNET_J2, // FractalFlags::NONE, // -8.0F, 8.0F, -6.0F, 6.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::MAGNET_2M, // SymmetryType::X_AXIS_NO_IMAG, // magnet2_fractal, julia_fp_per_pixel, julia_fp_setup, standard_fractal, // @@ -1117,7 +1061,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_BIFURCATION, HelpLabels::HF_BIF_LAMBDA, // FractalFlags::TRIG1 | FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::NO_ROTATE, // -2.0F, 4.0F, -1.0F, 2.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // bifurc_lambda_trig, nullptr, standalone_setup, bifurcation, // @@ -1132,7 +1075,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_BIFURCATION, HelpLabels::HF_BIF_PLUS_SIN_PI, // FractalFlags::TRIG1 | FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::NO_ROTATE, // 0.275F, 1.45F, 0.0F, 2.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // bifurc_add_trig_pi, nullptr, standalone_setup, bifurcation, // @@ -1147,7 +1089,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_BIFURCATION, HelpLabels::HF_BIF_EQ_SIN_PI, // FractalFlags::TRIG1 | FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::NO_ROTATE, // -2.5F, 2.5F, -3.5F, 3.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // bifurc_set_trig_pi, nullptr, standalone_setup, bifurcation, // @@ -1162,7 +1103,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_POPCORN, HelpLabels::HF_POPCORN_JULIA, // FractalFlags::TRIG4, // -3.0F, 3.0F, -2.25F, 2.25F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // popcorn_fractal_fn, other_julia_fp_per_pixel, julia_fp_setup, standard_fractal, // @@ -1177,7 +1117,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_L_SYSTEM, HelpLabels::SPECIAL_L_SYSTEM, // FractalFlags::NO_ZOOM | FractalFlags::NO_RESUME | FractalFlags::NO_GUESS | FractalFlags::NO_TRACE, // -1.0F, 1.0F, -1.0F, 1.0F, // - 1, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // nullptr, nullptr, standalone_setup, lsystem, // @@ -1192,7 +1131,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_TAYLOR_SKINNER_VARIATIONS, HelpLabels::HF_MAN_O_WAR_JULIA, // FractalFlags::OK_JB | FractalFlags::BAIL_TEST, // -2.5F, 1.5F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::MAN_O_WAR_FP, // SymmetryType::NONE, // man_o_war_fp_fractal, julia_fp_per_pixel, julia_fp_setup, standard_fractal, // @@ -1207,7 +1145,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_TAYLOR_SKINNER_VARIATIONS, HelpLabels::HF_FN_PLUS_FN_PIX, // FractalFlags::TRIG2 | FractalFlags::BAIL_TEST, // -3.6F, 3.6F, -2.7F, 2.7F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // richard_8_fp_fractal, other_richard_8_fp_per_pixel, mandel_fp_setup, // @@ -1223,7 +1160,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_PETERSON_VARIATIONS, HelpLabels::HF_MARKS_MANDEL_POWER, // FractalFlags::TRIG1 | FractalFlags::BAIL_TEST, // -2.5F, 1.5F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::X_AXIS_NO_PARAM, // marks_mandel_pwr_fp_fractal, marks_mandel_pwr_fp_per_pixel, mandel_fp_setup, // @@ -1239,7 +1175,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_PETERSON_VARIATIONS, HelpLabels::HF_TIMS_ERROR, // FractalFlags::TRIG1 | FractalFlags::BAIL_TEST, // -2.9F, 4.3F, -2.7F, 2.7F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::X_AXIS_NO_PARAM, // tims_error_fp_fractal, marks_mandel_pwr_fp_per_pixel, mandel_fp_setup, // @@ -1255,7 +1190,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_BIFURCATION, HelpLabels::HF_BIF_STEWART, // FractalFlags::TRIG1 | FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::NO_ROTATE, // 0.7F, 2.0F, -1.1F, 1.1F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // bifurc_stewart_trig, nullptr, standalone_setup, bifurcation, // @@ -1270,7 +1204,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_MARTIN, HelpLabels::HF_HOPALONG, // FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::INF_CALC, // -2.0F, 3.0F, -1.625F, 2.625F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // (VF) hopalong2d_float_orbit, nullptr, orbit3d_float_setup, orbit2d_float, // @@ -1285,7 +1218,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_CIRCLE, HelpLabels::HF_CIRCLE, // FractalFlags::NONE, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::XY_AXIS, // circle_fp_fractal, julia_fp_per_pixel, julia_fp_setup, standard_fractal, // @@ -1300,7 +1232,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_MARTIN, HelpLabels::HF_MARTIN, // FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::INF_CALC, // -32.0F, 32.0F, -24.0F, 24.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // (VF) martin2d_float_orbit, nullptr, orbit3d_float_setup, orbit2d_float, // @@ -1315,7 +1246,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_LYAPUNOV, HelpLabels::HT_LYAPUNOV, // FractalFlags::NONE, // -8.0F, 8.0F, -6.0F, 6.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // lyapunov_orbit, nullptr, lya_setup, lyapunov, // @@ -1331,7 +1261,6 @@ FractalSpecific g_fractal_specific[] = FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::NO_RESUME | FractalFlags::PARAMS_3D | FractalFlags::INF_CALC, // -30.0F, 30.0F, -30.0F, 30.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // (VF) lorenz3d1_float_orbit, nullptr, orbit3d_float_setup, orbit3d_float, // @@ -1347,7 +1276,6 @@ FractalSpecific g_fractal_specific[] = FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::NO_RESUME | FractalFlags::PARAMS_3D | FractalFlags::INF_CALC, // -30.0F, 30.0F, -30.0F, 30.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // (VF) lorenz3d3_float_orbit, nullptr, orbit3d_float_setup, orbit3d_float, // @@ -1363,7 +1291,6 @@ FractalSpecific g_fractal_specific[] = FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::NO_RESUME | FractalFlags::PARAMS_3D | FractalFlags::INF_CALC, // -30.0F, 30.0F, -30.0F, 30.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // (VF) lorenz3d4_float_orbit, nullptr, orbit3d_float_setup, orbit3d_float, // @@ -1378,7 +1305,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_FN_OR_FN, HelpLabels::HF_LAMBDA_FN_FN, // FractalFlags::TRIG2 | FractalFlags::BAIL_TEST, // -4.0F, 4.0F, -3.0F, 3.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::MAN_LAM_FN_FN_FP, // SymmetryType::ORIGIN, // lambda_trig_or_trig_fp_fractal, other_julia_fp_per_pixel, // @@ -1394,7 +1320,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_FN_OR_FN, HelpLabels::HF_JULIA_FN_FN, // FractalFlags::TRIG2 | FractalFlags::BAIL_TEST, // -4.0F, 4.0F, -3.0F, 3.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::MAN_FN_FN_FP, // SymmetryType::X_AXIS, // julia_trig_or_trig_fp_fractal, other_julia_fp_per_pixel, // @@ -1410,7 +1335,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_FN_OR_FN, HelpLabels::HF_MANDEL_LAMBDA_FN_FN, // FractalFlags::TRIG2 | FractalFlags::BAIL_TEST, // -4.0F, 4.0F, -3.0F, 3.0F, // - 0, // FractalType::LAMBDA_FN_FN_FP, FractalType::NO_FRACTAL, // SymmetryType::X_AXIS_NO_PARAM, // lambda_trig_or_trig_fp_fractal, other_mandel_fp_per_pixel, // @@ -1426,7 +1350,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_FN_OR_FN, HelpLabels::HF_MANDEL_FN_FN, // FractalFlags::TRIG2 | FractalFlags::BAIL_TEST, // -4.0F, 4.0F, -3.0F, 3.0F, // - 0, // FractalType::JUL_FN_FN_FP, FractalType::NO_FRACTAL, // SymmetryType::X_AXIS_NO_PARAM, // julia_trig_or_trig_fp_fractal, other_mandel_fp_per_pixel, // @@ -1442,7 +1365,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_BIFURCATION, HelpLabels::HF_BIF_MAY, // FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::NO_ROTATE, // -3.5F, -0.9F, -0.5F, 3.2F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // bifurc_may, nullptr, bifurc_may_setup, bifurcation, // @@ -1457,7 +1379,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_HALLEY, HelpLabels::HF_HALLEY, // FractalFlags::NONE, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::XY_AXIS, // halley_fractal, halley_per_pixel, halley_setup, standard_fractal, // @@ -1472,7 +1393,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_DYNAMIC_SYSTEM, HelpLabels::HF_DYNAMIC, // FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::TRIG1, // -20.0F, 20.0F, -20.0F, 20.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // (VF) dynam_float, nullptr, dynam2d_float_setup, dynam2d_float, // @@ -1487,7 +1407,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_QUATERNION, HelpLabels::HF_QUATERNION, // FractalFlags::OK_JB, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::QUAT_JUL_FP, FractalType::NO_FRACTAL, // SymmetryType::X_AXIS, // quaternion_fp_fractal, quaternion_fp_per_pixel, mandel_fp_setup, // @@ -1503,7 +1422,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_QUATERNION, HelpLabels::HF_QUATERNION_JULIA, // FractalFlags::OK_JB | FractalFlags::MORE, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::QUAT_FP, // SymmetryType::ORIGIN, // quaternion_fp_fractal, quaternion_jul_fp_per_pixel, julia_fp_setup, // @@ -1519,7 +1437,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_CELLULAR, HelpLabels::HF_CELLULAR, // FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::NO_ZOOM, // -1.0F, 1.0F, -1.0F, 1.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // nullptr, nullptr, cellular_setup, cellular, // @@ -1535,7 +1452,6 @@ FractalSpecific g_fractal_specific[] = FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::NO_ROTATE | FractalFlags::NO_RESUME, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // julia_fp_fractal, jb_fp_per_pixel, julibrot_setup, std_4d_fp_fractal, // @@ -1551,7 +1467,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_INVERSE_JULIA, HelpLabels::HF_INVERSE_JULIA, // FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::INF_CALC | FractalFlags::NO_RESUME, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::MANDEL, // SymmetryType::NONE, // m_inverse_julia_orbit, nullptr, orbit3d_float_setup, inverse_julia_per_image, // @@ -1567,7 +1482,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_INVERSE_JULIA, HelpLabels::HF_INVERSE_JULIA, // FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::INF_CALC | FractalFlags::NO_RESUME, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::MANDEL_FP, // SymmetryType::NONE, // m_inverse_julia_orbit, nullptr, orbit3d_float_setup, inverse_julia_per_image, // @@ -1584,7 +1498,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_MANDEL_CLOUD, HelpLabels::HF_MANDEL_CLOUD, // FractalFlags::NO_GUESS | FractalFlags::NO_TRACE, // -2.5F, 1.5F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // (VF) mandel_cloud_float, nullptr, dynam2d_float_setup, dynam2d_float, // @@ -1599,7 +1512,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_PHOENIX, HelpLabels::HF_PHOENIX, // FractalFlags::BAIL_TEST, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::MAND_PHOENIX_FP, // SymmetryType::X_AXIS, // phoenix_fractal, phoenix_per_pixel, phoenix_setup, standard_fractal, // @@ -1614,7 +1526,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_PHOENIX, HelpLabels::HF_MANDEL_PHOENIX, // FractalFlags::BAIL_TEST, // -2.5F, 1.5F, -1.5F, 1.5F, // - 0, // FractalType::PHOENIX_FP, FractalType::NO_FRACTAL, // SymmetryType::NONE, // phoenix_fractal, mand_phoenix_per_pixel, mand_phoenix_setup, // @@ -1630,7 +1541,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_HYPER_COMPLEX, HelpLabels::HF_HYPER_COMPLEX, // FractalFlags::OK_JB | FractalFlags::TRIG1, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::HYPER_CMPLX_J_FP, FractalType::NO_FRACTAL, // SymmetryType::X_AXIS, // hyper_complex_fp_fractal, quaternion_fp_per_pixel, mandel_fp_setup, // @@ -1646,7 +1556,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_HYPER_COMPLEX, HelpLabels::HF_HYPER_COMPLEX_JULIA, // FractalFlags::OK_JB | FractalFlags::TRIG1 | FractalFlags::MORE, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::HYPER_CMPLX_FP, // SymmetryType::ORIGIN, // hyper_complex_fp_fractal, quaternion_jul_fp_per_pixel, julia_fp_setup, // @@ -1662,7 +1571,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_FROTH, HelpLabels::HF_FROTH, // FractalFlags::NO_TRACE, // -2.8F, 2.8F, -2.355F, 1.845F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // froth_per_orbit, froth_per_pixel, froth_setup, calc_froth, // @@ -1677,7 +1585,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_MANDEL_JULIA4, HelpLabels::HF_MANDEL4, // FractalFlags::BAIL_TEST, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::JULIA4_FP, FractalType::NO_FRACTAL, // SymmetryType::X_AXIS_NO_PARAM, // mandel4_fp_fractal, mandel_fp_per_pixel, mandel_fp_setup, standard_fractal, // @@ -1692,7 +1599,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_MANDEL_JULIA4, HelpLabels::HF_JULIA4, // FractalFlags::OK_JB | FractalFlags::BAIL_TEST, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::MANDEL4_FP, // SymmetryType::ORIGIN, // mandel4_fp_fractal, julia_fp_per_pixel, julia_fp_setup, standard_fractal, // @@ -1707,7 +1613,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_PETERSON_VARIATIONS, HelpLabels::HF_MARKS_MANDEL, // FractalFlags::BAIL_TEST, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::MARKS_JULIA_FP, FractalType::NO_FRACTAL, // SymmetryType::NONE, // marks_lambda_fp_fractal, marks_mandel_fp_per_pixel, mandel_fp_setup, // @@ -1723,7 +1628,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_PETERSON_VARIATIONS, HelpLabels::HF_MARKS_JULIA, // FractalFlags::BAIL_TEST, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::MARKS_MANDEL_FP, // SymmetryType::ORIGIN, // marks_lambda_fp_fractal, julia_fp_per_pixel, marks_julia_fp_setup, // @@ -1739,7 +1643,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_ICON, HelpLabels::HF_ICON, // FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::INF_CALC | FractalFlags::MORE, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // (VF) icon_float_orbit, nullptr, orbit3d_float_setup, orbit2d_float, // @@ -1755,7 +1658,6 @@ FractalSpecific g_fractal_specific[] = FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::INF_CALC | FractalFlags::PARAMS_3D | FractalFlags::MORE, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // (VF) icon_float_orbit, nullptr, orbit3d_float_setup, orbit3d_float, // @@ -1770,7 +1672,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_PHOENIX, HelpLabels::HF_PHOENIX_CPLX, // FractalFlags::MORE | FractalFlags::BAIL_TEST, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::MAND_PHOENIX_FP_CPLX, // SymmetryType::ORIGIN, // phoenix_fractal_cplx, phoenix_per_pixel, phoenix_cplx_setup, // @@ -1786,7 +1687,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_PHOENIX, HelpLabels::HF_MANDEL_PHOENIX_CPLX, // FractalFlags::MORE | FractalFlags::BAIL_TEST, // -2.5F, 1.5F, -1.5F, 1.5F, // - 0, // FractalType::PHOENIX_FP_CPLX, FractalType::NO_FRACTAL, // SymmetryType::X_AXIS, // phoenix_fractal_cplx, mand_phoenix_per_pixel, mand_phoenix_cplx_setup, // @@ -1808,7 +1708,6 @@ FractalSpecific g_fractal_specific[] = FractalFlags::NO_ZOOM | FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::NO_RESUME | FractalFlags::MORE, // -1.0F, 1.0F, -1.0F, 1.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // nullptr, nullptr, standalone_setup, ant, // @@ -1823,7 +1722,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_MARTIN, HelpLabels::HF_CHIP, // FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::INF_CALC, // -760.0F, 760.0F, -570.0F, 570.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // (VF) chip2d_float_orbit, nullptr, orbit3d_float_setup, orbit2d_float, // @@ -1838,7 +1736,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_MARTIN, HelpLabels::HF_QUADRUP_TWO, // FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::INF_CALC, // -82.93367F, 112.2749F, -55.76383F, 90.64257F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // (VF) quadrup_two2d_float_orbit, nullptr, orbit3d_float_setup, orbit2d_float, // @@ -1853,7 +1750,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_MARTIN, HelpLabels::HF_THREEPLY, // FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::INF_CALC, // -8000.0F, 8000.0F, -6000.0F, 6000.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // (VF) three_ply2d_float_orbit, nullptr, orbit3d_float_setup, orbit2d_float, // @@ -1868,7 +1764,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_VOLTERRA_LOTKA, HelpLabels::HF_VOLTERRA_LOTKA, // FractalFlags::NONE, // 0.0F, 6.0F, 0.0F, 4.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // vl_fp_fractal, other_julia_fp_per_pixel, vl_setup, standard_fractal, // @@ -1883,7 +1778,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_ESCHER, HelpLabels::HF_ESCHER, // FractalFlags::NONE, // -1.6F, 1.6F, -1.2F, 1.2F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::ORIGIN, // escher_fp_fractal, julia_fp_per_pixel, standard_setup, // @@ -1902,7 +1796,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_LATOO, HelpLabels::HF_LATOO, // FractalFlags::NO_GUESS | FractalFlags::NO_TRACE | FractalFlags::INF_CALC | FractalFlags::TRIG4, // -2.0F, 2.0F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // (VF) latoo_float_orbit, nullptr, orbit3d_float_setup, orbit2d_float, // @@ -1918,7 +1811,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_DIVIDE_BROT5, HelpLabels::HF_DIVIDE_BROT5, // FractalFlags::BAIL_TEST | FractalFlags::BF_MATH, // -2.5f, 1.5f, -1.5f, 1.5f, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // divide_brot5_fp_fractal, divide_brot5_fp_per_pixel, divide_brot5_setup, standard_fractal, // @@ -1934,7 +1826,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_MANDELBROT_MIX4, HelpLabels::HF_MANDELBROT_MIX4, // FractalFlags::BAIL_TEST | FractalFlags::TRIG1 | FractalFlags::MORE, // -2.5F, 1.5F, -1.5F, 1.5F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // mandelbrot_mix4_fp_fractal, mandelbrot_mix4_fp_per_pixel, mandelbrot_mix4_setup, standard_fractal, // @@ -1949,7 +1840,6 @@ FractalSpecific g_fractal_specific[] = HelpLabels::HT_BURNING_SHIP, HelpLabels::HF_BURNING_SHIP, // FractalFlags::BAIL_TEST | FractalFlags::PERTURB | FractalFlags::BF_MATH, // -2.5F, 1.5F, -1.2F, 1.8F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // burning_ship_fp_fractal, other_mandel_fp_per_pixel, mandel_setup, standard_fractal, // @@ -1966,11 +1856,11 @@ FractalSpecific g_fractal_specific[] = HelpLabels::NONE, HelpLabels::NONE, // FractalFlags::NONE, // 0.0F, 0.0F, 0.0F, 0.0F, // - 0, // FractalType::NO_FRACTAL, FractalType::NO_FRACTAL, // SymmetryType::NONE, // nullptr, nullptr, nullptr, nullptr, // 0, // + nullptr, nullptr, nullptr // } // }; diff --git a/libid/fractals/frasetup.cpp b/libid/fractals/frasetup.cpp index fe4605a51..01c90ae59 100644 --- a/libid/fractals/frasetup.cpp +++ b/libid/fractals/frasetup.cpp @@ -389,162 +389,6 @@ julia_fp_setup() return true; } -bool -mandel_long_setup() -{ - g_fudge_half = g_fudge_factor/2; - g_c_exponent = (int)g_params[2]; - if (g_fractal_type == FractalType::MARKS_MANDEL && g_c_exponent < 1) - { - g_c_exponent = 1; - g_params[2] = 1; - } - if ((g_fractal_type == FractalType::MARKS_MANDEL && !(g_c_exponent & 1)) - || (g_fractal_type == FractalType::MANDEL_Z_POWER_L && (g_c_exponent & 1))) - { - g_symmetry = SymmetryType::XY_AXIS_NO_PARAM; // odd exponents - } - if ((g_fractal_type == FractalType::MARKS_MANDEL && (g_c_exponent & 1)) || - g_fractal_type == FractalType::LAMBDA_TRIG_FP) - { - g_symmetry = SymmetryType::X_AXIS_NO_PARAM; - } - if (g_fractal_type == FractalType::SPIDER && g_periodicity_check == 1) - { - g_periodicity_check = 4; - } - g_long_param = &g_l_init; - if (g_fractal_type == FractalType::MANDEL_Z_POWER_L) - { - if (g_params[3] == 0.0 && g_debug_flag != DebugFlags::FORCE_COMPLEX_POWER && (double)g_c_exponent == g_params[2]) - { - get_fractal_specific(g_fractal_type)->orbit_calc = long_z_power_fractal; - } - else - { - get_fractal_specific(g_fractal_type)->orbit_calc = long_cmplx_z_power_fractal; - } - if (g_params[3] != 0 || (double)g_c_exponent != g_params[2]) - { - g_symmetry = SymmetryType::NONE; - } - } - if ((g_fractal_type == FractalType::MAN_TRIG_PLUS_EXP_L) || (g_fractal_type == FractalType::MAN_TRIG_PLUS_Z_SQRD_L)) - { - if (g_param_z1.y == 0.0) - { - g_symmetry = SymmetryType::X_AXIS; - } - else - { - g_symmetry = SymmetryType::NONE; - } - if ((g_trig_index[0] == TrigFn::LOG) || (g_trig_index[0] == TrigFn::FLIP)) - { - g_symmetry = SymmetryType::NONE; - } - } - if (g_fractal_type == FractalType::TIMS_ERROR) - { - if (g_trig_index[0] == TrigFn::FLIP) - { - g_symmetry = SymmetryType::NONE; - } - } - if (g_fractal_type == FractalType::MARKS_MANDEL_PWR) - { - if (g_trig_index[0] == TrigFn::FLIP) - { - g_symmetry = SymmetryType::NONE; - } - } - return true; -} - -bool -julia_long_setup() -{ - g_c_exponent = (int)g_params[2]; - g_long_param = &g_l_param; - switch (g_fractal_type) - { - case FractalType::JULIA_Z_POWER_L: - if ((g_c_exponent & 1) || g_params[3] != 0.0 || (double)g_c_exponent != g_params[2]) - { - g_symmetry = SymmetryType::NONE; - } - if (g_params[3] == 0.0 && g_debug_flag != DebugFlags::FORCE_COMPLEX_POWER && (double)g_c_exponent == g_params[2]) - { - get_fractal_specific(g_fractal_type)->orbit_calc = long_z_power_fractal; - } - else - { - get_fractal_specific(g_fractal_type)->orbit_calc = long_cmplx_z_power_fractal; - } - break; - case FractalType::LAMBDA: - get_julia_attractor(0.0, 0.0); // another attractor? - get_julia_attractor(0.5, 0.0); // another attractor? - break; - case FractalType::MANDEL_TRIG: - if (g_l_param.y == 0) - { - g_symmetry = SymmetryType::X_AXIS; - } - break; - case FractalType::JUL_TRIG_PLUS_EXP_L: - case FractalType::JUL_TRIG_PLUS_Z_SQRD_L: - if (g_param_z1.y == 0.0) - { - g_symmetry = SymmetryType::X_AXIS; - } - else - { - g_symmetry = SymmetryType::NONE; - } - if ((g_trig_index[0] == TrigFn::LOG) || (g_trig_index[0] == TrigFn::FLIP)) - { - g_symmetry = SymmetryType::NONE; - } - get_julia_attractor(0.0, 0.0); // another attractor? - break; - case FractalType::POPCORN_L: - case FractalType::POPCORN_JUL_L: - { - bool default_functions = false; - if (g_trig_index[0] == TrigFn::SIN - && g_trig_index[1] == TrigFn::TAN - && g_trig_index[2] == TrigFn::SIN - && g_trig_index[3] == TrigFn::TAN - && std::abs(g_param_z2.x - 3.0) < .0001 - && g_param_z2.y == 0 - && g_param_z1.y == 0) - { - default_functions = true; - if (g_fractal_type == FractalType::POPCORN_JUL_L) - { - g_symmetry = SymmetryType::ORIGIN; - } - } - if (default_functions && g_debug_flag == DebugFlags::FORCE_REAL_POPCORN) - { - g_cur_fractal_specific->orbit_calc = long_popcorn_fractal; - } - else - { - g_cur_fractal_specific->orbit_calc = long_popcorn_fractal_fn; - } - get_julia_attractor(0.0, 0.0); // another attractor? - break; - } - - default: - get_julia_attractor(0.0, 0.0); // another attractor? - break; - } - return true; -} - bool standard_setup() { diff --git a/libid/fractals/jb.cpp b/libid/fractals/jb.cpp index ad2504d8f..987a19d30 100644 --- a/libid/fractals/jb.cpp +++ b/libid/fractals/jb.cpp @@ -139,61 +139,6 @@ bool julibrot_setup() s_jb_fp.left_eye.zy = s_jb_fp.right_eye.zy; s_b_base = 128; - if (get_fractal_specific(g_fractal_type)->is_integer > 0) - { - if (get_fractal_specific(g_new_orbit_type)->is_integer == 0) - { - stop_msg("Julibrot orbit type isinteger mismatch"); - } - if (get_fractal_specific(g_new_orbit_type)->is_integer > 1) - { - g_bit_shift = get_fractal_specific(g_new_orbit_type)->is_integer; - } - s_fg = (double)(1L << g_bit_shift); - s_fg16 = (double)(1L << 16); - long j_x_min = (long) (g_x_min * s_fg); - long j_x_max = (long) (g_x_max * s_fg); - s_jb.x_offset = (j_x_max + j_x_min) / 2; // Calculate average - long j_y_min = (long) (g_y_min * s_fg); - long j_y_max = (long) (g_y_max * s_fg); - s_jb.y_offset = (j_y_max + j_y_min) / 2; // Calculate average - s_mx_min = (long)(g_julibrot_x_min * s_fg); - long m_x_max = (long) (g_julibrot_x_max * s_fg); - s_my_min = (long)(g_julibrot_y_min * s_fg); - long m_y_max = (long) (g_julibrot_y_max * s_fg); - long origin = (long)(g_julibrot_origin_fp * s_fg16); - s_depth = (long)(g_julibrot_depth_fp * s_fg16); - s_width = (long)(g_julibrot_width_fp * s_fg16); - s_dist = (long)(g_julibrot_dist_fp * s_fg16); - s_eyes = (long)(g_eyes_fp * s_fg16); - s_br_ratio = (long)(s_br_ratio_fp * s_fg16); - s_jb.delta_mx = (m_x_max - s_mx_min) / g_julibrot_z_dots; - s_jb.delta_my = (m_y_max - s_my_min) / g_julibrot_z_dots; - g_long_param = &s_jb.jb_c; - - s_jb.x_per_inch = (long)((g_x_min - g_x_max) / g_julibrot_width_fp * s_fg); - s_jb.y_per_inch = (long)((g_y_max - g_y_min) / g_julibrot_height_fp * s_fg); - s_jb.inch_per_x_dot = (long)((g_julibrot_width_fp / g_logical_screen_x_dots) * s_fg16); - s_jb.inch_per_y_dot = (long)((g_julibrot_height_fp / g_logical_screen_y_dots) * s_fg16); - s_jb.init_z = origin - (s_depth / 2); - if (g_julibrot_3d_mode == Julibrot3DMode::MONOCULAR) - { - s_jb.right_eye.x = 0L; - } - else - { - s_jb.right_eye.x = s_eyes / 2; - } - s_jb.left_eye.x = -s_jb.right_eye.x; - s_jb.right_eye.y = 0L; - s_jb.left_eye.y = s_jb.right_eye.y; - s_jb.right_eye.zx = s_dist; - s_jb.left_eye.zx = s_jb.right_eye.zx; - s_jb.right_eye.zy = s_dist; - s_jb.left_eye.zy = s_jb.right_eye.zy; - s_b_base = (int)(128.0 * s_br_ratio_fp); - } - if (g_julibrot_3d_mode == Julibrot3DMode::RED_BLUE) { g_save_dac = 0; diff --git a/libid/fractals/lambda_fn.cpp b/libid/fractals/lambda_fn.cpp index a0136ae4d..d6e9d65ba 100644 --- a/libid/fractals/lambda_fn.cpp +++ b/libid/fractals/lambda_fn.cpp @@ -170,54 +170,25 @@ static int lambda_exponent_fractal() bool lambda_trig_setup() { - bool const is_integer = g_cur_fractal_specific->is_integer != 0; - if (is_integer) - { - g_cur_fractal_specific->orbit_calc = lambda_trig_fractal; - } - else - { - g_cur_fractal_specific->orbit_calc = lambda_trig_fp_fractal; - } + g_cur_fractal_specific->orbit_calc = lambda_trig_fp_fractal; switch (g_trig_index[0]) { case TrigFn::SIN: case TrigFn::COSXX: case TrigFn::COS: g_symmetry = SymmetryType::PI_SYM; - if (is_integer) - { - g_cur_fractal_specific->orbit_calc = lambda_trig_fractal1; - } - else - { - g_cur_fractal_specific->orbit_calc = lambda_trig_fp_fractal1; - } + g_cur_fractal_specific->orbit_calc = lambda_trig_fp_fractal1; break; case TrigFn::SINH: case TrigFn::COSH: g_symmetry = SymmetryType::ORIGIN; - if (is_integer) - { - g_cur_fractal_specific->orbit_calc = lambda_trig_fractal2; - } - else - { - g_cur_fractal_specific->orbit_calc = lambda_trig_fp_fractal2; - } + g_cur_fractal_specific->orbit_calc = lambda_trig_fp_fractal2; break; case TrigFn::SQR: g_symmetry = SymmetryType::ORIGIN; break; case TrigFn::EXP: - if (is_integer) - { - g_cur_fractal_specific->orbit_calc = long_lambda_exponent_fractal; - } - else - { - g_cur_fractal_specific->orbit_calc = lambda_exponent_fractal; - } + g_cur_fractal_specific->orbit_calc = lambda_exponent_fractal; g_symmetry = SymmetryType::NONE; break; case TrigFn::LOG: @@ -228,55 +199,26 @@ bool lambda_trig_setup() break; } get_julia_attractor(0.0, 0.0); // an attractor? - return is_integer ? julia_long_setup() : julia_fp_setup(); + return julia_fp_setup(); } bool mandel_trig_setup() { - bool const is_integer = g_cur_fractal_specific->is_integer != 0; - if (is_integer) - { - g_cur_fractal_specific->orbit_calc = lambda_trig_fractal; - } - else - { - g_cur_fractal_specific->orbit_calc = lambda_trig_fp_fractal; - } + g_cur_fractal_specific->orbit_calc = lambda_trig_fp_fractal; g_symmetry = SymmetryType::XY_AXIS_NO_PARAM; switch (g_trig_index[0]) { case TrigFn::SIN: case TrigFn::COSXX: - if (is_integer) - { - g_cur_fractal_specific->orbit_calc = lambda_trig_fractal1; - } - else - { - g_cur_fractal_specific->orbit_calc = lambda_trig_fp_fractal1; - } + g_cur_fractal_specific->orbit_calc = lambda_trig_fp_fractal1; break; case TrigFn::SINH: case TrigFn::COSH: - if (is_integer) - { - g_cur_fractal_specific->orbit_calc = lambda_trig_fractal2; - } - else - { - g_cur_fractal_specific->orbit_calc = lambda_trig_fp_fractal2; - } + g_cur_fractal_specific->orbit_calc = lambda_trig_fp_fractal2; break; case TrigFn::EXP: g_symmetry = SymmetryType::X_AXIS_NO_PARAM; - if (is_integer) - { - g_cur_fractal_specific->orbit_calc = long_lambda_exponent_fractal; - } - else - { - g_cur_fractal_specific->orbit_calc = lambda_exponent_fractal; - } + g_cur_fractal_specific->orbit_calc = lambda_exponent_fractal; break; case TrigFn::LOG: g_symmetry = SymmetryType::X_AXIS_NO_PARAM; @@ -285,5 +227,5 @@ bool mandel_trig_setup() g_symmetry = SymmetryType::XY_AXIS_NO_PARAM; break; } - return is_integer ? mandel_long_setup() : mandel_fp_setup(); + return mandel_fp_setup(); } diff --git a/libid/fractals/lorenz.cpp b/libid/fractals/lorenz.cpp index 6be363011..c0c4dfea2 100644 --- a/libid/fractals/lorenz.cpp +++ b/libid/fractals/lorenz.cpp @@ -90,27 +90,7 @@ struct LAffine }; // data used by 3d view transform subroutine -struct ViewTransform3DLong -{ - long orbit[3]; // iterated function orbit value - long iview[3]; // perspective viewer's coordinates - long view_vect[3]; // orbit transformed for viewing - long view_vect1[3]; // orbit transformed for viewing - long max_vals[3]; // - long min_vals[3]; // - Matrix double_mat; // transformation matrix - Matrix double_mat1; // transformation matrix - long long_mat[4][4]; // long version of matrix - long long_mat1[4][4]; // long version of matrix - int row; // - int col; // results - int row1; // - int col1; // - LAffine cvt; // -}; - -// data used by 3d view transform subroutine -struct ViewTransform3DFloat +struct ViewTransform3D { double orbit[3]; // iterated function orbit value double view_vect[3]; // orbit transformed for viewing @@ -130,32 +110,17 @@ struct ViewTransform3DFloat static int ifs2d(); static int ifs3d(); -static int ifs3d_long(); static int ifs3d_float(); static bool l_setup_convert_to_screen(LAffine *l_cvt); static void setup_matrix(Matrix double_mat); -static bool long_view_transf3d(ViewTransform3DLong *inf); -static bool float_view_transf3d(ViewTransform3DFloat *inf); +static bool float_view_transf3d(ViewTransform3D *inf); static std::FILE *open_orbit_save(); static void plot_hist(int x, int y, int color); static bool s_real_time{}; static int s_t{}; -static long s_l_dx{}; -static long s_l_dy{}; -static long s_l_dz{}; -static long s_l_dt{}; -static long s_l_a{}; -static long s_l_b{}; -static long s_l_c{}; static long s_l_d{}; -static long s_l_adt{}; -static long s_l_bdt{}; -static long s_l_cdt{}; -static long s_l_xdt{}; -static long s_l_ydt{}; -static long s_init_orbit_long[3]{}; static double s_dx{}; static double s_dy{}; @@ -177,12 +142,9 @@ static double s_init_orbit_fp[3]{}; static int s_max_hits{}; static int s_run_length{}; static Affine s_cvt{}; -static LAffine s_l_cvt{}; static double s_cx{}; static double s_cy{}; -static long s_cx_l{}; -static long s_cy_l{}; /* * end of Inverse Julia declarations; @@ -341,9 +303,6 @@ static bool l_setup_convert_to_screen(LAffine *l_cvt) //**************************************************************** static double s_orbit{}; -static long s_orbit_l{}; -static long s_sin_x_l{}; -static long s_cos_x_l{}; static double &s_cos_b{s_dx}; static double &s_sin_sum_a_b_c{s_dy}; @@ -1167,129 +1126,6 @@ int orbit2d_float() return ret; } -static int orbit3d_long_calc() -{ - int color = 2; - if (color >= g_colors) - { - color = 1; - } - - ViewTransform3DLong inf; - l_setup_convert_to_screen(&inf.cvt); // setup affine screen coord conversion - inf.orbit[0] = s_init_orbit_long[0]; - inf.orbit[1] = s_init_orbit_long[1]; - inf.orbit[2] = s_init_orbit_long[2]; - - if (driver_is_disk()) // this would KILL a disk drive! - { - not_disk_msg(); - } - - if (g_max_iterations > 0x1fffffL || g_max_count) - { - g_max_count = 0x7fffffffL; - } - else - { - g_max_count = g_max_iterations*1024L; - } - g_color_iter = 0L; - - std::FILE *fp = open_orbit_save(); - int ret = 0; - unsigned long count = 0; - int old_row = -1; - int old_col = -1; - int old_row1 = -1; - int old_col1 = -1; - while (g_color_iter++ <= g_max_count) // loop until keypress or maxit - { - // calc goes here - if (++count > 1000) - { - // time to switch colors? - count = 0; - if (++color >= g_colors) // another color to switch to? - { - color = 1; // (don't use the background color) - } - } - if (driver_key_pressed()) - { - driver_mute(); - ret = -1; - break; - } - - orbit(&inf.orbit[0], &inf.orbit[1], &inf.orbit[2]); - if (fp) - { - std::fprintf(fp, "%g %g %g 15\n", (double)inf.orbit[0]/g_fudge_factor, (double)inf.orbit[1]/g_fudge_factor, (double)inf.orbit[2]/g_fudge_factor); - } - if (long_view_transf3d(&inf)) - { - // plot if inside window - if (inf.col >= 0) - { - if (s_real_time) - { - g_which_image = StereoImage::RED; - } - if ((g_sound_flag & SOUNDFLAG_ORBIT_MASK) > SOUNDFLAG_BEEP) - { - double yy = inf.view_vect[((g_sound_flag & SOUNDFLAG_ORBIT_MASK) - SOUNDFLAG_X)]; - yy = yy/g_fudge_factor; - write_sound((int)(yy*100+g_base_hertz)); - } - if (old_col != -1 && s_connect) - { - driver_draw_line(inf.col, inf.row, old_col, old_row, color%g_colors); - } - else - { - (*g_plot)(inf.col, inf.row, color%g_colors); - } - } - else if (inf.col == -2) - { - return ret; - } - old_col = inf.col; - old_row = inf.row; - if (s_real_time) - { - g_which_image = StereoImage::BLUE; - // plot if inside window - if (inf.col1 >= 0) - { - if (old_col1 != -1 && s_connect) - { - driver_draw_line(inf.col1, inf.row1, old_col1, old_row1, color%g_colors); - } - else - { - (*g_plot)(inf.col1, inf.row1, color%g_colors); - } - } - else if (inf.col1 == -2) - { - return ret; - } - old_col1 = inf.col1; - old_row1 = inf.row1; - } - } - } - - if (fp) - { - std::fclose(fp); - } - - return ret; -} - static int orbit3d_float_calc() { int color = 2; @@ -1298,7 +1134,7 @@ static int orbit3d_float_calc() color = 1; } - ViewTransform3DFloat inf; + ViewTransform3D inf; setup_convert_to_screen(&inf.cvt); // setup affine screen coord conversion inf.orbit[0] = s_init_orbit_fp[0]; inf.orbit[1] = s_init_orbit_fp[1]; @@ -1844,7 +1680,7 @@ static int ifs3d_float() int k; - ViewTransform3DFloat inf; + ViewTransform3D inf; // setup affine screen coord conversion setup_convert_to_screen(&inf.cvt); @@ -1988,16 +1824,11 @@ static int ifs2d() std::srand(1); int color_method = (int) g_params[0]; - bool resized = false; try { local_ifs.resize(g_num_affine_transforms*NUM_IFS_PARAMS); - resized = true; } catch (const std::bad_alloc &) - { - } - if (!resized) { stop_msg("Insufficient memory for IFS"); return -1; @@ -2088,152 +1919,6 @@ static int ifs2d() return ret; } -static int ifs3d_long() -{ - int color; - std::vector local_ifs; - ViewTransform3DLong inf; - - std::srand(1); - int color_method = (int) g_params[0]; - try - { - local_ifs.resize(g_num_affine_transforms*NUM_IFS_3D_PARAMS); - } - catch (const std::bad_alloc &) - { - stop_msg("Insufficient memory for IFS"); - return -1; - } - - // setup affine screen coord conversion - l_setup_convert_to_screen(&inf.cvt); - - for (int i = 0; i < g_num_affine_transforms; i++) // fill in the local IFS array - { - for (int j = 0; j < NUM_IFS_3D_PARAMS; j++) - { - local_ifs[i*NUM_IFS_3D_PARAMS+j] = (long)(g_ifs_definition[i*NUM_IFS_3D_PARAMS+j] * g_fudge_factor); - } - } - - long temp_r = g_fudge_factor / 32767; // find the proper rand() fudge - - inf.orbit[0] = 0; - inf.orbit[1] = 0; - inf.orbit[2] = 0; - - std::FILE *fp = open_orbit_save(); - - int ret = 0; - if (g_max_iterations > 0x1fffffL) - { - g_max_count = 0x7fffffffL; - } - else - { - g_max_count = g_max_iterations*1024L; - } - g_color_iter = 0L; - while (g_color_iter++ <= g_max_count) // loop until keypress or maxit - { - if (driver_key_pressed()) // keypress bails out - { - ret = -1; - break; - } - long r = RAND15(); // generate fudged random number between 0 and 1 - r *= temp_r; - - // pick which iterated function to execute, weighted by probability - long sum = local_ifs[12]; // [0][12] - int k = 0; - while (sum < r && ++k < g_num_affine_transforms*NUM_IFS_3D_PARAMS) - { - sum += local_ifs[k*NUM_IFS_3D_PARAMS+12]; - if (g_ifs_definition[(k+1)*NUM_IFS_3D_PARAMS+12] == 0) - { - break; // for safety - } - } - - // calculate image of last point under selected iterated function - long *l_f_ptr = local_ifs.data() + k * NUM_IFS_3D_PARAMS; // point to first parm in row - - // calculate image of last point under selected iterated function - long new_x = multiply(l_f_ptr[0], inf.orbit[0], g_bit_shift) + - multiply(l_f_ptr[1], inf.orbit[1], g_bit_shift) + multiply(l_f_ptr[2], inf.orbit[2], g_bit_shift) + - l_f_ptr[9]; - long new_y = multiply(l_f_ptr[3], inf.orbit[0], g_bit_shift) + - multiply(l_f_ptr[4], inf.orbit[1], g_bit_shift) + multiply(l_f_ptr[5], inf.orbit[2], g_bit_shift) + - l_f_ptr[10]; - long new_z = multiply(l_f_ptr[6], inf.orbit[0], g_bit_shift) + - multiply(l_f_ptr[7], inf.orbit[1], g_bit_shift) + multiply(l_f_ptr[8], inf.orbit[2], g_bit_shift) + - l_f_ptr[11]; - - inf.orbit[0] = new_x; - inf.orbit[1] = new_y; - inf.orbit[2] = new_z; - if (fp) - { - std::fprintf(fp, "%g %g %g 15\n", (double)new_x/g_fudge_factor, (double)new_y/g_fudge_factor, (double)new_z/g_fudge_factor); - } - - if (long_view_transf3d(&inf)) - { - if ((long)std::abs(inf.row) + (long)std::abs(inf.col) > BAD_PIXEL) // sanity check - { - return ret; - } - // plot if inside window - if (inf.col >= 0) - { - if (s_real_time) - { - g_which_image = StereoImage::RED; - } - if (color_method) - { - color = (k%g_colors)+1; - } - else - { - color = get_color(inf.col, inf.row)+1; - } - if (color < g_colors) // color sticks on last value - { - (*g_plot)(inf.col, inf.row, color); - } - } - if (s_real_time) - { - g_which_image = StereoImage::BLUE; - // plot if inside window - if (inf.col1 >= 0) - { - if (color_method) - { - color = (k%g_colors)+1; - } - else - { - color = get_color(inf.col1, inf.row1)+1; - } - if (color < g_colors) // color sticks on last value - { - (*g_plot)(inf.col1, inf.row1, color); - } - } - } - } - } - if (fp) - { - std::fclose(fp); - } - return ret; -} - static void setup_matrix(Matrix double_mat) { // build transformation matrix @@ -2260,200 +1945,10 @@ static int ifs3d() g_display_3d = Display3DMode::MINUS_ONE; s_real_time = 0 < g_glasses_type && g_glasses_type < 3; - return funny_glasses_call(g_float_flag ? ifs3d_float : ifs3d_long); // double version of ifs3d -} - -static bool long_view_transf3d(ViewTransform3DLong *inf) -{ - if (g_color_iter == 1) // initialize on first call - { - for (int i = 0; i < 3; i++) - { - inf->min_vals[i] = 1L << 30; - inf->max_vals[i] = -inf->min_vals[i]; - } - setup_matrix(inf->double_mat); - if (s_real_time) - { - setup_matrix(inf->double_mat1); - } - // copy xform matrix to long for fixed point math - for (int i = 0; i < 4; i++) - { - for (int j = 0; j < 4; j++) - { - inf->long_mat[i][j] = (long)(inf->double_mat[i][j] * g_fudge_factor); - if (s_real_time) - { - inf->long_mat1[i][j] = (long)(inf->double_mat1[i][j] * g_fudge_factor); - } - } - } - } - - // 3D VIEWING TRANSFORM - long_vec_mat_mul(inf->orbit, inf->long_mat, inf->view_vect, g_bit_shift); - if (s_real_time) - { - long_vec_mat_mul(inf->orbit, inf->long_mat1, inf->view_vect1, g_bit_shift); - } - - if (g_color_iter <= s_waste) // waste this many points to find minz and maxz - { - // find minz and maxz - for (int i = 0; i < 3; i++) - { - long const tmp = inf->view_vect[i]; - if (tmp < inf->min_vals[i]) - { - inf->min_vals[i] = tmp; - } - else if (tmp > inf->max_vals[i]) - { - inf->max_vals[i] = tmp; - } - } - - if (g_color_iter == s_waste) // time to work it out - { - inf->iview[0] = 0L; // center viewer on origin - inf->iview[1] = 0L; - - /* z value of user's eye - should be more negative than extreme - negative part of image */ - inf->iview[2] = (long)((inf->min_vals[2]-inf->max_vals[2])*(double)g_viewer_z/100.0); - - // center image on origin - double tmp_x = (-inf->min_vals[0]-inf->max_vals[0])/(2.0*g_fudge_factor); // center x - double tmp_y = (-inf->min_vals[1]-inf->max_vals[1])/(2.0*g_fudge_factor); // center y - - // apply perspective shift - tmp_x += ((double)g_x_shift*(g_x_max-g_x_min))/(g_logical_screen_x_dots); - tmp_y += ((double)g_y_shift*(g_y_max-g_y_min))/(g_logical_screen_y_dots); - double tmp_z = -((double)inf->max_vals[2]) / g_fudge_factor; - trans(tmp_x, tmp_y, tmp_z, inf->double_mat); - - if (s_real_time) - { - // center image on origin - tmp_x = (-inf->min_vals[0]-inf->max_vals[0])/(2.0*g_fudge_factor); // center x - tmp_y = (-inf->min_vals[1]-inf->max_vals[1])/(2.0*g_fudge_factor); // center y - - tmp_x += ((double)g_x_shift1*(g_x_max-g_x_min))/(g_logical_screen_x_dots); - tmp_y += ((double)g_y_shift1*(g_y_max-g_y_min))/(g_logical_screen_y_dots); - tmp_z = -((double)inf->max_vals[2]) / g_fudge_factor; - trans(tmp_x, tmp_y, tmp_z, inf->double_mat1); - } - for (int i = 0; i < 3; i++) - { - g_view[i] = (double)inf->iview[i] / g_fudge_factor; - } - - // copy xform matrix to long for fixed point math - for (int i = 0; i < 4; i++) - { - for (int j = 0; j < 4; j++) - { - inf->long_mat[i][j] = (long)(inf->double_mat[i][j] * g_fudge_factor); - if (s_real_time) - { - inf->long_mat1[i][j] = (long)(inf->double_mat1[i][j] * g_fudge_factor); - } - } - } - } - return false; - } - - // apply perspective if requested - if (g_viewer_z) - { - if (g_debug_flag == DebugFlags::FORCE_FLOAT_PERSPECTIVE || g_viewer_z < 100) // use float for small persp - { - // use float perspective calc - Vector tmp_v; - for (int i = 0; i < 3; i++) - { - tmp_v[i] = (double)inf->view_vect[i] / g_fudge_factor; - } - perspective(tmp_v); - for (int i = 0; i < 3; i++) - { - inf->view_vect[i] = (long)(tmp_v[i]*g_fudge_factor); - } - if (s_real_time) - { - for (int i = 0; i < 3; i++) - { - tmp_v[i] = (double)inf->view_vect1[i] / g_fudge_factor; - } - perspective(tmp_v); - for (int i = 0; i < 3; i++) - { - inf->view_vect1[i] = (long)(tmp_v[i]*g_fudge_factor); - } - } - } - else - { - long_persp(inf->view_vect, inf->iview, g_bit_shift); - if (s_real_time) - { - long_persp(inf->view_vect1, inf->iview, g_bit_shift); - } - } - } - - // work out the screen positions - inf->row = (int)(((multiply(inf->cvt.c, inf->view_vect[0], g_bit_shift) + - multiply(inf->cvt.d, inf->view_vect[1], g_bit_shift) + inf->cvt.f) - >> g_bit_shift) - + g_yy_adjust); - inf->col = (int)(((multiply(inf->cvt.a, inf->view_vect[0], g_bit_shift) + - multiply(inf->cvt.b, inf->view_vect[1], g_bit_shift) + inf->cvt.e) - >> g_bit_shift) - + g_xx_adjust); - if (inf->col < 0 || inf->col >= g_logical_screen_x_dots || inf->row < 0 || inf->row >= g_logical_screen_y_dots) - { - if ((long)std::abs(inf->col)+(long)std::abs(inf->row) > BAD_PIXEL) - { - inf->row = -2; - inf->col = -2; - } - else - { - inf->row = -1; - inf->col = -1; - } - } - if (s_real_time) - { - inf->row1 = (int)(((multiply(inf->cvt.c, inf->view_vect1[0], g_bit_shift) + - multiply(inf->cvt.d, inf->view_vect1[1], g_bit_shift) + - inf->cvt.f) >> g_bit_shift) - + g_yy_adjust1); - inf->col1 = (int)(((multiply(inf->cvt.a, inf->view_vect1[0], g_bit_shift) + - multiply(inf->cvt.b, inf->view_vect1[1], g_bit_shift) + - inf->cvt.e) >> g_bit_shift) - + g_xx_adjust1); - if (inf->col1 < 0 || inf->col1 >= g_logical_screen_x_dots || inf->row1 < 0 || inf->row1 >= g_logical_screen_y_dots) - { - if ((long)std::abs(inf->col1)+(long)std::abs(inf->row1) > BAD_PIXEL) - { - inf->row1 = -2; - inf->col1 = -2; - } - else - { - inf->row1 = -1; - inf->col1 = -1; - } - } - } - return true; + return funny_glasses_call(ifs3d_float); // double version of ifs3d } -static bool float_view_transf3d(ViewTransform3DFloat *inf) +static bool float_view_transf3d(ViewTransform3D *inf) { if (g_color_iter == 1) // initialize on first call { diff --git a/libid/fractals/lsys.cpp b/libid/fractals/lsys.cpp index 5f181cc17..40ad16ba4 100644 --- a/libid/fractals/lsys.cpp +++ b/libid/fractals/lsys.cpp @@ -6,13 +6,10 @@ #include "fractals/lsys_fns.h" #include "io/file_gets.h" #include "math/fixed_pt.h" -#include "math/fpu087.h" #include "misc/Driver.h" -#include "misc/stack_avail.h" #include "ui/cmdfiles.h" #include "ui/file_item.h" #include "ui/stop_msg.h" -#include "ui/thinking.h" #include @@ -41,18 +38,6 @@ #define FIXED_LT1 536870912.0 #define ANGLE_TO_DOUBLE (2.0*PI / 4294967296.0) -namespace -{ - -struct LSysCmd -{ - void (*f)(LSysTurtleStateI *); - long n; - char ch; -}; - -} // namespace - static bool read_lsystem_file(char const *str); static void free_rules_mem(); static int rule_present(char symbol); @@ -60,32 +45,10 @@ static bool save_axiom(char const *text); static bool save_rule(char const *rule, int index); static bool append_rule(char const *rule, int index); static void free_l_cmds(); -static LSysCmd *find_size(LSysCmd *command, LSysTurtleStateI *ts, LSysCmd **rules, int depth); -static LSysCmd *draw_lsysi(LSysCmd *command, LSysTurtleStateI *ts, LSysCmd **rules, int depth); -static bool lsysi_find_scale(LSysCmd *command, LSysTurtleStateI *ts, LSysCmd **rules, int depth); -static LSysCmd *lsysi_size_transform(char const *s, LSysTurtleStateI *ts); -static LSysCmd *lsysi_draw_transform(char const *s, LSysTurtleStateI *ts); -static void lsysi_do_sin_cos(); -static void lsysi_do_slash(LSysTurtleStateI *cmd); -static void lsysi_do_backslash(LSysTurtleStateI *cmd); -static void lsysi_do_at(LSysTurtleStateI *cmd); -static void lsysi_do_pipe(LSysTurtleStateI *cmd); -static void lsysi_do_size_dm(LSysTurtleStateI *cmd); -static void lsysi_do_size_gf(LSysTurtleStateI *cmd); -static void lsysi_do_draw_d(LSysTurtleStateI *cmd); -static void lsysi_do_draw_m(LSysTurtleStateI *cmd); -static void lsysi_do_draw_g(LSysTurtleStateI *cmd); -static void lsysi_do_draw_f(LSysTurtleStateI *cmd); -static void lsysi_do_draw_c(LSysTurtleStateI *cmd); -static void lsysi_do_draw_gt(LSysTurtleStateI *cmd); -static void lsysi_do_draw_lt(LSysTurtleStateI *cmd); -static std::vector s_sin_table; -static std::vector s_cos_table; constexpr long PI_DIV_180_L{11930465L}; static std::string s_axiom; static std::vector s_rules; -static std::vector s_rule_cmds; static std::vector s_rule_f_cmds; static bool s_loaded{}; @@ -282,108 +245,51 @@ static bool read_lsystem_file(char const *str) int lsystem() { - bool stack_overflow = false; - if (!s_loaded && lsystem_load()) { return -1; } - g_overflow = false; // reset integer math overflow flag - int order = (int) g_params[0]; order = std::max(order, 0); - if (g_user_float_flag) - { - g_overflow = true; - } - else - { - LSysTurtleStateI ts; - - ts.stack_overflow = false; - ts.max_angle = g_max_angle; - ts.d_max_angle = (char)(g_max_angle - 1); - - s_rule_cmds.push_back(lsysi_size_transform(s_axiom.c_str(), &ts)); - for (auto const &rule : s_rules) - { - s_rule_cmds.push_back(lsysi_size_transform(rule.c_str(), &ts)); - } - s_rule_cmds.push_back(nullptr); - - lsysi_do_sin_cos(); - if (lsysi_find_scale(s_rule_cmds[0], &ts, &s_rule_cmds[1], order)) - { - ts.reverse = 0; - ts.angle = 0; - ts.real_angle = 0; - free_l_cmds(); - s_rule_cmds.push_back(lsysi_draw_transform(s_axiom.c_str(), &ts)); - for (auto const &rule : s_rules) - { - s_rule_cmds.push_back(lsysi_draw_transform(rule.c_str(), &ts)); - } - s_rule_cmds.push_back(nullptr); + LSysTurtleStateF ts; - // !! HOW ABOUT A BETTER WAY OF PICKING THE DEFAULT DRAWING COLOR - ts.curr_color = 15; - if (ts.curr_color > g_colors) - { - ts.curr_color = (char)(g_colors-1); - } - draw_lsysi(s_rule_cmds[0], &ts, &s_rule_cmds[1], order); - } - stack_overflow = ts.stack_overflow; - } + ts.stack_overflow = false; + ts.max_angle = g_max_angle; + ts.d_max_angle = (char) (g_max_angle - 1); - if (stack_overflow) + s_rule_f_cmds.push_back(lsysf_size_transform(s_axiom.c_str(), &ts)); + for (auto const &rule : s_rules) { - stop_msg("insufficient memory, try a lower order"); + s_rule_f_cmds.push_back(lsysf_size_transform(rule.c_str(), &ts)); } - else if (g_overflow) - { - LSysTurtleStateF ts; + s_rule_f_cmds.push_back(nullptr); - g_overflow = false; - - ts.stack_overflow = false; - ts.max_angle = g_max_angle; - ts.d_max_angle = (char)(g_max_angle - 1); + lsysf_do_sin_cos(); + if (lsysf_find_scale(s_rule_f_cmds[0], &ts, &s_rule_f_cmds[1], order)) + { + ts.reverse = 0; + ts.angle = 0; + ts.real_angle = 0; - s_rule_f_cmds.push_back(lsysf_size_transform(s_axiom.c_str(), &ts)); + free_l_cmds(); + s_rule_f_cmds.push_back(lsysf_draw_transform(s_axiom.c_str(), &ts)); for (auto const &rule : s_rules) { - s_rule_f_cmds.push_back(lsysf_size_transform(rule.c_str(), &ts)); + s_rule_f_cmds.push_back(lsysf_draw_transform(rule.c_str(), &ts)); } s_rule_f_cmds.push_back(nullptr); - lsysf_do_sin_cos(); - if (lsysf_find_scale(s_rule_f_cmds[0], &ts, &s_rule_f_cmds[1], order)) + // !! HOW ABOUT A BETTER WAY OF PICKING THE DEFAULT DRAWING COLOR + ts.curr_color = 15; + if (ts.curr_color > g_colors) { - ts.reverse = 0; - ts.angle = 0; - ts.real_angle = 0; - - free_l_cmds(); - s_rule_f_cmds.push_back(lsysf_draw_transform(s_axiom.c_str(), &ts)); - for (auto const &rule : s_rules) - { - s_rule_f_cmds.push_back(lsysf_draw_transform(rule.c_str(), &ts)); - } - s_rule_f_cmds.push_back(nullptr); - - // !! HOW ABOUT A BETTER WAY OF PICKING THE DEFAULT DRAWING COLOR - ts.curr_color = 15; - if (ts.curr_color > g_colors) - { - ts.curr_color = (char)(g_colors-1); - } - draw_lsysf(s_rule_f_cmds[0], &ts, &s_rule_f_cmds[1], order); + ts.curr_color = (char) (g_colors - 1); } - g_overflow = false; + draw_lsysf(s_rule_f_cmds[0], &ts, &s_rule_f_cmds[1], order); } + g_overflow = false; free_rules_mem(); free_l_cmds(); s_loaded = false; @@ -470,14 +376,6 @@ static bool append_rule(char const *rule, int index) static void free_l_cmds() { - for (auto cmd : s_rule_cmds) - { - if (cmd) - { - free(cmd); - } - } - s_rule_cmds.clear(); for (auto cmd : s_rule_f_cmds) { if (cmd != nullptr) @@ -487,686 +385,3 @@ static void free_l_cmds() } s_rule_f_cmds.clear(); } - -// integer specific routines - -static void lsysi_do_plus(LSysTurtleStateI *cmd) -{ - if (cmd->reverse) - { - if (++cmd->angle == cmd->max_angle) - { - cmd->angle = 0; - } - } - else - { - if (cmd->angle) - { - cmd->angle--; - } - else - { - cmd->angle = cmd->d_max_angle; - } - } -} - -// This is the same as lsys_doplus, except maxangle is a power of 2. -static void lsysi_do_plus_pow2(LSysTurtleStateI *cmd) -{ - if (cmd->reverse) - { - cmd->angle++; - cmd->angle &= cmd->d_max_angle; - } - else - { - cmd->angle--; - cmd->angle &= cmd->d_max_angle; - } -} - -static void lsysi_do_minus(LSysTurtleStateI *cmd) -{ - if (cmd->reverse) - { - if (cmd->angle) - { - cmd->angle--; - } - else - { - cmd->angle = cmd->d_max_angle; - } - } - else - { - if (++cmd->angle == cmd->max_angle) - { - cmd->angle = 0; - } - } -} - -static void lsysi_do_minus_pow2(LSysTurtleStateI *cmd) -{ - if (cmd->reverse) - { - cmd->angle--; - cmd->angle &= cmd->d_max_angle; - } - else - { - cmd->angle++; - cmd->angle &= cmd->d_max_angle; - } -} - -static void lsysi_do_slash(LSysTurtleStateI *cmd) -{ - if (cmd->reverse) - { - cmd->real_angle -= cmd->num; - } - else - { - cmd->real_angle += cmd->num; - } -} - -static void lsysi_do_backslash(LSysTurtleStateI *cmd) -{ - if (cmd->reverse) - { - cmd->real_angle += cmd->num; - } - else - { - cmd->real_angle -= cmd->num; - } -} - -static void lsysi_do_at(LSysTurtleStateI *cmd) -{ - cmd->size = multiply(cmd->size, cmd->num, 19); -} - -static void lsysi_do_pipe(LSysTurtleStateI *cmd) -{ - cmd->angle = (char)(cmd->angle + (char)(cmd->max_angle / 2)); - cmd->angle %= cmd->max_angle; -} - -static void lsysi_do_pipe_pow2(LSysTurtleStateI *cmd) -{ - cmd->angle += cmd->max_angle >> 1; - cmd->angle &= cmd->d_max_angle; -} - -static void lsysi_do_bang(LSysTurtleStateI *cmd) -{ - cmd->reverse = ! cmd->reverse; -} - -static void lsysi_do_size_dm(LSysTurtleStateI *cmd) -{ - double angle = (double) cmd->real_angle * ANGLE_TO_DOUBLE; - double s; - double c; - - sin_cos(&angle, &s, &c); - long fixed_sin = (long) (s * FIXED_LT1); - long fixed_cos = (long) (c * FIXED_LT1); - - cmd->x_pos = cmd->x_pos + (multiply(multiply(cmd->size, cmd->aspect, 19), fixed_cos, 29)); - cmd->y_pos = cmd->y_pos + (multiply(cmd->size, fixed_sin, 29)); - - // xpos+=size*aspect*cos(realangle*PI/180); - // ypos+=size*sin(realangle*PI/180); - cmd->x_max = std::max(cmd->x_pos, cmd->x_max); - cmd->y_max = std::max(cmd->y_pos, cmd->y_max); - cmd->x_min = std::min(cmd->x_pos, cmd->x_min); - cmd->y_min = std::min(cmd->y_pos, cmd->y_min); -} - -static void lsysi_do_size_gf(LSysTurtleStateI *cmd) -{ - cmd->x_pos = cmd->x_pos + (multiply(cmd->size, s_cos_table[(int)cmd->angle], 29)); - cmd->y_pos = cmd->y_pos + (multiply(cmd->size, s_sin_table[(int)cmd->angle], 29)); - // xpos+=size*coss[angle]; - // ypos+=size*sins[angle]; - cmd->x_max = std::max(cmd->x_pos, cmd->x_max); - cmd->y_max = std::max(cmd->y_pos, cmd->y_max); - cmd->x_min = std::min(cmd->x_pos, cmd->x_min); - cmd->y_min = std::min(cmd->y_pos, cmd->y_min); -} - -static void lsysi_do_draw_d(LSysTurtleStateI *cmd) -{ - double angle = (double) cmd->real_angle * ANGLE_TO_DOUBLE; - double s; - double c; - - sin_cos(&angle, &s, &c); - long fixed_sin = (long) (s * FIXED_LT1); - long fixed_cos = (long) (c * FIXED_LT1); - - int last_x = (int) (cmd->x_pos >> 19); - int last_y = (int) (cmd->y_pos >> 19); - cmd->x_pos = cmd->x_pos + (multiply(multiply(cmd->size, cmd->aspect, 19), fixed_cos, 29)); - cmd->y_pos = cmd->y_pos + (multiply(cmd->size, fixed_sin, 29)); - // xpos+=size*aspect*cos(realangle*PI/180); - // ypos+=size*sin(realangle*PI/180); - driver_draw_line(last_x, last_y, (int)(cmd->x_pos >> 19), (int)(cmd->y_pos >> 19), cmd->curr_color); -} - -static void lsysi_do_draw_m(LSysTurtleStateI *cmd) -{ - double angle = (double) cmd->real_angle * ANGLE_TO_DOUBLE; - double s; - double c; - - sin_cos(&angle, &s, &c); - long fixed_sin = (long) (s * FIXED_LT1); - long fixed_cos = (long) (c * FIXED_LT1); - - // xpos+=size*aspect*cos(realangle*PI/180); - // ypos+=size*sin(realangle*PI/180); - cmd->x_pos = cmd->x_pos + (multiply(multiply(cmd->size, cmd->aspect, 19), fixed_cos, 29)); - cmd->y_pos = cmd->y_pos + (multiply(cmd->size, fixed_sin, 29)); -} - -static void lsysi_do_draw_g(LSysTurtleStateI *cmd) -{ - cmd->x_pos = cmd->x_pos + (multiply(cmd->size, s_cos_table[(int)cmd->angle], 29)); - cmd->y_pos = cmd->y_pos + (multiply(cmd->size, s_sin_table[(int)cmd->angle], 29)); - // xpos+=size*coss[angle]; - // ypos+=size*sins[angle]; -} - -static void lsysi_do_draw_f(LSysTurtleStateI *cmd) -{ - int last_x = (int)(cmd->x_pos >> 19); - int last_y = (int)(cmd->y_pos >> 19); - cmd->x_pos = cmd->x_pos + (multiply(cmd->size, s_cos_table[(int)cmd->angle], 29)); - cmd->y_pos = cmd->y_pos + (multiply(cmd->size, s_sin_table[(int)cmd->angle], 29)); - // xpos+=size*coss[angle]; - // ypos+=size*sins[angle]; - driver_draw_line(last_x, last_y, (int)(cmd->x_pos >> 19), (int)(cmd->y_pos >> 19), cmd->curr_color); -} - -static void lsysi_do_draw_c(LSysTurtleStateI *cmd) -{ - cmd->curr_color = (char)(((int) cmd->num) % g_colors); -} - -static void lsysi_do_draw_gt(LSysTurtleStateI *cmd) -{ - cmd->curr_color = (char)(cmd->curr_color - (char)cmd->num); - cmd->curr_color %= g_colors; - if (cmd->curr_color == 0) - { - cmd->curr_color = (char)(g_colors-1); - } -} - -static void lsysi_do_draw_lt(LSysTurtleStateI *cmd) -{ - cmd->curr_color = (char)(cmd->curr_color + (char)cmd->num); - cmd->curr_color %= g_colors; - if (cmd->curr_color == 0) - { - cmd->curr_color = 1; - } -} - -static LSysCmd *find_size(LSysCmd *command, LSysTurtleStateI *ts, LSysCmd **rules, int depth) -{ - if (g_overflow) // integer math routines overflowed - { - return nullptr; - } - - if (stack_avail() < 400) - { - // leave some margin for calling subrtns - ts->stack_overflow = true; - return nullptr; - } - - while (command->ch && command->ch != ']') - { - if (!(ts->counter++)) - { - // let user know we're not dead - if (thinking(1, "L-System thinking (higher orders take longer)")) - { - ts->counter--; - return nullptr; - } - } - bool tran = false; - if (depth > 0) - { - for (LSysCmd **rule_index = rules; *rule_index; rule_index++) - { - if ((*rule_index)->ch == command->ch) - { - tran = true; - if (find_size((*rule_index)+1, ts, rules, depth-1) == nullptr) - { - return nullptr; - } - } - } - } - if (depth == 0 || !tran) - { - if (command->f) - { - ts->num = command->n; - (*command->f)(ts); - } - else if (command->ch == '[') - { - char const save_angle = ts->angle; - char const save_reverse = ts->reverse; - long const save_size = ts->size; - unsigned long const save_real_angle = ts->real_angle; - long const save_x = ts->x_pos; - long const save_y = ts->y_pos; - command = find_size(command+1, ts, rules, depth); - if (command == nullptr) - { - return nullptr; - } - ts->angle = save_angle; - ts->reverse = save_reverse; - ts->size = save_size; - ts->real_angle = save_real_angle; - ts->x_pos = save_x; - ts->y_pos = save_y; - } - } - command++; - } - return command; -} - -static bool lsysi_find_scale(LSysCmd *command, LSysTurtleStateI *ts, LSysCmd **rules, int depth) -{ - float horiz; - float vert; - - double local_aspect = g_screen_aspect * g_logical_screen_x_dots / g_logical_screen_y_dots; - ts->aspect = FIXED_PT(local_aspect); - ts->counter = 0; - ts->reverse = 0; - ts->angle = 0; - ts->real_angle = 0; - ts->y_min = 0; - ts->y_max = 0; - ts->x_max = 0; - ts->x_min = 0; - ts->y_pos = 0; - ts->x_pos = 0; - ts->size = FIXED_PT(1L); - LSysCmd *f_s_ret = find_size(command, ts, rules, depth); - thinking(0, nullptr); // erase thinking message if any - double x_min = (double) ts->x_min / FIXED_MUL; - double x_max = (double) ts->x_max / FIXED_MUL; - double y_min = (double) ts->y_min / FIXED_MUL; - double y_max = (double) ts->y_max / FIXED_MUL; - if (f_s_ret == nullptr) - { - return false; - } - if (x_max == x_min) - { - horiz = (float)1E37; - } - else - { - horiz = (float)((g_logical_screen_x_dots-10)/(x_max-x_min)); - } - if (y_max == y_min) - { - vert = (float)1E37; - } - else - { - vert = (float)((g_logical_screen_y_dots-6) /(y_max-y_min)); - } - double local_size = (vert < horiz) ? vert : horiz; - - if (horiz == 1E37) - { - ts->x_pos = FIXED_PT(g_logical_screen_x_dots/2); - } - else - { - // ts->xpos = FIXEDPT(-xmin*(locsize)+5+((xdots-10)-(locsize)*(xmax-xmin))/2); - ts->x_pos = FIXED_PT((g_logical_screen_x_dots-local_size*(x_max+x_min))/2); - } - if (vert == 1E37) - { - ts->y_pos = FIXED_PT(g_logical_screen_y_dots/2); - } - else - { - // ts->ypos = FIXEDPT(-ymin*(locsize)+3+((ydots-6)-(locsize)*(ymax-ymin))/2); - ts->y_pos = FIXED_PT((g_logical_screen_y_dots-local_size*(y_max+y_min))/2); - } - ts->size = FIXED_PT(local_size); - - return true; -} - -static LSysCmd *draw_lsysi(LSysCmd *command, LSysTurtleStateI *ts, LSysCmd **rules, int depth) -{ - if (g_overflow) // integer math routines overflowed - { - return nullptr; - } - - if (stack_avail() < 400) - { - // leave some margin for calling subrtns - ts->stack_overflow = true; - return nullptr; - } - - while (command->ch && command->ch != ']') - { - if (!(ts->counter++)) - { - if (driver_key_pressed()) - { - ts->counter--; - return nullptr; - } - } - bool tran = false; - if (depth) - { - for (LSysCmd **rule_index = rules; *rule_index; rule_index++) - { - if ((*rule_index)->ch == command->ch) - { - tran = true; - if (draw_lsysi((*rule_index)+1, ts, rules, depth-1) == nullptr) - { - return nullptr; - } - } - } - } - if (!depth || !tran) - { - if (command->f) - { - ts->num = command->n; - (*command->f)(ts); - } - else if (command->ch == '[') - { - char const save_angle = ts->angle; - char const save_reverse = ts->reverse; - long const save_size = ts->size; - unsigned long const save_real_angle = ts->real_angle; - long const save_x = ts->x_pos; - long const save_y = ts->y_pos; - char const save_color = ts->curr_color; - command = draw_lsysi(command+1, ts, rules, depth); - if (command == nullptr) - { - return nullptr; - } - ts->angle = save_angle; - ts->reverse = save_reverse; - ts->size = save_size; - ts->real_angle = save_real_angle; - ts->x_pos = save_x; - ts->y_pos = save_y; - ts->curr_color = save_color; - } - } - command++; - } - return command; -} - -static LSysCmd *lsysi_size_transform(char const *s, LSysTurtleStateI *ts) -{ - int max_val = 10; - int n = 0; - - auto const plus = is_pow2(ts->max_angle) ? lsysi_do_plus_pow2 : lsysi_do_plus; - auto const minus = is_pow2(ts->max_angle) ? lsysi_do_minus_pow2 : lsysi_do_minus; - auto const pipe = is_pow2(ts->max_angle) ? lsysi_do_pipe_pow2 : lsysi_do_pipe; - - LSysCmd *ret = (LSysCmd *) malloc((long) max_val * sizeof(LSysCmd)); - if (ret == nullptr) - { - ts->stack_overflow = true; - return nullptr; - } - while (*s) - { - void (*f)(LSysTurtleStateI *) = nullptr; - long num = 0; - ret[n].ch = *s; - switch (*s) - { - case '+': - f = plus; - break; - case '-': - f = minus; - break; - case '/': - f = lsysi_do_slash; - num = (long)(get_number(&s) * PI_DIV_180_L); - break; - case '\\': - f = lsysi_do_backslash; - num = (long)(get_number(&s) * PI_DIV_180_L); - break; - case '@': - f = lsysi_do_at; - num = FIXED_PT(get_number(&s)); - break; - case '|': - f = pipe; - break; - case '!': - f = lsysi_do_bang; - break; - case 'd': - case 'm': - f = lsysi_do_size_dm; - break; - case 'g': - case 'f': - f = lsysi_do_size_gf; - break; - case '[': - num = 1; - break; - case ']': - num = 2; - break; - default: - num = 3; - break; - } - ret[n].f = f; - ret[n].n = num; - if (++n == max_val) - { - LSysCmd *doubled = (LSysCmd *) malloc((long) max_val*2*sizeof(LSysCmd)); - if (doubled == nullptr) - { - free(ret); - ts->stack_overflow = true; - return nullptr; - } - std::memcpy(doubled, ret, max_val*sizeof(LSysCmd)); - free(ret); - ret = doubled; - max_val <<= 1; - } - s++; - } - ret[n].ch = 0; - ret[n].f = nullptr; - ret[n].n = 0; - n++; - - LSysCmd *doubled = (LSysCmd *) malloc((long) n*sizeof(LSysCmd)); - if (doubled == nullptr) - { - free(ret); - ts->stack_overflow = true; - return nullptr; - } - std::memcpy(doubled, ret, n*sizeof(LSysCmd)); - free(ret); - return doubled; -} - -static LSysCmd *lsysi_draw_transform(char const *s, LSysTurtleStateI *ts) -{ - int max_val = 10; - int n = 0; - - auto const plus = is_pow2(ts->max_angle) ? lsysi_do_plus_pow2 : lsysi_do_plus; - auto const minus = is_pow2(ts->max_angle) ? lsysi_do_minus_pow2 : lsysi_do_minus; - auto const pipe = is_pow2(ts->max_angle) ? lsysi_do_pipe_pow2 : lsysi_do_pipe; - - LSysCmd *ret = (LSysCmd *) malloc((long) max_val * sizeof(LSysCmd)); - if (ret == nullptr) - { - ts->stack_overflow = true; - return nullptr; - } - while (*s) - { - void (*f)(LSysTurtleStateI *) = nullptr; - long num = 0; - ret[n].ch = *s; - switch (*s) - { - case '+': - f = plus; - break; - case '-': - f = minus; - break; - case '/': - f = lsysi_do_slash; - num = (long)(get_number(&s) * PI_DIV_180_L); - break; - case '\\': - f = lsysi_do_backslash; - num = (long)(get_number(&s) * PI_DIV_180_L); - break; - case '@': - f = lsysi_do_at; - num = FIXED_PT(get_number(&s)); - break; - case '|': - f = pipe; - break; - case '!': - f = lsysi_do_bang; - break; - case 'd': - f = lsysi_do_draw_d; - break; - case 'm': - f = lsysi_do_draw_m; - break; - case 'g': - f = lsysi_do_draw_g; - break; - case 'f': - f = lsysi_do_draw_f; - break; - case 'c': - f = lsysi_do_draw_c; - num = (long) get_number(&s); - break; - case '<': - f = lsysi_do_draw_lt; - num = (long) get_number(&s); - break; - case '>': - f = lsysi_do_draw_gt; - num = (long) get_number(&s); - break; - case '[': - num = 1; - break; - case ']': - num = 2; - break; - default: - num = 3; - break; - } - ret[n].f = f; - ret[n].n = num; - if (++n == max_val) - { - LSysCmd *doubled = (LSysCmd *) malloc((long) max_val*2*sizeof(LSysCmd)); - if (doubled == nullptr) - { - free(ret); - ts->stack_overflow = true; - return nullptr; - } - std::memcpy(doubled, ret, max_val*sizeof(LSysCmd)); - free(ret); - ret = doubled; - max_val <<= 1; - } - s++; - } - ret[n].ch = 0; - ret[n].f = nullptr; - ret[n].n = 0; - n++; - - LSysCmd *doubled = (LSysCmd *) malloc((long) n*sizeof(LSysCmd)); - if (doubled == nullptr) - { - free(ret); - ts->stack_overflow = true; - return nullptr; - } - std::memcpy(doubled, ret, n*sizeof(LSysCmd)); - free(ret); - return doubled; -} - -static void lsysi_do_sin_cos() -{ - double two_pi = 2.0 * PI; - double two_pi_max_i; - double s; - double c; - - double local_aspect = g_screen_aspect * g_logical_screen_x_dots / g_logical_screen_y_dots; - double two_pi_max = two_pi / g_max_angle; - s_sin_table.resize(g_max_angle); - s_cos_table.resize(g_max_angle); - for (int i = 0; i < g_max_angle; i++) - { - two_pi_max_i = i * two_pi_max; - sin_cos(&two_pi_max_i, &s, &c); - s_sin_table[i] = (long)(s * FIXED_LT1); - s_cos_table[i] = (long)((local_aspect * c) * FIXED_LT1); - } -} diff --git a/libid/fractals/lsysf.cpp b/libid/fractals/lsysf.cpp index 5650c09ab..00ac823f6 100644 --- a/libid/fractals/lsysf.cpp +++ b/libid/fractals/lsysf.cpp @@ -6,6 +6,7 @@ #include "fractals/lsys_fns.h" #include "math/fixed_pt.h" #include "misc/Driver.h" +#include "misc/id.h" #include "misc/stack_avail.h" #include "ui/cmdfiles.h" #include "ui/thinking.h" diff --git a/libid/fractals/pickover_mandelbrot.cpp b/libid/fractals/pickover_mandelbrot.cpp index 037092fbf..e32e6a30f 100644 --- a/libid/fractals/pickover_mandelbrot.cpp +++ b/libid/fractals/pickover_mandelbrot.cpp @@ -205,7 +205,7 @@ bool julia_fn_plus_z_sqrd_setup() default: break; } - return g_cur_fractal_specific->is_integer ? julia_long_setup() : julia_fp_setup(); + return julia_fp_setup(); } int trig_plus_z_squared_fp_fractal() diff --git a/libid/fractals/taylor_skinner_variations.cpp b/libid/fractals/taylor_skinner_variations.cpp index d9834153d..641263487 100644 --- a/libid/fractals/taylor_skinner_variations.cpp +++ b/libid/fractals/taylor_skinner_variations.cpp @@ -188,7 +188,7 @@ bool fn_x_fn_setup() g_symmetry = SymmetryType::PI_SYM; } } - return g_cur_fractal_specific->is_integer ? julia_long_setup() : julia_fp_setup(); + return julia_fp_setup(); } int trig_x_trig_fp_fractal() @@ -225,7 +225,7 @@ bool sqr_trig_setup() default: break; } - return g_cur_fractal_specific->is_integer ? julia_long_setup() : julia_fp_setup(); + return julia_fp_setup(); } int sqr_trig_fp_fractal() @@ -331,23 +331,6 @@ bool z_x_trig_plus_z_setup() break; } } - if (g_cur_fractal_specific->is_integer) - { - g_cur_fractal_specific->orbit_calc = z_x_trig_plus_z_fractal; - if (g_l_param.x == g_fudge_factor && g_l_param.y == 0L && g_l_param2.y == 0L && - g_debug_flag != DebugFlags::FORCE_STANDARD_FRACTAL) - { - if (g_l_param2.x == g_fudge_factor) // Scott variant - { - g_cur_fractal_specific->orbit_calc = scott_z_x_trig_plus_z_fractal; - } - else if (g_l_param2.x == -g_fudge_factor) // Skinner variant - { - g_cur_fractal_specific->orbit_calc = skinner_z_x_trig_sub_z_fractal; - } - } - return julia_long_setup(); - } g_cur_fractal_specific->orbit_calc = z_x_trig_plus_z_fp_fractal; if (g_param_z1.x == 1.0 && g_param_z1.y == 0.0 && g_param_z2.y == 0.0 && g_debug_flag != DebugFlags::FORCE_STANDARD_FRACTAL) diff --git a/libid/include/engine/fractals.h b/libid/include/engine/fractals.h index 34fef7908..ebc1368f1 100644 --- a/libid/include/engine/fractals.h +++ b/libid/include/engine/fractals.h @@ -38,7 +38,6 @@ extern double g_temp_sqr_y; // Raise complex number (base) to the (exp) power, storing the result in complex (result). void pow(DComplex *base, int exp, DComplex *result); int pow(LComplex *base, int exp, LComplex *result, int bit_shift); -int julia_fractal(); int julia_fp_fractal(); int burning_ship_fp_fractal(); int long_cmplx_z_power_fractal(); diff --git a/libid/include/fractals/fractalp.h b/libid/include/fractals/fractalp.h index e0159146f..8be8b3961 100644 --- a/libid/include/fractals/fractalp.h +++ b/libid/include/fractals/fractalp.h @@ -96,7 +96,6 @@ struct FractalSpecific float x_max; // default XMAX corner float y_min; // default YMIN corner float y_max; // default YMAX corner - int is_integer; // 1 if integer fractal, 0 otherwise FractalType to_julia; // mandel-to-julia switch FractalType to_mandel; // julia-to-mandel switch SymmetryType symmetry; // applicable symmetry logic diff --git a/libid/include/fractals/frasetup.h b/libid/include/fractals/frasetup.h index 702852c1c..83a90b4b0 100644 --- a/libid/include/fractals/frasetup.h +++ b/libid/include/fractals/frasetup.h @@ -8,6 +8,4 @@ bool mandel_setup(); bool mandel_fp_setup(); bool standalone_setup(); bool julia_fp_setup(); -bool mandel_long_setup(); -bool julia_long_setup(); bool standard_setup(); diff --git a/libid/include/fractals/lsys.h b/libid/include/fractals/lsys.h index 7c8940441..86bbd4239 100644 --- a/libid/include/fractals/lsys.h +++ b/libid/include/fractals/lsys.h @@ -4,8 +4,6 @@ // #pragma once -#include "misc/id.h" - #include enum @@ -13,20 +11,6 @@ enum MAX_LSYS_LINE_LEN = 255 // this limits line length to 255 }; -struct LSysTurtleStateI -{ - char counter, angle, reverse; - bool stack_overflow; - // dmaxangle is maxangle - 1 - char max_angle, d_max_angle, curr_color, dummy; // dummy ensures longword alignment - long size; - long real_angle; - long x_pos, y_pos; // xpos and ypos are long, not fixed point - long x_min, y_min, x_max, y_max; // as are these - long aspect; // aspect ratio of each pixel, ysize/xsize - long num; -}; - struct LSysTurtleStateF { char counter, angle, reverse; diff --git a/libid/io/loadfile.cpp b/libid/io/loadfile.cpp index 1c6a79ebb..5d5ff397e 100644 --- a/libid/io/loadfile.cpp +++ b/libid/io/loadfile.cpp @@ -660,7 +660,7 @@ static void backwards_info_pre4(FractalInfo read_info) { g_log_map_flag = 2; } - g_user_float_flag = g_cur_fractal_specific->is_integer == 0; + g_user_float_flag = true; } } diff --git a/libid/ui/history.cpp b/libid/ui/history.cpp index b99f48615..c6b940661 100644 --- a/libid/ui/history.cpp +++ b/libid/ui/history.cpp @@ -713,7 +713,7 @@ void restore_history_info(int i) g_set_orbit_corners = true; } g_draw_mode = last.draw_mode; - g_user_float_flag = g_cur_fractal_specific->is_integer == 0; + g_user_float_flag = true; std::memcpy(g_dac_box, last.dac_box, 256*3); std::memcpy(g_old_dac_box, last.dac_box, 256*3); if (g_map_specified) diff --git a/libid/ui/main_menu_switch.cpp b/libid/ui/main_menu_switch.cpp index db2eb206c..5946635fc 100644 --- a/libid/ui/main_menu_switch.cpp +++ b/libid/ui/main_menu_switch.cpp @@ -381,10 +381,9 @@ static MainState request_3d_fractal_params(MainContext &context) static MainState show_orbit_window(MainContext &/*context*/) { // must use standard fractal and have a float variant - if ((get_fractal_specific(g_fractal_type)->calc_type == standard_fractal - || get_fractal_specific(g_fractal_type)->calc_type == calc_froth) - && (get_fractal_specific(g_fractal_type)->is_integer == 0) - && (g_bf_math == BFMathType::NONE) // for now no arbitrary precision support + if ((get_fractal_specific(g_fractal_type)->calc_type == standard_fractal || + get_fractal_specific(g_fractal_type)->calc_type == calc_froth) // + && g_bf_math == BFMathType::NONE // for now no arbitrary precision support && (!g_is_true_color || g_true_mode == TrueColorMode::DEFAULT_COLOR)) { clear_zoom_box();