Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2dc4499984
|
||
|
|
e21d92a3ca
|
||
|
|
1db86d9778
|
||
|
|
0de86b508a
|
||
|
|
65a96a462b
|
||
|
|
6b7c28c379
|
||
|
|
af0be8c1f7
|
||
|
|
49a12f64a4
|
||
|
|
76d03b1fe8
|
||
|
|
d8ae5923d5
|
||
|
|
befb07470e
|
||
|
|
b467c679de
|
||
|
|
9afbd8e54f
|
@@ -5,6 +5,75 @@ All notable changes to this project will be documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [2.0.8] - 2024-07-15
|
||||
|
||||
This is a bugfix release that contains a somewhat important bugfix backported from the next release of the plugin as documented below.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix a bug where the SGPawn right-hand grab colliders' default size is mistakenly set to the default value for the left-hand grab colliders at CDO initialization time.
|
||||
|
||||
## [2.0.7] - 2024-05-29
|
||||
|
||||
This is a bugfix release with no actual plugin code changes, only fixing issues with binary assets incompatible with UE versions earlier than 5.4.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Make the Allbreaker assets compatible with UE5.1+ again as the v2.0.5 update breaks compatibility with UE versions earlier than 5.4, thus leaving the engine unable to load those assets.
|
||||
|
||||
## [2.0.6] - 2024-05-29
|
||||
|
||||
This is a bugfix release with no actual plugin code changes, only removing development/test assets from UE 5.3 that were never meant to be shipped.
|
||||
|
||||
### Removed
|
||||
|
||||
- Removed the dev/test virtual hand models that leaked into the 5.3 branch.
|
||||
|
||||
### Fixed
|
||||
|
||||
## [2.0.5] - 2024-05-22
|
||||
|
||||
This is a bugfix release with no actual plugin code changes, only focusing on fixing the Allbreaker virtual hand model issues.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix the wrong palm bone names on the Allbreaker virtual hand models.
|
||||
|
||||
## [2.0.4] - 2024-05-17
|
||||
|
||||
This is a bugfix release with no actual plugin's code change.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix our in-house Unreal Engine Marketplace submission tool's configurations where the Content folder (containing the Allbreaker hand model) is mistakenly ignored during the submission. This release reintroduces the Virtual Hand Model and its material missing from the previous release.
|
||||
- Fix the SenseGlove.uproject's wrong versioning submitted to the Unreal Engine Marketplace.
|
||||
|
||||
## [2.0.3] - 2024-05-15
|
||||
|
||||
This is a bugfix release addressing mostly RunUAT build issues on Unreal Engine 5.4.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix UE 5.4 RunUAT build issue: "Asking CppCompileEnvironment for a single Architecture, but it has multiple Architectures (arm64, x64)", affecting SenseGloveConnectImpl and SenseGloveCoreImpl modues.
|
||||
- Improved target platform detection when building SenseGloveConnectImpl and SenseGloveCoreImpl modules and also distinguishing the x64 builds from arm64 on Microsoft Windows.
|
||||
- Fix other UE 5.4 RunUAT build issues, mostly caused by missing headers.
|
||||
|
||||
### Removed
|
||||
|
||||
- Removed support for Android armeabi-v7a and x86 architectures as they are no longer supported by the supported engine versions.
|
||||
|
||||
## [2.0.2] - 2024-04-25
|
||||
|
||||
This is a patch release with no code changes.
|
||||
|
||||
### Added
|
||||
|
||||
- Introduce official Unreal Engine 5.4 support to the Unreal Engine Marketplace.
|
||||
|
||||
### Changed
|
||||
|
||||
- Updated the Platform Support Matrix with the latest changes. This is the last release to support Unreal Engine 5.1 as we no longer are able to push updates for this release to the Unreal Engine Marketplace. The v2.0.1 release for Unreal Engine 5.1 can be obtained from the Unreal Engine Marketplace, and v2.0.2 through our Microsoft Azure DevOps repositories. Please note that there are no actual code changes between these two releases and in terms of functionality they are almost identical.
|
||||
|
||||
## [2.0.1] - 2024-04-15
|
||||
|
||||
This is a bugfix release.
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -8,10 +8,10 @@ This repository relies on Git LFS for storing binary blobs (e.g. third-party lib
|
||||
|
||||
| | **Windows (MSVC 2017)** | **Windows (MSVC 2019)** | **Windows (MSVC 2022)** | **Linux x86-64 (Native Toolchain)** | **Linux AArch64 (Native Toolchain)** | **Android (NDK)** | **UE Marketplace Version** | **Azure DevOps Version** |
|
||||
|----------|:-----------------------:|:-----------------------:|:-----------------------:|:-----------------------------------:|:------------------------------------:|:-----------------:|:--------------------------:|:------------------------:|
|
||||
| **5.4** | ❌ | ❌ | ✅ v2.0.x | ✅ v2.0.x | ✅ v2.0.x | ✅ v2.0.x (r25b) | ❌ | ✅ v2.0.1 |
|
||||
| **5.3** | ❌ | ✅ v2.0.x | ✅ v2.0.x | ✅ v2.0.x | ✅ v2.0.x | ✅ v2.0.x (r25b) | ✅ v2.0.1 | ✅ v2.0.1 |
|
||||
| **5.2** | ❌ | ✅ v2.0.x | ✅ v2.0.x | ✅ v2.0.x | ✅ v2.0.x | ✅ v2.0.x (r25b) | ✅ v2.0.1 | ✅ v2.0.1 |
|
||||
| **5.1** | ❌ | ✅ v2.0.x | ✅ v2.0.x | ✅ v2.0.x | ✅ v2.0.x | ✅ v2.0.x (r25b) | ✅ v2.0.1 | ✅ v2.0.1 |
|
||||
| **5.4** | ❌ | ❌ | ✅ v2.0.x | ✅ v2.0.x | ✅ v2.0.x | ✅ v2.0.x (r25b) | ✅ v2.0.8 | ✅ v2.0.8 |
|
||||
| **5.3** | ❌ | ✅ v2.0.x | ✅ v2.0.x | ✅ v2.0.x | ✅ v2.0.x | ✅ v2.0.x (r25b) | ✅ v2.0.8 | ✅ v2.0.8 |
|
||||
| **5.2** | ❌ | ✅ v2.0.x | ✅ v2.0.x | ✅ v2.0.x | ✅ v2.0.x | ✅ v2.0.x (r25b) | ✅ v2.0.8 | ✅ v2.0.8 |
|
||||
| **5.1** | ❌ | ⚠️ v2.0.x | ⚠️ v2.0.x | ⚠️ v2.0.x | ⚠️ v2.0.x | ⚠️ v2.0.x (r25b) | ⚠️ v2.0.1 | ⚠️ v2.0.2 |
|
||||
| **5.0** | ❌ | ⚠️ v1.6.x | ⚠️ v1.6.x | ⚠️ v1.6.x | ⚠️ v1.6.x | ⚠️ v1.6.x (r21e) | ⚠️ v1.6.1 | ⚠️ v1.6.1 |
|
||||
| **4.27** | ⚠️ v1.4.x | ⚠️ v1.4.x | ⚠️ v1.4.x | ⚠️ v1.4.x | ⚠️ v1.4.x | ⚠️ v1.4.x (r21e) | ⚠️ v1.3.1 | ⚠️ v1.4.3 |
|
||||
| **4.26** | ⚠️ v1.0.x | ⚠️ v1.0.x | ❌ | ⚠️ v1.0.x | ❌ | ❌ | ❌ | ⚠️ v1.0.4 |
|
||||
@@ -54,7 +54,7 @@ Please note that modules postfixed with **Impl** are intended for interal use an
|
||||
|
||||
## Planned Features Completion Status
|
||||
|
||||
### Implemented as of v2.0.1
|
||||
### Implemented as of v2.0.8
|
||||
|
||||
- [X] Full SenseGlove low-level core API access through Unreal C++.
|
||||
- [X] Full SenseGlove low-level core API access through Blueprint.
|
||||
@@ -84,7 +84,15 @@ Please note that modules postfixed with **Impl** are intended for interal use an
|
||||
|
||||
### Upcoming features planned for the v2.1.0 release
|
||||
|
||||
- [ ] Hand tracking compatible with OpenXR (or other generic hand tracking format).
|
||||
- [ ] A fallback to HMD and wrist tracker hardware auto-detection mechanism when automatic detection of the wrist tracker hardware is desired.
|
||||
- [ ] OpenXR-compatible hand tracking (XR_EXT_hand_tracking) support.
|
||||
- [ ] FXRMotionControllerData compatible hand animation system.
|
||||
- [ ] FXRMotionControllerData compatible wrist tracking system.
|
||||
- [ ] FXRMotionControllerData compatible hand interaction manipulation system.
|
||||
- [ ] Ability to fallback to hand tracking when a glove is not present and use the bare hands for interactions, or a combination of glove and hand tracking if no motion controller input is detected.
|
||||
- [ ] The SenseGlove grab/touch sockets one-click-setup ability on any Epic-compliant virtual hand mesh from within the Unreal Editor's Content Browser, Skeleton Editor, or Skeletal Mesh Editor.
|
||||
- [ ] A flexible virtual hand animation system that can take the mesh bone's transforms into account for a more reliable hand animation.
|
||||
- [ ] Ability to manage the Engine Scalability Settings through the SenseGlove plugin in order to change the graphics settings on the fly.
|
||||
|
||||
### Planned features long-term
|
||||
|
||||
@@ -177,19 +185,7 @@ Please note that modules postfixed with **Impl** are intended for interal use an
|
||||
│ │ │
|
||||
│ │ └── release
|
||||
│ │
|
||||
│ ├── armv7 (32-bit ARM variant of Android)
|
||||
│ │ │
|
||||
│ │ ├── debug
|
||||
│ │ │
|
||||
│ │ └── release
|
||||
│ │
|
||||
│ ├── x64 (64-bit x86-64 variant of Android)
|
||||
│ │ │
|
||||
│ │ ├── debug
|
||||
│ │ │
|
||||
│ │ └── release
|
||||
│ │
|
||||
│ └── x86 (32-bit x86 variant of Android)
|
||||
│ └── x64 (64-bit x86-64 variant of Android)
|
||||
│ │
|
||||
│ ├── debug
|
||||
│ │
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"FileVersion": 3,
|
||||
"Version": 1,
|
||||
"VersionName": "2.0.1",
|
||||
"VersionName": "2.0.8",
|
||||
"FriendlyName": "SenseGlove",
|
||||
"Description": "Integrating the SenseGlove haptic controller into Unreal Engine",
|
||||
"Category": "Virtual Reality",
|
||||
|
||||
@@ -35,6 +35,8 @@
|
||||
|
||||
#include "SenseGlove/Components/SGGrabComponent.h"
|
||||
|
||||
#include "GameFramework/Actor.h"
|
||||
|
||||
struct USGGrabComponent::FImpl
|
||||
{
|
||||
/************************
|
||||
|
||||
@@ -35,6 +35,8 @@
|
||||
|
||||
#include "SenseGlove/Components/SGTouchComponent.h"
|
||||
|
||||
#include "GameFramework/Actor.h"
|
||||
|
||||
struct USGTouchComponent::FImpl
|
||||
{
|
||||
/************************
|
||||
|
||||
@@ -468,7 +468,7 @@ ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
|
||||
|
||||
RightThumbFingertipGrabCollider = ObjectInitializer.CreateDefaultSubobject<USphereComponent>(
|
||||
this, TEXT("RightThumbFingertipGrabCollider"));
|
||||
RightThumbFingertipGrabCollider->SetRelativeScale3D(HandLeft->GetDefaultFingertipsGrabColliderSize());
|
||||
RightThumbFingertipGrabCollider->SetRelativeScale3D(HandRight->GetDefaultFingertipsGrabColliderSize());
|
||||
RightThumbFingertipGrabCollider->SetupAttachment(HandRight, HandRight->GetThumbFingertipGrabSocketName());
|
||||
RightThumbFingertipGrabCollider->SetCastShadow(false);
|
||||
RightThumbFingertipGrabCollider->bCastDynamicShadow = false;
|
||||
@@ -488,7 +488,7 @@ ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
|
||||
|
||||
RightIndexFingertipGrabCollider = ObjectInitializer.CreateDefaultSubobject<USphereComponent>(
|
||||
this, TEXT("RightIndexFingertipGrabCollider"));
|
||||
RightIndexFingertipGrabCollider->SetRelativeScale3D(HandLeft->GetDefaultFingertipsGrabColliderSize());
|
||||
RightIndexFingertipGrabCollider->SetRelativeScale3D(HandRight->GetDefaultFingertipsGrabColliderSize());
|
||||
RightIndexFingertipGrabCollider->SetupAttachment(HandRight, HandRight->GetIndexFingertipGrabSocketName());
|
||||
RightIndexFingertipGrabCollider->SetCastShadow(false);
|
||||
RightIndexFingertipGrabCollider->bCastDynamicShadow = false;
|
||||
@@ -508,7 +508,7 @@ ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
|
||||
|
||||
RightMiddleFingertipGrabCollider = ObjectInitializer.CreateDefaultSubobject<USphereComponent>(
|
||||
this, TEXT("RightMiddleFingertipGrabCollider"));
|
||||
RightMiddleFingertipGrabCollider->SetRelativeScale3D(HandLeft->GetDefaultFingertipsGrabColliderSize());
|
||||
RightMiddleFingertipGrabCollider->SetRelativeScale3D(HandRight->GetDefaultFingertipsGrabColliderSize());
|
||||
RightMiddleFingertipGrabCollider->SetupAttachment(HandRight, HandRight->GetMiddleFingertipGrabSocketName());
|
||||
RightMiddleFingertipGrabCollider->SetCastShadow(false);
|
||||
RightMiddleFingertipGrabCollider->bCastDynamicShadow = false;
|
||||
|
||||
@@ -50,6 +50,8 @@
|
||||
#include "SGInterop/SGIC_JNIEnv_Ptr.h"
|
||||
#endif /* PLATFORM_ANDROID */
|
||||
|
||||
#include "SGLog/SGLog.h"
|
||||
|
||||
int32 FSGConnectJNI::Initialize()
|
||||
{
|
||||
int32 Result = -999999;
|
||||
|
||||
@@ -37,6 +37,8 @@
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "Containers/StringConv.h"
|
||||
|
||||
#include "SGBuildHacks/SGInclude_Connect_SGConnect.h"
|
||||
|
||||
int32 FSGConnectImpl::Init()
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
|
||||
#include "SGConnectImpl/SGExportedFunctions.h"
|
||||
|
||||
#include "Containers/StringConv.h"
|
||||
#include "Templates/UnrealTemplate.h"
|
||||
|
||||
#if PLATFORM_ANDROID
|
||||
|
||||
@@ -81,70 +81,28 @@ public class SenseGloveConnectImpl : ModuleRules
|
||||
string SourceDirectory = Path.GetFullPath(Path.Combine(PluginRootDirectory, "Source"));
|
||||
string ThirdPartyDirectory = Path.GetFullPath(Path.Combine(SourceDirectory, "ThirdParty"));
|
||||
string LibraryPath = Path.GetFullPath(Path.Combine(ThirdPartyDirectory, "lib"));
|
||||
string LibraryPathAnroidArm64 = "";
|
||||
string LibraryPathAnroidx64 = "";
|
||||
string LibraryName = "sgconnect";
|
||||
|
||||
if (Target.Platform == UnrealTargetPlatform.Android)
|
||||
bool bIsAndroid = Target.IsInPlatformGroup(UnrealPlatformGroup.Android);
|
||||
bool bIsLinux = Target.Platform == UnrealTargetPlatform.Linux;
|
||||
bool bIsLinuxArm64 = Target.Platform == UnrealTargetPlatform.LinuxArm64;
|
||||
bool bIsWin64 = Target.IsInPlatformGroup(UnrealPlatformGroup.Windows) &&
|
||||
Target.WindowsPlatform.Architecture == UnrealArch.X64;
|
||||
bool bIsDebugBuild = (Target.Configuration == UnrealTargetConfiguration.Debug);
|
||||
|
||||
if (bIsAndroid)
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "android"));
|
||||
|
||||
#if UE_5_1_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "r25b"));
|
||||
#elif UE_5_0_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "r21e"));
|
||||
#else
|
||||
Debug.Assert(false, "Developing for Android on UE versions older than 5.0 is not supported!");
|
||||
#endif
|
||||
|
||||
#if UE_5_2_OR_LATER
|
||||
if (Target.Architecture == UnrealArch.Arm64)
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "arm64"));
|
||||
}
|
||||
else if (Target.Architecture == UnrealArch.X64)
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "x64"));
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Assert(false, "Unsupported Android architecture!");
|
||||
}
|
||||
#else
|
||||
IAndroidToolChain ToolChain = AndroidExports.CreateToolChain(Target.ProjectFile);
|
||||
List<string> Architectures = ToolChain.GetAllArchitectures();
|
||||
|
||||
foreach (string Arch in Architectures)
|
||||
{
|
||||
if (Arch == "-arm64")
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "arm64"));
|
||||
break;
|
||||
}
|
||||
else if (Arch == "-armv7")
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "armv7"));
|
||||
break;
|
||||
}
|
||||
else if (Arch == "-x64")
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "x64"));
|
||||
break;
|
||||
}
|
||||
else if (Arch == "-86")
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "x86"));
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Assert(false, "Unsupported Android architecture!");
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
LibraryPathAnroidArm64 = Path.GetFullPath(Path.Combine(LibraryPath, "arm64"));
|
||||
LibraryPathAnroidx64 = Path.GetFullPath(Path.Combine(LibraryPath, "x64"));
|
||||
|
||||
LibraryName = string.Format("lib{0}.a", LibraryName);
|
||||
}
|
||||
else if (Target.Platform == UnrealTargetPlatform.Linux)
|
||||
else if (bIsLinux)
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux"));
|
||||
LibraryName = string.Format("lib{0}.a", LibraryName);
|
||||
@@ -161,11 +119,7 @@ public class SenseGloveConnectImpl : ModuleRules
|
||||
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "x86-64"));
|
||||
}
|
||||
#if UE_5_0_OR_LATER
|
||||
else if (Target.Platform == UnrealTargetPlatform.LinuxArm64)
|
||||
#else
|
||||
else if (Target.Platform == UnrealTargetPlatform.LinuxAArch64)
|
||||
#endif
|
||||
else if (bIsLinuxArm64)
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux"));
|
||||
LibraryName = string.Format("lib{0}.a", LibraryName);
|
||||
@@ -182,7 +136,7 @@ public class SenseGloveConnectImpl : ModuleRules
|
||||
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "aarch64"));
|
||||
}
|
||||
else if (Target.Platform == UnrealTargetPlatform.Win64)
|
||||
else if (bIsWin64)
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "win64"));
|
||||
switch (Target.WindowsPlatform.Compiler)
|
||||
@@ -209,21 +163,42 @@ public class SenseGloveConnectImpl : ModuleRules
|
||||
Debug.Assert(false, "Unsupported platform!");
|
||||
}
|
||||
|
||||
bool bDebug = (Target.Configuration == UnrealTargetConfiguration.Debug);
|
||||
if (bDebug)
|
||||
string IncludePath = Path.GetFullPath(Path.Combine(ThirdPartyDirectory, "include"));
|
||||
PrivateIncludePaths.Add(IncludePath);
|
||||
|
||||
if (bIsAndroid)
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "debug"));
|
||||
if (bIsDebugBuild)
|
||||
{
|
||||
LibraryPathAnroidArm64 = Path.GetFullPath(Path.Combine(LibraryPathAnroidArm64, "debug"));
|
||||
LibraryPathAnroidx64 = Path.GetFullPath(Path.Combine(LibraryPathAnroidx64, "debug"));
|
||||
}
|
||||
else
|
||||
{
|
||||
LibraryPathAnroidArm64 = Path.GetFullPath(Path.Combine(LibraryPathAnroidArm64, "release"));
|
||||
LibraryPathAnroidx64 = Path.GetFullPath(Path.Combine(LibraryPathAnroidx64, "release"));
|
||||
}
|
||||
|
||||
LibraryPathAnroidArm64 = Path.GetFullPath(Path.Combine(LibraryPathAnroidArm64, LibraryName));
|
||||
LibraryPathAnroidx64 = Path.GetFullPath(Path.Combine(LibraryPathAnroidx64, LibraryName));
|
||||
|
||||
PublicAdditionalLibraries.Add(LibraryPathAnroidArm64);
|
||||
PublicAdditionalLibraries.Add(LibraryPathAnroidx64);
|
||||
}
|
||||
else
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "release"));
|
||||
if (bIsDebugBuild)
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "debug"));
|
||||
}
|
||||
else
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "release"));
|
||||
}
|
||||
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, LibraryName));
|
||||
PublicAdditionalLibraries.Add(LibraryPath);
|
||||
}
|
||||
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, LibraryName));
|
||||
string IncludePath = Path.GetFullPath(Path.Combine(ThirdPartyDirectory, "include"));
|
||||
|
||||
PrivateIncludePaths.Add(IncludePath);
|
||||
PublicAdditionalLibraries.Add(LibraryPath);
|
||||
}
|
||||
|
||||
private void AddSerialLibrary(ReadOnlyTargetRules Target)
|
||||
@@ -232,70 +207,28 @@ public class SenseGloveConnectImpl : ModuleRules
|
||||
string SourceDirectory = Path.GetFullPath(Path.Combine(PluginRootDirectory, "Source"));
|
||||
string ThirdPartyDirectory = Path.GetFullPath(Path.Combine(SourceDirectory, "ThirdParty"));
|
||||
string LibraryPath = Path.GetFullPath(Path.Combine(ThirdPartyDirectory, "lib"));
|
||||
string LibraryPathAnroidArm64 = "";
|
||||
string LibraryPathAnroidx64 = "";
|
||||
string LibraryName = "serial";
|
||||
|
||||
if (Target.Platform == UnrealTargetPlatform.Android)
|
||||
bool bIsAndroid = Target.IsInPlatformGroup(UnrealPlatformGroup.Android);
|
||||
bool bIsLinux = Target.Platform == UnrealTargetPlatform.Linux;
|
||||
bool bIsLinuxArm64 = Target.Platform == UnrealTargetPlatform.LinuxArm64;
|
||||
bool bIsWin64 = Target.IsInPlatformGroup(UnrealPlatformGroup.Windows) &&
|
||||
Target.WindowsPlatform.Architecture == UnrealArch.X64;
|
||||
bool bIsDebugBuild = (Target.Configuration == UnrealTargetConfiguration.Debug);
|
||||
|
||||
if (bIsAndroid)
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "android"));
|
||||
|
||||
#if UE_5_1_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "r25b"));
|
||||
#elif UE_4_5_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "r21e"));
|
||||
#else
|
||||
Debug.Assert(false, "Developing for Android on UE versions older than 5.0 is not supported!");
|
||||
#endif
|
||||
|
||||
#if UE_5_2_OR_LATER
|
||||
if (Target.Architecture == UnrealArch.Arm64)
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "arm64"));
|
||||
}
|
||||
else if (Target.Architecture == UnrealArch.X64)
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "x64"));
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Assert(false, "Unsupported Android architecture!");
|
||||
}
|
||||
#else
|
||||
IAndroidToolChain ToolChain = AndroidExports.CreateToolChain(Target.ProjectFile);
|
||||
List<string> Architectures = ToolChain.GetAllArchitectures();
|
||||
|
||||
foreach (string Arch in Architectures)
|
||||
{
|
||||
if (Arch == "-arm64")
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "arm64"));
|
||||
break;
|
||||
}
|
||||
else if (Arch == "-armv7")
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "armv7"));
|
||||
break;
|
||||
}
|
||||
else if (Arch == "-x64")
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "x64"));
|
||||
break;
|
||||
}
|
||||
else if (Arch == "-86")
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "x86"));
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Assert(false, "Unsupported Android architecture!");
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
LibraryPathAnroidArm64 = Path.GetFullPath(Path.Combine(LibraryPath, "arm64"));
|
||||
LibraryPathAnroidx64 = Path.GetFullPath(Path.Combine(LibraryPath, "x64"));
|
||||
|
||||
LibraryName = string.Format("lib{0}.a", LibraryName);
|
||||
}
|
||||
else if (Target.Platform == UnrealTargetPlatform.Linux)
|
||||
else if (bIsLinux)
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux"));
|
||||
LibraryName = string.Format("lib{0}.a", LibraryName);
|
||||
@@ -312,11 +245,7 @@ public class SenseGloveConnectImpl : ModuleRules
|
||||
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "x86-64"));
|
||||
}
|
||||
#if UE_5_0_OR_LATER
|
||||
else if (Target.Platform == UnrealTargetPlatform.LinuxArm64)
|
||||
#else
|
||||
else if (Target.Platform == UnrealTargetPlatform.LinuxAArch64)
|
||||
#endif
|
||||
else if (bIsLinuxArm64)
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux"));
|
||||
LibraryName = string.Format("lib{0}.a", LibraryName);
|
||||
@@ -333,7 +262,7 @@ public class SenseGloveConnectImpl : ModuleRules
|
||||
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "aarch64"));
|
||||
}
|
||||
else if (Target.Platform == UnrealTargetPlatform.Win64)
|
||||
else if (bIsWin64)
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "win64"));
|
||||
switch (Target.WindowsPlatform.Compiler)
|
||||
@@ -360,20 +289,41 @@ public class SenseGloveConnectImpl : ModuleRules
|
||||
Debug.Assert(false, "Unsupported platform!");
|
||||
}
|
||||
|
||||
bool bDebug = (Target.Configuration == UnrealTargetConfiguration.Debug);
|
||||
if (bDebug)
|
||||
string IncludePath = Path.GetFullPath(Path.Combine(ThirdPartyDirectory, "include"));
|
||||
PrivateIncludePaths.Add(IncludePath);
|
||||
|
||||
if (bIsAndroid)
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "debug"));
|
||||
if (bIsDebugBuild)
|
||||
{
|
||||
LibraryPathAnroidArm64 = Path.GetFullPath(Path.Combine(LibraryPathAnroidArm64, "debug"));
|
||||
LibraryPathAnroidx64 = Path.GetFullPath(Path.Combine(LibraryPathAnroidx64, "debug"));
|
||||
}
|
||||
else
|
||||
{
|
||||
LibraryPathAnroidArm64 = Path.GetFullPath(Path.Combine(LibraryPathAnroidArm64, "release"));
|
||||
LibraryPathAnroidx64 = Path.GetFullPath(Path.Combine(LibraryPathAnroidx64, "release"));
|
||||
}
|
||||
|
||||
LibraryPathAnroidArm64 = Path.GetFullPath(Path.Combine(LibraryPathAnroidArm64, LibraryName));
|
||||
LibraryPathAnroidx64 = Path.GetFullPath(Path.Combine(LibraryPathAnroidx64, LibraryName));
|
||||
|
||||
PublicAdditionalLibraries.Add(LibraryPathAnroidArm64);
|
||||
PublicAdditionalLibraries.Add(LibraryPathAnroidx64);
|
||||
}
|
||||
else
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "release"));
|
||||
if (bIsDebugBuild)
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "debug"));
|
||||
}
|
||||
else
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "release"));
|
||||
}
|
||||
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, LibraryName));
|
||||
PublicAdditionalLibraries.Add(LibraryPath);
|
||||
}
|
||||
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, LibraryName));
|
||||
string IncludePath = Path.GetFullPath(Path.Combine(ThirdPartyDirectory, "include"));
|
||||
|
||||
PrivateIncludePaths.Add(IncludePath);
|
||||
PublicAdditionalLibraries.Add(LibraryPath);
|
||||
}
|
||||
}
|
||||
@@ -35,6 +35,8 @@
|
||||
|
||||
#include "SGCore/SGDeviceList.h"
|
||||
|
||||
#include "Templates/SubclassOf.h"
|
||||
|
||||
#include "SGCore/SGBetaDevice.h"
|
||||
#include "SGCore/SGDevice.h"
|
||||
#include "SGCore/SGDeviceImplCast.h"
|
||||
|
||||
@@ -80,70 +80,28 @@ public class SenseGloveCoreImpl : ModuleRules
|
||||
string SourceDirectory = Path.GetFullPath(Path.Combine(PluginRootDirectory, "Source"));
|
||||
string ThirdPartyDirectory = Path.GetFullPath(Path.Combine(SourceDirectory, "ThirdParty"));
|
||||
string LibraryPath = Path.GetFullPath(Path.Combine(ThirdPartyDirectory, "lib"));
|
||||
string LibraryPathAnroidArm64 = "";
|
||||
string LibraryPathAnroidx64 = "";
|
||||
string LibraryName = "sgcore";
|
||||
|
||||
if (Target.Platform == UnrealTargetPlatform.Android)
|
||||
bool bIsAndroid = Target.IsInPlatformGroup(UnrealPlatformGroup.Android);
|
||||
bool bIsLinux = Target.Platform == UnrealTargetPlatform.Linux;
|
||||
bool bIsLinuxArm64 = Target.Platform == UnrealTargetPlatform.LinuxArm64;
|
||||
bool bIsWin64 = Target.IsInPlatformGroup(UnrealPlatformGroup.Windows) &&
|
||||
Target.WindowsPlatform.Architecture == UnrealArch.X64;
|
||||
bool bIsDebugBuild = (Target.Configuration == UnrealTargetConfiguration.Debug);
|
||||
|
||||
if (bIsAndroid)
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "android"));
|
||||
|
||||
#if UE_5_1_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "r25b"));
|
||||
#elif UE_5_0_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "r21e"));
|
||||
#else
|
||||
Debug.Assert(false, "Developing for Android on UE versions older than 5.0 is not supported!");
|
||||
#endif
|
||||
|
||||
#if UE_5_2_OR_LATER
|
||||
if (Target.Architecture == UnrealArch.Arm64)
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "arm64"));
|
||||
}
|
||||
else if (Target.Architecture == UnrealArch.X64)
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "x64"));
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Assert(false, "Unsupported Android architecture!");
|
||||
}
|
||||
#else
|
||||
IAndroidToolChain ToolChain = AndroidExports.CreateToolChain(Target.ProjectFile);
|
||||
List<string> Architectures = ToolChain.GetAllArchitectures();
|
||||
|
||||
foreach (string Arch in Architectures)
|
||||
{
|
||||
if (Arch == "-arm64")
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "arm64"));
|
||||
break;
|
||||
}
|
||||
else if (Arch == "-armv7")
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "armv7"));
|
||||
break;
|
||||
}
|
||||
else if (Arch == "-x64")
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "x64"));
|
||||
break;
|
||||
}
|
||||
else if (Arch == "-86")
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "x86"));
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Assert(false, "Unsupported Android architecture!");
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
LibraryPathAnroidArm64 = Path.GetFullPath(Path.Combine(LibraryPath, "arm64"));
|
||||
LibraryPathAnroidx64 = Path.GetFullPath(Path.Combine(LibraryPath, "x64"));
|
||||
|
||||
LibraryName = string.Format("lib{0}.a", LibraryName);
|
||||
}
|
||||
else if (Target.Platform == UnrealTargetPlatform.Linux)
|
||||
else if (bIsLinux)
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux"));
|
||||
LibraryName = string.Format("lib{0}.a", LibraryName);
|
||||
@@ -160,11 +118,7 @@ public class SenseGloveCoreImpl : ModuleRules
|
||||
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "x86-64"));
|
||||
}
|
||||
#if UE_5_0_OR_LATER
|
||||
else if (Target.Platform == UnrealTargetPlatform.LinuxArm64)
|
||||
#else
|
||||
else if (Target.Platform == UnrealTargetPlatform.LinuxAArch64)
|
||||
#endif
|
||||
else if (bIsLinuxArm64)
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux"));
|
||||
LibraryName = string.Format("lib{0}.a", LibraryName);
|
||||
@@ -181,7 +135,7 @@ public class SenseGloveCoreImpl : ModuleRules
|
||||
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "aarch64"));
|
||||
}
|
||||
else if (Target.Platform == UnrealTargetPlatform.Win64)
|
||||
else if (bIsWin64)
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "win64"));
|
||||
switch (Target.WindowsPlatform.Compiler)
|
||||
@@ -200,6 +154,7 @@ public class SenseGloveCoreImpl : ModuleRules
|
||||
Debug.Assert(false, "Unsupported engine version or compiler!");
|
||||
break;
|
||||
}
|
||||
|
||||
LibraryName = string.Format("{0}.lib", LibraryName);
|
||||
}
|
||||
else
|
||||
@@ -207,20 +162,41 @@ public class SenseGloveCoreImpl : ModuleRules
|
||||
Debug.Assert(false, "Unsupported platform!");
|
||||
}
|
||||
|
||||
bool bDebug = (Target.Configuration == UnrealTargetConfiguration.Debug);
|
||||
if (bDebug)
|
||||
string IncludePath = Path.GetFullPath(Path.Combine(ThirdPartyDirectory, "include"));
|
||||
PrivateIncludePaths.Add(IncludePath);
|
||||
|
||||
if (bIsAndroid)
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "debug"));
|
||||
if (bIsDebugBuild)
|
||||
{
|
||||
LibraryPathAnroidArm64 = Path.GetFullPath(Path.Combine(LibraryPathAnroidArm64, "debug"));
|
||||
LibraryPathAnroidx64 = Path.GetFullPath(Path.Combine(LibraryPathAnroidx64, "debug"));
|
||||
}
|
||||
else
|
||||
{
|
||||
LibraryPathAnroidArm64 = Path.GetFullPath(Path.Combine(LibraryPathAnroidArm64, "release"));
|
||||
LibraryPathAnroidx64 = Path.GetFullPath(Path.Combine(LibraryPathAnroidx64, "release"));
|
||||
}
|
||||
|
||||
LibraryPathAnroidArm64 = Path.GetFullPath(Path.Combine(LibraryPathAnroidArm64, LibraryName));
|
||||
LibraryPathAnroidx64 = Path.GetFullPath(Path.Combine(LibraryPathAnroidx64, LibraryName));
|
||||
|
||||
PublicAdditionalLibraries.Add(LibraryPathAnroidArm64);
|
||||
PublicAdditionalLibraries.Add(LibraryPathAnroidx64);
|
||||
}
|
||||
else
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "release"));
|
||||
if (bIsDebugBuild)
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "debug"));
|
||||
}
|
||||
else
|
||||
{
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "release"));
|
||||
}
|
||||
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, LibraryName));
|
||||
PublicAdditionalLibraries.Add(LibraryPath);
|
||||
}
|
||||
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, LibraryName));
|
||||
string IncludePath = Path.GetFullPath(Path.Combine(ThirdPartyDirectory, "include"));
|
||||
|
||||
PrivateIncludePaths.Add(IncludePath);
|
||||
PublicAdditionalLibraries.Add(LibraryPath);
|
||||
}
|
||||
}
|
||||
@@ -35,6 +35,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "HAL/Platform.h"
|
||||
|
||||
#if PLATFORM_ANDROID
|
||||
#include "Android/AndroidJavaEnv.h"
|
||||
|
||||
|
||||
@@ -35,6 +35,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "HAL/Platform.h"
|
||||
|
||||
#if PLATFORM_ANDROID
|
||||
#include "Android/AndroidJavaEnv.h"
|
||||
|
||||
|
||||
@@ -35,6 +35,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "HAL/Platform.h"
|
||||
|
||||
#if PLATFORM_ANDROID
|
||||
#include "Android/AndroidJavaEnv.h"
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
|
||||
#include "ISettingsModule.h"
|
||||
#include "ISettingsSection.h"
|
||||
#include "Modules/ModuleManager.h"
|
||||
|
||||
#include "SGLog/SGLog.h"
|
||||
#include "SGSettings/SGSettings.h"
|
||||
|
||||
@@ -41,6 +41,9 @@
|
||||
#include "SGAngles.h"
|
||||
#include "Containers/Array.h"
|
||||
#include "Containers/StringConv.h"
|
||||
#include "Math/Quat.h"
|
||||
#include "Math/Rotator.h"
|
||||
#include "Math/Vector.h"
|
||||
#include "Templates/UnrealTemplate.h"
|
||||
|
||||
#include "SGUtils/SGUnits.h"
|
||||
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Reference in New Issue
Block a user