summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authora1xd <[email protected]>2020-07-31 04:52:24 -0400
committera1xd <[email protected]>2020-07-31 04:52:24 -0400
commitf7c88d689e924010f6f95b22894414f0b96c4aa0 (patch)
treefe64110f7678607947d19c5ba0b46ea2b15d69c4
parentadd more tweaks for st-refactor (diff)
downloadrawaccel-f7c88d689e924010f6f95b22894414f0b96c4aa0.tar.xz
rawaccel-f7c88d689e924010f6f95b22894414f0b96c4aa0.zip
update grapher/wrapper for st-refactor
-rw-r--r--common/x64-util.hpp10
-rw-r--r--grapher/Form1.cs69
-rw-r--r--wrapper/wrapper.cpp5
-rw-r--r--wrapper/wrapper.hpp18
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()