Add NX Hid Driver Template

- Add WIP HidNX Driver (clangd not working with devkitpro for switch on windows)
- Add default-release as default search path for compile_commands.json
- remove mingw preset (casue its exactly the default target)
- Move Mouse pos cycle into HidDriver::Update
- Test around with HidGlfw on Nintendo switch
This commit is contained in:
2026-04-05 04:20:32 +02:00
parent 1f7d96a455
commit 8a4b3c119d
9 changed files with 73 additions and 77 deletions

View File

@@ -1,4 +1,5 @@
CompileFlags:
CompilationDatabase: build/default-release
Add: []
Completion:

View File

@@ -9,7 +9,6 @@
"cmake/presets/default.json",
"cmake/presets/3ds.json",
"cmake/presets/switch.json",
"cmake/presets/mingw.json",
"cmake/presets/msvc.json"
]
}

View File

@@ -8,6 +8,7 @@ option(PD_ENABLE_DIRECTX9 "Enable DirectX9 Support" ON)
option(PD_ENABLE_CITRO3D "Enable Citro3D Support (3DS)" OFF)
option(PD_ENABLE_VULKAN "Not implemented yet" OFF)
option(PD_ENABLE_HID_GLFW "Enable GLFW Input Driver" ON)
option(PD_ENABLE_HID_NX "Enable NX Input Driver" OFF)
if(NOT WIN32) # cause we are not on windows...
set(PD_ENABLE_DIRECTX9 OFF)
@@ -17,13 +18,16 @@ if(${CMAKE_SYSTEM_NAME} STREQUAL "Nintendo3DS")
set(PD_ENABLE_OPENGL2 OFF)
set(PD_ENABLE_OPENGL3 OFF)
set(PD_ENABLE_VULKAN OFF)
set(PD_ENABLE_HID_GLFW OFF)
set(PD_ENABLE_CITRO3D ON)
set(PD_ENABLE_HID_GLFW OFF)
set(PD_ENABLE_HID_NX OFF)
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "NintendoSwitch")
set(PD_ENABLE_OPENGL2 OFF)
set(PD_ENABLE_OPENGL3 ON)
set(PD_ENABLE_VULKAN OFF)
set(PD_ENABLE_CITRO3D OFF)
set(PD_ENABLE_HID_NX ON) # Best case for Nintendo Switch
set(PD_ENABLE_HID_GLFW ON) # Technically supported but not recommended
endif()
add_library(pd-system STATIC
@@ -33,12 +37,15 @@ add_library(pd-system STATIC
${CMAKE_CURRENT_SOURCE_DIR}/source/gfx_directx9.cpp
${CMAKE_CURRENT_SOURCE_DIR}/source/gfx_citro3d.cpp
${CMAKE_CURRENT_SOURCE_DIR}/source/hid_glfw.cpp
${CMAKE_CURRENT_SOURCE_DIR}/source/hid_nx.cpp
)
target_include_directories(pd-system
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
# Why is this not a default include (same problem as with the __SWITCH__ define)
$<$<STREQUAL:${CMAKE_SYSTEM_NAME},NintendoSwitch>:${DEVKITPRO}/portlibs/switch/include>
)
target_compile_options(palladium
@@ -56,48 +63,24 @@ target_compile_definitions(pd-system
$<$<BOOL:${PD_ENABLE_DIRECTX9}>:PD_ENABLE_DIRECTX9>
$<$<BOOL:${PD_ENABLE_CITRO3D}>:PD_ENABLE_CITRO3D>
$<$<BOOL:${PD_ENABLE_HID_GLFW}>:PD_ENABLE_HID_GLFW>
$<$<BOOL:${PD_ENABLE_HID_NX}>:PD_ENABLE_HID_NX>
)
# Palladium
target_link_libraries(pd-system PUBLIC palladium::palladium)
# glad (if we have any OpenGL version included)
if(PD_ENABLE_OPENGL2 OR PD_ENABLE_OPENGL3)
target_link_libraries(pd-system
PUBLIC glad
)
endif()
# DirectX9
if(PD_ENABLE_DIRECTX9)
target_link_libraries(pd-system
PUBLIC
d3d9
d3dcompiler
)
endif()
# Depandant Lib includes (i love this cmake feature)
target_link_libraries(pd-system PUBLIC
$<$<BOOL:${PD_ENABLE_DIRECTX9}>:d3d9 d3dcompiler> # DirectX9
$<$<BOOL:${PD_ENABLE_CITRO3D}>:pica::pica citro3d ctru> # 3ds
$<$<BOOL:${PD_ENABLE_OPENGL3}>:spirv-helper> # OpenGL3
# Include Glad if we have any OpenGL Usage
$<$<OR:$<BOOL:${PD_ENABLE_OPENGL2}>,$<BOOL:${PD_ENABLE_OPENGL3}>>:glad>
$<$<BOOL:${PD_ENABLE_HID_NX}>:nx> # Hid NX requirement
# Hid GLFW requirement
$<$<BOOL:${PD_ENABLE_HID_GLFW}>:
$<$<STREQUAL:${CMAKE_SYSTEM_NAME},NintendoSwitch>:glfw3>
$<$<NOT:$<STREQUAL:${CMAKE_SYSTEM_NAME},NintendoSwitch>>:glfw>>
if(${CMAKE_SYSTEM_NAME} STREQUAL "Nintendo3DS")
target_link_libraries(pd-system
PUBLIC
pica::pica
citro3d
ctru
)
else()
if(${CMAKE_SYSTEM_NAME} STREQUAL "NintendoSwitch")
target_include_directories(pd-system
PUBLIC $ENV{DEVKITPRO}/portlibs/switch/include
)
if(PD_ENABLE_HID_GLFW)
target_link_libraries(pd-system PUBLIC glfw3) # use dkp glfw
endif()
else()
if(PD_ENABLE_HID_GLFW)
target_link_libraries(pd-system PUBLIC glfw) # use vendor glfw
endif()
endif()
target_link_libraries(pd-system
PUBLIC spirv-helper
)
endif()
)

View File

@@ -0,0 +1,17 @@
#pragma once
#include <pd/drivers/hid.hpp>
namespace PD {
class HidNX : public HidDriver {
public:
HidNX();
~HidNX();
void Update() override;
private:
struct Impl;
Impl* impl;
};
} // namespace PD

View File

@@ -78,7 +78,6 @@ void HidGlfw::Update() {
// }
double x, y;
glfwGetCursorPos(impl->Win, &x, &y);
pMouse[1] = pMouse[0]; // Cycle pMouse pos
pMouse[0] = fvec2(x, y);
}
} // namespace PD

View File

@@ -0,0 +1,31 @@
#include <pd_system/hid_nx.hpp>
#ifdef PD_ENABLE_HID_NX
#include <switch.h>
namespace PD {
struct HidNX::Impl {
PadState Pad;
};
HidNX::HidNX() : HidDriver("HidNX") { impl = new Impl; }
HidNX::~HidNX() {}
void HidNX::Update() {
HidDriver::Update(); // clear stats
}
} // namespace PD
#else
namespace PD {
HidNX::HidNX() : HidDriver("HidNX") {}
HidNX::~HidNX() {}
void HidNX::Update() {
HidDriver::Update(); // clear stats
}
} // namespace PD
#endif

View File

@@ -1,35 +0,0 @@
{
"version": 10,
"configurePresets": [
{
"name": "mingw-release",
"displayName": "MinGW",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/mingw-release",
"cacheVariables": {
"SPV_EXCLUDE_GLSLANG": "ON",
"CMAKE_BUILD_TYPE": "Release"
}
},
{
"name": "mingw-debug",
"displayName": "MinGW",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/mingw-debug",
"cacheVariables": {
"SPV_EXCLUDE_GLSLANG": "ON",
"CMAKE_BUILD_TYPE": "Debug"
}
}
],
"buildPresets": [
{
"name": "mingw-release",
"configurePreset": "mingw-release"
},
{
"name": "mingw-debug",
"configurePreset": "mingw-debug"
}
]
}

View File

@@ -43,5 +43,6 @@ PD_API void HidDriver::Update() {
it.second = 0; // ? why was this Event_Null
}
}
pMouse[1] = pMouse[0]; // cycle here
}
} // namespace PD

View File

@@ -29,7 +29,7 @@ void HorizonNX::Init() {
gladLoadGL();
glfwSwapInterval(1);
PD::Gfx::UseDriver<PD::GfxOpenGL3>();
PD::Hid::UseDriver<PD::HidDriver>();
PD::Hid::UseDriver<PD::HidGlfw>(impl->win);
}
void HorizonNX::Deinit() {