Add HidDriver base and small HidGLFW driver
This commit is contained in:
+57
-46
@@ -7,51 +7,55 @@ option(PD_ENABLE_OPENGL3 "Enable OpenGL 3.3 (On Supported Hardware)" ON)
|
||||
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)
|
||||
|
||||
if(NOT WIN32) # cause we are not on windows...
|
||||
set(PD_ENABLE_DIRECTX9 OFF)
|
||||
set(PD_ENABLE_DIRECTX9 OFF)
|
||||
endif()
|
||||
|
||||
if(${CMAKE_SYSTEM_NAME} STREQUAL "Nintendo3DS")
|
||||
set(PD_ENABLE_OPENGL2 OFF)
|
||||
set(PD_ENABLE_OPENGL3 OFF)
|
||||
set(PD_ENABLE_VULKAN OFF)
|
||||
set(PD_ENABLE_CITRO3D ON)
|
||||
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)
|
||||
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_OPENGL2 OFF)
|
||||
set(PD_ENABLE_OPENGL3 ON)
|
||||
set(PD_ENABLE_VULKAN OFF)
|
||||
set(PD_ENABLE_CITRO3D OFF)
|
||||
endif()
|
||||
|
||||
add_library(pd-system STATIC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/source/gl-helper.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/source/gfx_opengl2.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/source/gfx_opengl3.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/source/gfx_directx9.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/source/gfx_citro3d.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/source/gl-helper.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/source/gfx_opengl2.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/source/gfx_opengl3.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/source/gfx_directx9.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/source/gfx_citro3d.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/source/hid_glfw.cpp
|
||||
)
|
||||
|
||||
target_include_directories(pd-system
|
||||
PUBLIC
|
||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:include>
|
||||
PUBLIC
|
||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:include>
|
||||
)
|
||||
|
||||
target_compile_options(palladium
|
||||
PUBLIC $<$<CXX_COMPILER_ID:GNU,Clang>:
|
||||
PUBLIC $<$<CXX_COMPILER_ID:GNU,Clang>:
|
||||
-fmacro-prefix-map=${CMAKE_CURRENT_SOURCE_DIR}/source=source
|
||||
-fmacro-prefix-map=${CMAKE_CURRENT_SOURCE_DIR}/include=include
|
||||
>
|
||||
)
|
||||
|
||||
target_compile_definitions(pd-system
|
||||
PUBLIC
|
||||
$<$<BOOL:${PD_ENABLE_OPENGL2}>:PD_ENABLE_OPENGL2>
|
||||
$<$<BOOL:${PD_ENABLE_OPENGL3}>:PD_ENABLE_OPENGL3>
|
||||
$<$<BOOL:${PD_ENABLE_VULKAN}>:PD_ENABLE_VULKAN>
|
||||
$<$<BOOL:${PD_ENABLE_DIRECTX9}>:PD_ENABLE_DIRECTX9>
|
||||
$<$<BOOL:${PD_ENABLE_CITRO3D}>:PD_ENABLE_CITRO3D>
|
||||
PUBLIC
|
||||
$<$<BOOL:${PD_ENABLE_OPENGL2}>:PD_ENABLE_OPENGL2>
|
||||
$<$<BOOL:${PD_ENABLE_OPENGL3}>:PD_ENABLE_OPENGL3>
|
||||
$<$<BOOL:${PD_ENABLE_VULKAN}>:PD_ENABLE_VULKAN>
|
||||
$<$<BOOL:${PD_ENABLE_DIRECTX9}>:PD_ENABLE_DIRECTX9>
|
||||
$<$<BOOL:${PD_ENABLE_CITRO3D}>:PD_ENABLE_CITRO3D>
|
||||
$<$<BOOL:${PD_ENABLE_HID_GLFW}>:PD_ENABLE_HID_GLFW>
|
||||
)
|
||||
|
||||
# Palladium
|
||||
@@ -59,34 +63,41 @@ 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
|
||||
)
|
||||
target_link_libraries(pd-system
|
||||
PUBLIC glad
|
||||
)
|
||||
endif()
|
||||
|
||||
# DirectX9
|
||||
if(PD_ENABLE_DIRECTX9)
|
||||
target_link_libraries(pd-system
|
||||
PUBLIC
|
||||
d3d9
|
||||
d3dcompiler
|
||||
)
|
||||
target_link_libraries(pd-system
|
||||
PUBLIC
|
||||
d3d9
|
||||
d3dcompiler
|
||||
)
|
||||
endif()
|
||||
|
||||
if(${CMAKE_SYSTEM_NAME} STREQUAL "Nintendo3DS")
|
||||
target_link_libraries(pd-system
|
||||
PUBLIC
|
||||
pica::pica
|
||||
citro3d
|
||||
ctru
|
||||
)
|
||||
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
|
||||
)
|
||||
endif()
|
||||
target_link_libraries(pd-system
|
||||
PUBLIC spirv-helper
|
||||
)
|
||||
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()
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
#pragma once
|
||||
|
||||
#include <pd/drivers/hid.hpp>
|
||||
|
||||
typedef struct GLFWwindow GLFWwindow;
|
||||
|
||||
namespace PD {
|
||||
class HidGlfw : public HidDriver {
|
||||
public:
|
||||
HidGlfw(GLFWwindow* window);
|
||||
~HidGlfw();
|
||||
|
||||
void Update() override;
|
||||
|
||||
private:
|
||||
struct Impl;
|
||||
Impl* impl;
|
||||
};
|
||||
} // namespace PD
|
||||
@@ -1,6 +1,10 @@
|
||||
#pragma once
|
||||
|
||||
// Gfx
|
||||
#include <pd_system/gfx_citro3d.hpp>
|
||||
#include <pd_system/gfx_directx9.hpp>
|
||||
#include <pd_system/gfx_opengl2.hpp>
|
||||
#include <pd_system/gfx_opengl3.hpp>
|
||||
|
||||
// Hid
|
||||
#include <pd_system/hid_glfw.hpp>
|
||||
@@ -0,0 +1,59 @@
|
||||
#include <pd_system/hid_glfw.hpp>
|
||||
#ifdef PD_ENABLE_HID_GLFW
|
||||
#define GLFW_INCLUDE_NONE
|
||||
#include <GLFW/glfw3.h>
|
||||
|
||||
namespace PD {
|
||||
struct HidGlfw::Impl {
|
||||
GLFWwindow* Win;
|
||||
int PrevState;
|
||||
std::unordered_map<int, int> PrevStates;
|
||||
GLFWcharfun OldTextCB;
|
||||
std::string* Text;
|
||||
bool InTextMode = false;
|
||||
};
|
||||
|
||||
HidGlfw::HidGlfw(GLFWwindow* win) : HidDriver("HidGlfw") {
|
||||
impl = new Impl;
|
||||
impl->Win = win;
|
||||
pFlags |= PDHidBackendFlags_HasMouse;
|
||||
pFlags |= PDHidBackendFlags_HasKeyboard;
|
||||
pGamepad[GLFW_MOUSE_BUTTON_LEFT] = HidInternal::Touch;
|
||||
}
|
||||
|
||||
HidGlfw::~HidGlfw() {}
|
||||
|
||||
void HidGlfw::Update() {
|
||||
HidDriver::Update(); // clear stats
|
||||
int state = glfwGetMouseButton(impl->Win, GLFW_MOUSE_BUTTON_LEFT);
|
||||
if (state == GLFW_PRESS) {
|
||||
if (impl->PrevState == GLFW_RELEASE) {
|
||||
pGamepadEvents[0][Event::Down] |= HidInternal::Touch;
|
||||
}
|
||||
pGamepadEvents[0][Event::Held] |= HidInternal::Touch;
|
||||
} else if (state == GLFW_RELEASE && impl->PrevState == GLFW_PRESS) {
|
||||
pGamepadEvents[0][Event::Up] |= HidInternal::Touch;
|
||||
}
|
||||
|
||||
impl->PrevState = state;
|
||||
// if (pLocked) {
|
||||
// SwapTab();
|
||||
// }
|
||||
double x, y;
|
||||
glfwGetCursorPos(impl->Win, &x, &y);
|
||||
pMouse[1] = pMouse[0]; // Cycle pMouse pos
|
||||
pMouse[0] = fvec2(x, y);
|
||||
}
|
||||
} // namespace PD
|
||||
#else
|
||||
namespace PD {
|
||||
|
||||
HidGlfw::HidGlfw(GLFWwindow* win) : HidDriver("HidGlfw") {}
|
||||
|
||||
HidGlfw::~HidGlfw() {}
|
||||
|
||||
void HidGlfw::Update() {
|
||||
HidDriver::Update(); // clear stats
|
||||
}
|
||||
} // namespace PD
|
||||
#endif
|
||||
Reference in New Issue
Block a user