diff --git a/.github/build.sh b/.github/build.sh index d6adce12d..b91afb083 100755 --- a/.github/build.sh +++ b/.github/build.sh @@ -198,9 +198,6 @@ esac if [[ $PACKAGE_MODE == nohttp ]]; then meson_configure+=$'\t'-Dhttp=false fi -if [[ $PACKAGE_MODE == nogravfft ]]; then - meson_configure+=$'\t'-Dgravfft=false -fi if [[ $PACKAGE_MODE == nolua ]]; then meson_configure+=$'\t'-Dlua=none fi diff --git a/.github/prepare.py b/.github/prepare.py index 26f7b0461..c24bf5033 100755 --- a/.github/prepare.py +++ b/.github/prepare.py @@ -83,7 +83,6 @@ for arch, platform, libc, statdyn, bplatform, runson, suff ( 'x86_64', 'linux', 'gnu', 'static', 'linux', 'ubuntu-18.04', '', False, True, '.dbg', 'appimage', None, 'release' ), ( 'x86_64', 'linux', 'gnu', 'dynamic', 'linux', 'ubuntu-18.04', '', False, False, None, None, None, 'debug' ), ( 'x86_64', 'linux', 'gnu', 'dynamic', 'linux', 'ubuntu-18.04', '', False, False, None, 'nohttp', None, 'debug' ), - ( 'x86_64', 'linux', 'gnu', 'dynamic', 'linux', 'ubuntu-18.04', '', False, False, None,'nogravfft', None, 'debug' ), ( 'x86_64', 'linux', 'gnu', 'dynamic', 'linux', 'ubuntu-18.04', '', False, False, None, 'nolua', None, 'debug' ), ( 'x86_64', 'linux', 'gnu', 'dynamic', 'linux', 'ubuntu-18.04', '', False, False, None, None, None, 'release' ), # ( 'x86_64', 'windows', 'mingw', 'static', 'linux', 'ubuntu-20.04', '', False, False, None, None, None, 'debug' ), # ubuntu-20.04 doesn't have windows TLS headers somehow and I haven't yet figured out how to get them diff --git a/meson.build b/meson.build index 99250e1ef..0d5e9032c 100644 --- a/meson.build +++ b/meson.build @@ -179,9 +179,7 @@ if host_platform == 'android' endif curl_dep = enable_http ? dependency('libcurl', static: is_static) : [] -enable_gravfft = get_option('gravfft') -fftw_dep = enable_gravfft ? dependency('fftw3f', static: is_static) : [] - +fftw_dep = dependency('fftw3f', static: is_static) threads_dep = dependency('threads') zlib_dep = dependency('zlib', static: is_static) png_dep = dependency('libpng16', static: is_static) diff --git a/meson_options.txt b/meson_options.txt index 7c7f2a51d..790399613 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -30,12 +30,6 @@ option( value: true, description: 'Enable HTTP via libcurl' ) -option( - 'gravfft', - type: 'boolean', - value: true, - description: 'Enable FFT gravity via libfftw3' -) option( 'snapshot', type: 'boolean', diff --git a/src/Config.template.h b/src/Config.template.h index 0eade2857..c7f1fa2fb 100644 --- a/src/Config.template.h +++ b/src/Config.template.h @@ -6,7 +6,6 @@ constexpr bool X86 = @X86@; constexpr bool BETA = @BETA@; constexpr bool SNAPSHOT = @SNAPSHOT@; constexpr bool MOD = @MOD@; -constexpr bool GRAVFFT = @GRAVFFT@; constexpr bool NOHTTP = @NOHTTP@; constexpr bool LUACONSOLE = @LUACONSOLE@; constexpr bool ALLOW_FAKE_NEWER_VERSION = @ALLOW_FAKE_NEWER_VERSION@; diff --git a/src/graphics/Renderer.cpp b/src/graphics/Renderer.cpp index 4474af447..04414528e 100644 --- a/src/graphics/Renderer.cpp +++ b/src/graphics/Renderer.cpp @@ -6,7 +6,7 @@ #include "simulation/ElementGraphics.h" #include "simulation/ElementClasses.h" #include "simulation/Air.h" -#include "simulation/Gravity.h" +#include "simulation/gravity/Gravity.h" #include constexpr auto VIDXRES = WINDOWW; diff --git a/src/gui/game/GameModel.cpp b/src/gui/game/GameModel.cpp index d74c29d74..4c92c18d0 100644 --- a/src/gui/game/GameModel.cpp +++ b/src/gui/game/GameModel.cpp @@ -20,7 +20,7 @@ #include "graphics/Renderer.h" #include "simulation/Air.h" #include "simulation/GOLString.h" -#include "simulation/Gravity.h" +#include "simulation/gravity/Gravity.h" #include "simulation/Simulation.h" #include "simulation/Snapshot.h" #include "simulation/SnapshotDelta.h" diff --git a/src/gui/game/IntroText.h b/src/gui/game/IntroText.h index b8448d857..976d12fcb 100644 --- a/src/gui/game/IntroText.h +++ b/src/gui/game/IntroText.h @@ -51,10 +51,6 @@ inline ByteString IntroText() { sb << " LUACONSOLE"; } - if constexpr (GRAVFFT) - { - sb << " GRAVFFT"; - } #ifdef REALISTIC sb << " REALISTIC"; #endif diff --git a/src/gui/options/OptionsModel.cpp b/src/gui/options/OptionsModel.cpp index 6cfcbf6e5..e41f0a7db 100644 --- a/src/gui/options/OptionsModel.cpp +++ b/src/gui/options/OptionsModel.cpp @@ -4,7 +4,7 @@ #include "simulation/Simulation.h" #include "simulation/Air.h" -#include "simulation/Gravity.h" +#include "simulation/gravity/Gravity.h" #include "prefs/GlobalPrefs.h" diff --git a/src/lua/LegacyLuaAPI.cpp b/src/lua/LegacyLuaAPI.cpp index da008c03b..dbba90a40 100644 --- a/src/lua/LegacyLuaAPI.cpp +++ b/src/lua/LegacyLuaAPI.cpp @@ -8,7 +8,7 @@ #include "graphics/Graphics.h" #include "graphics/Renderer.h" #include "simulation/ElementCommon.h" -#include "simulation/Gravity.h" +#include "simulation/gravity/Gravity.h" #include "simulation/Simulation.h" #include "simulation/SimulationData.h" #include "gui/dialogues/ConfirmPrompt.h" diff --git a/src/simulation/Editing.cpp b/src/simulation/Editing.cpp index b0d2c4a51..9e0982a74 100644 --- a/src/simulation/Editing.cpp +++ b/src/simulation/Editing.cpp @@ -3,7 +3,7 @@ #include "SimTool.h" #include "Snapshot.h" #include "Air.h" -#include "Gravity.h" +#include "gravity/Gravity.h" #include "common/tpt-rand.h" #include "common/tpt-compat.h" #include "client/GameSave.h" diff --git a/src/simulation/PlainGravity.cpp b/src/simulation/PlainGravity.cpp deleted file mode 100644 index c728913d4..000000000 --- a/src/simulation/PlainGravity.cpp +++ /dev/null @@ -1,53 +0,0 @@ -#include "Gravity.h" -#include "Misc.h" -#include -#include - -// gravity without fast Fourier transforms - -void Gravity::get_result() -{ - memcpy(gravy, th_gravy, NCELL*sizeof(float)); - memcpy(gravx, th_gravx, NCELL*sizeof(float)); - memcpy(gravp, th_gravp, NCELL*sizeof(float)); -} - -void Gravity::update_grav(void) -{ - th_gravchanged = 1; - membwand(th_gravmap, gravmask, NCELL*sizeof(float), NCELL*sizeof(unsigned)); - for (int i = 0; i < YCELLS; i++) - { - for (int j = 0; j < XCELLS; j++) - { - if (th_ogravmap[i*XCELLS+j] != th_gravmap[i*XCELLS+j]) - { - for (int y = 0; y < YCELLS; y++) - { - for (int x = 0; x < XCELLS; x++) - { - if (x == j && y == i)//Ensure it doesn't calculate with itself - continue; - auto distance = hypotf(j - x, i - y); - float val; - val = th_gravmap[i*XCELLS+j] - th_ogravmap[i*XCELLS+j]; - th_gravx[y*XCELLS+x] += M_GRAV * val * (j - x) / powf(distance, 3.0f); - th_gravy[y*XCELLS+x] += M_GRAV * val * (i - y) / powf(distance, 3.0f); - th_gravp[y*XCELLS+x] += M_GRAV * val / powf(distance, 2.0f); - } - } - } - } - } - memcpy(th_ogravmap, th_gravmap, NCELL*sizeof(float)); -} - -GravityPtr Gravity::Create() -{ - return GravityPtr(new Gravity(CtorTag{})); -} - -void GravityDeleter::operator ()(Gravity *ptr) const -{ - delete ptr; -} diff --git a/src/simulation/SimTool.cpp b/src/simulation/SimTool.cpp index 45f0d80cf..8a813b3b9 100644 --- a/src/simulation/SimTool.cpp +++ b/src/simulation/SimTool.cpp @@ -1,7 +1,7 @@ #include "common/tpt-rand.h" #include "graphics/Renderer.h" #include "simulation/ElementGraphics.h" -#include "simulation/Gravity.h" +#include "simulation/gravity/Gravity.h" #include "simulation/Simulation.h" #include "Misc.h" #include "ToolClasses.h" diff --git a/src/simulation/Simulation.cpp b/src/simulation/Simulation.cpp index 3afe6fd18..38efca797 100644 --- a/src/simulation/Simulation.cpp +++ b/src/simulation/Simulation.cpp @@ -1,7 +1,7 @@ #include "Simulation.h" #include "Air.h" #include "ElementClasses.h" -#include "Gravity.h" +#include "gravity/Gravity.h" #include "ToolClasses.h" #include "SimulationData.h" #include "GOLString.h" diff --git a/src/simulation/Simulation.h b/src/simulation/Simulation.h index 0792471d2..b184a5e32 100644 --- a/src/simulation/Simulation.h +++ b/src/simulation/Simulation.h @@ -7,7 +7,7 @@ #include "BuiltinGOL.h" #include "MenuSection.h" #include "CoordStack.h" -#include "GravityPtr.h" +#include "gravity/GravityPtr.h" #include "Element.h" #include "SimulationConfig.h" #include diff --git a/src/simulation/Gravity.cpp b/src/simulation/gravity/Common.cpp similarity index 98% rename from src/simulation/Gravity.cpp rename to src/simulation/gravity/Common.cpp index b83b9f6d1..468a23639 100644 --- a/src/simulation/Gravity.cpp +++ b/src/simulation/gravity/Common.cpp @@ -1,14 +1,12 @@ #include "Gravity.h" - +#include "simulation/CoordStack.h" +#include "simulation/Simulation.h" +#include "simulation/SimulationData.h" +#include "Misc.h" #include #include #include -#include "CoordStack.h" -#include "Misc.h" -#include "Simulation.h" -#include "SimulationData.h" - Gravity::Gravity(CtorTag) { // Allocate full size Gravmaps diff --git a/src/simulation/FftGravity.cpp b/src/simulation/gravity/Fft.cpp similarity index 95% rename from src/simulation/FftGravity.cpp rename to src/simulation/gravity/Fft.cpp index b2f8d1ec6..e87ad623c 100644 --- a/src/simulation/FftGravity.cpp +++ b/src/simulation/gravity/Fft.cpp @@ -4,7 +4,7 @@ #include #include -struct FftGravity : public Gravity +struct GravityImpl : public Gravity { bool grav_fft_status = false; float *th_ptgravx = nullptr; @@ -19,20 +19,20 @@ struct FftGravity : public Gravity void grav_fft_init(); void grav_fft_cleanup(); - FftGravity() : Gravity(CtorTag{}) + GravityImpl() : Gravity(CtorTag{}) { } - ~FftGravity(); + ~GravityImpl(); }; -FftGravity::~FftGravity() +GravityImpl::~GravityImpl() { stop_grav_async(); grav_fft_cleanup(); } -void FftGravity::grav_fft_init() +void GravityImpl::grav_fft_init() { int xblock2 = XCELLS*2; int yblock2 = YCELLS*2; @@ -91,7 +91,7 @@ void FftGravity::grav_fft_init() grav_fft_status = true; } -void FftGravity::grav_fft_cleanup() +void GravityImpl::grav_fft_cleanup() { if (!grav_fft_status) return; fftwf_free(th_ptgravxt); @@ -117,7 +117,7 @@ void Gravity::get_result() void Gravity::update_grav() { - auto *fftGravity = static_cast(this); + auto *fftGravity = static_cast(this); if (!fftGravity->grav_fft_status) fftGravity->grav_fft_init(); @@ -193,10 +193,10 @@ void Gravity::update_grav() GravityPtr Gravity::Create() { - return GravityPtr(new FftGravity()); + return GravityPtr(new GravityImpl()); } void GravityDeleter::operator ()(Gravity *ptr) const { - delete static_cast(ptr); + delete static_cast(ptr); } diff --git a/src/simulation/Gravity.h b/src/simulation/gravity/Gravity.h similarity index 100% rename from src/simulation/Gravity.h rename to src/simulation/gravity/Gravity.h diff --git a/src/simulation/GravityPtr.h b/src/simulation/gravity/GravityPtr.h similarity index 100% rename from src/simulation/GravityPtr.h rename to src/simulation/gravity/GravityPtr.h diff --git a/src/simulation/gravity/Null.cpp b/src/simulation/gravity/Null.cpp new file mode 100644 index 000000000..874d45eb4 --- /dev/null +++ b/src/simulation/gravity/Null.cpp @@ -0,0 +1,26 @@ +#include "Gravity.h" +#include "Misc.h" +#include + +// gravity without fast Fourier transforms + +void Gravity::get_result() +{ + memcpy(gravy, th_gravy, NCELL*sizeof(float)); + memcpy(gravx, th_gravx, NCELL*sizeof(float)); + memcpy(gravp, th_gravp, NCELL*sizeof(float)); +} + +void Gravity::update_grav(void) +{ +} + +GravityPtr Gravity::Create() +{ + return GravityPtr(new Gravity(CtorTag{})); +} + +void GravityDeleter::operator ()(Gravity *ptr) const +{ + delete ptr; +} diff --git a/src/simulation/gravity/meson.build b/src/simulation/gravity/meson.build new file mode 100644 index 000000000..8a4b67e17 --- /dev/null +++ b/src/simulation/gravity/meson.build @@ -0,0 +1,6 @@ +simulation_files += files( + 'Common.cpp', +) + +powder_files += files('Fft.cpp') +render_files += files('Null.cpp') diff --git a/src/simulation/meson.build b/src/simulation/meson.build index 12f2b81fc..e06026dd1 100644 --- a/src/simulation/meson.build +++ b/src/simulation/meson.build @@ -3,7 +3,6 @@ simulation_files = files( 'Element.cpp', 'ElementClasses.cpp', 'GOLString.cpp', - 'Gravity.cpp', 'Particle.cpp', 'SaveRenderer.cpp', 'Sign.cpp', @@ -13,6 +12,7 @@ simulation_files = files( subdir('elements') subdir('simtools') +subdir('gravity') powder_files += simulation_files render_files += simulation_files @@ -26,10 +26,3 @@ powder_files += files( render_files += files( 'NoToolClasses.cpp', ) -if enable_gravfft - powder_files += files('FftGravity.cpp') -else - powder_files += files('PlainGravity.cpp') -endif -conf_data.set('GRAVFFT', enable_gravfft ? 'true' : 'false') -render_files += files('PlainGravity.cpp')