diff options
| author | a1xd <[email protected]> | 2020-07-31 04:52:24 -0400 |
|---|---|---|
| committer | a1xd <[email protected]> | 2020-07-31 04:52:24 -0400 |
| commit | f7c88d689e924010f6f95b22894414f0b96c4aa0 (patch) | |
| tree | fe64110f7678607947d19c5ba0b46ea2b15d69c4 | |
| parent | add more tweaks for st-refactor (diff) | |
| download | rawaccel-f7c88d689e924010f6f95b22894414f0b96c4aa0.tar.xz rawaccel-f7c88d689e924010f6f95b22894414f0b96c4aa0.zip | |
update grapher/wrapper for st-refactor
| -rw-r--r-- | common/x64-util.hpp | 10 | ||||
| -rw-r--r-- | grapher/Form1.cs | 69 | ||||
| -rw-r--r-- | wrapper/wrapper.cpp | 5 | ||||
| -rw-r--r-- | wrapper/wrapper.hpp | 18 |
4 files changed, 89 insertions, 13 deletions
diff --git a/common/x64-util.hpp b/common/x64-util.hpp index 2fb61bb..40bc7c4 100644 --- a/common/x64-util.hpp +++ b/common/x64-util.hpp @@ -1,7 +1,13 @@ #pragma once -#include <emmintrin.h> +#ifdef _MANAGED + +#include <math.h> +inline double sqrtsd(double val) { return sqrt(val); } + +#else +#include <emmintrin.h> inline double sqrtsd(double val) { __m128d src = _mm_load_sd(&val); __m128d dst = _mm_sqrt_sd(src, src); @@ -9,6 +15,8 @@ inline double sqrtsd(double val) { return val; } +#endif + inline constexpr double minsd(double a, double b) { return (a < b) ? a : b; } diff --git a/grapher/Form1.cs b/grapher/Form1.cs index 495640e..47ef1d9 100644 --- a/grapher/Form1.cs +++ b/grapher/Form1.cs @@ -7,15 +7,82 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; +using System.Runtime.InteropServices; namespace grapher { + public enum accel_mode + { + linear=1, classic, natural, logarithmic, sigmoid, power, noaccel + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + public struct vec2d + { + public double x; + public double y; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + public struct accel_args + { + public double offset; + public double accel; + public double limit; + public double exponent; + public double midpoint; + public double power_scale; + public vec2d weight; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + public struct accel_fn_args + { + public accel_args acc_args; + public int accel_mode; + public double time_min; + public vec2d cap; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + public struct modifier_args + { + public double degrees; + public vec2d sens; + public accel_fn_args acc_fn_args; + } + public partial class RawAcceleration : Form { public RawAcceleration() { InitializeComponent(); - var managedAccel = new ManagedAccel(5, 0, 0.3, 1.25, 15); + + modifier_args args; + + args.degrees = 0; + args.sens.x = 1; + args.sens.y = 1; + args.acc_fn_args.acc_args.offset = 0; + args.acc_fn_args.acc_args.accel = 0.01; + args.acc_fn_args.acc_args.limit = 2; + args.acc_fn_args.acc_args.exponent = 1; + args.acc_fn_args.acc_args.midpoint = 0; + args.acc_fn_args.acc_args.power_scale = 1; + args.acc_fn_args.acc_args.weight.x = 1; + args.acc_fn_args.acc_args.weight.y = 1; + args.acc_fn_args.accel_mode = (int)accel_mode.natural; + args.acc_fn_args.time_min = 0.4; + args.acc_fn_args.cap.x = 0; + args.acc_fn_args.cap.y = 0; + + IntPtr args_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(args)); + Marshal.StructureToPtr(args, args_ptr, false); + + var managedAccel = new ManagedAccel(args_ptr); + + Marshal.FreeHGlobal(args_ptr); + var orderedPoints = new SortedDictionary<double, double>(); for (int i = 0; i < 100; i++) diff --git a/wrapper/wrapper.cpp b/wrapper/wrapper.cpp index c1cc570..26d05ec 100644 --- a/wrapper/wrapper.cpp +++ b/wrapper/wrapper.cpp @@ -7,7 +7,10 @@ using namespace System; Tuple<double, double>^ ManagedAccel::Accelerate(int x, int y, double time) { - vec2d input_vec2d = {x, y}; + vec2d input_vec2d = { + (double)x, + (double)y + }; vec2d output = (*modifier_instance).modify_with_accel(input_vec2d, (milliseconds)time); return gcnew Tuple<double, double>(output.x, output.y); diff --git a/wrapper/wrapper.hpp b/wrapper/wrapper.hpp index 19b0987..42f5865 100644 --- a/wrapper/wrapper.hpp +++ b/wrapper/wrapper.hpp @@ -1,11 +1,16 @@ #pragma once #include "..\common\rawaccel.hpp"; -#include "..\common\error.hpp"; +#include "..\common\accel-error.hpp"; #include <iostream> using namespace rawaccel; using namespace System; + +public value struct ArgsWrapper { + int a; +}; + public ref class ManagedAccel { protected: @@ -16,16 +21,9 @@ public: { } - ManagedAccel(int mode, double offset, double accel, double lim_exp, double midpoint) + ManagedAccel(System::IntPtr args) { - modifier_args args{}; - args.acc_fn_args.acc_args.accel = accel; - args.acc_fn_args.acc_args.lim_exp = lim_exp; - args.acc_fn_args.acc_args.midpoint = midpoint; - args.acc_fn_args.accel_mode = mode; - args.acc_fn_args.acc_args.offset = offset; - - modifier_instance = new mouse_modifier(args); + modifier_instance = new mouse_modifier(*reinterpret_cast<modifier_args*>(args.ToPointer())); } virtual ~ManagedAccel() |