mirror of
https://github.com/RetroDECK/Duckstation.git
synced 2024-11-22 22:05:38 +00:00
GPUDevice: Remove mouse pointer position
This commit is contained in:
parent
674f9a5b1c
commit
6c185ca17b
|
@ -6,7 +6,7 @@
|
||||||
#include "host.h"
|
#include "host.h"
|
||||||
#include "system.h"
|
#include "system.h"
|
||||||
|
|
||||||
#include "util/gpu_device.h"
|
#include "util/input_manager.h"
|
||||||
#include "util/state_wrapper.h"
|
#include "util/state_wrapper.h"
|
||||||
|
|
||||||
#include "common/assert.h"
|
#include "common/assert.h"
|
||||||
|
@ -183,8 +183,9 @@ bool GunCon::Transfer(const u8 data_in, u8* data_out)
|
||||||
void GunCon::UpdatePosition()
|
void GunCon::UpdatePosition()
|
||||||
{
|
{
|
||||||
// get screen coordinates
|
// get screen coordinates
|
||||||
const s32 mouse_x = g_gpu_device->GetMousePositionX();
|
const auto& [fmouse_x, fmouse_y] = InputManager::GetPointerAbsolutePosition(0);
|
||||||
const s32 mouse_y = g_gpu_device->GetMousePositionY();
|
const s32 mouse_x = static_cast<s32>(fmouse_x);
|
||||||
|
const s32 mouse_y = static_cast<s32>(fmouse_y);
|
||||||
|
|
||||||
// are we within the active display area?
|
// are we within the active display area?
|
||||||
u32 tick, line;
|
u32 tick, line;
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
#include "host.h"
|
#include "host.h"
|
||||||
#include "system.h"
|
#include "system.h"
|
||||||
|
|
||||||
#include "util/gpu_device.h"
|
#include "util/input_manager.h"
|
||||||
#include "util/state_wrapper.h"
|
#include "util/state_wrapper.h"
|
||||||
|
|
||||||
#include "common/assert.h"
|
#include "common/assert.h"
|
||||||
|
@ -20,8 +20,9 @@ static constexpr std::array<u8, static_cast<size_t>(PlayStationMouse::Button::Co
|
||||||
|
|
||||||
PlayStationMouse::PlayStationMouse(u32 index) : Controller(index)
|
PlayStationMouse::PlayStationMouse(u32 index) : Controller(index)
|
||||||
{
|
{
|
||||||
m_last_host_position_x = g_gpu_device->GetMousePositionX();
|
const auto& [x, y] = InputManager::GetPointerAbsolutePosition(0);
|
||||||
m_last_host_position_y = g_gpu_device->GetMousePositionY();
|
m_last_host_position_x = static_cast<s32>(x);
|
||||||
|
m_last_host_position_y = static_cast<s32>(y);
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayStationMouse::~PlayStationMouse() = default;
|
PlayStationMouse::~PlayStationMouse() = default;
|
||||||
|
@ -161,8 +162,9 @@ bool PlayStationMouse::Transfer(const u8 data_in, u8* data_out)
|
||||||
void PlayStationMouse::UpdatePosition()
|
void PlayStationMouse::UpdatePosition()
|
||||||
{
|
{
|
||||||
// get screen coordinates
|
// get screen coordinates
|
||||||
const s32 mouse_x = g_gpu_device->GetMousePositionX();
|
const auto& [fmouse_x, fmouse_y] = InputManager::GetPointerAbsolutePosition(0);
|
||||||
const s32 mouse_y = g_gpu_device->GetMousePositionY();
|
const s32 mouse_x = static_cast<s32>(fmouse_x);
|
||||||
|
const s32 mouse_y = static_cast<s32>(fmouse_y);
|
||||||
const s32 delta_x = mouse_x - m_last_host_position_x;
|
const s32 delta_x = mouse_x - m_last_host_position_x;
|
||||||
const s32 delta_y = mouse_y - m_last_host_position_y;
|
const s32 delta_y = mouse_y - m_last_host_position_y;
|
||||||
m_last_host_position_x = mouse_x;
|
m_last_host_position_x = mouse_x;
|
||||||
|
|
|
@ -244,7 +244,7 @@ bool DisplayWidget::event(QEvent* event)
|
||||||
|
|
||||||
const float scaled_x = static_cast<float>(static_cast<qreal>(mouse_pos.x()) * dpr);
|
const float scaled_x = static_cast<float>(static_cast<qreal>(mouse_pos.x()) * dpr);
|
||||||
const float scaled_y = static_cast<float>(static_cast<qreal>(mouse_pos.y()) * dpr);
|
const float scaled_y = static_cast<float>(static_cast<qreal>(mouse_pos.y()) * dpr);
|
||||||
emit windowMouseMoveEvent(false, scaled_x, scaled_y);
|
InputManager::UpdatePointerAbsolutePosition(0, scaled_x, scaled_y);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -270,8 +270,10 @@ bool DisplayWidget::event(QEvent* event)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (dx != 0.0f || dy != 0.0f)
|
if (dx != 0.0f)
|
||||||
emit windowMouseMoveEvent(true, dx, dy);
|
InputManager::UpdatePointerRelativeDelta(0, InputPointerAxis::X, dx);
|
||||||
|
if (dy != 0.0f)
|
||||||
|
InputManager::UpdatePointerRelativeDelta(0, InputPointerAxis::Y, dy);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -38,7 +38,6 @@ Q_SIGNALS:
|
||||||
void windowRestoredEvent();
|
void windowRestoredEvent();
|
||||||
void windowKeyEvent(int key_code, bool pressed);
|
void windowKeyEvent(int key_code, bool pressed);
|
||||||
void windowTextEntered(const QString& text);
|
void windowTextEntered(const QString& text);
|
||||||
void windowMouseMoveEvent(bool relative, float x, float y);
|
|
||||||
void windowMouseButtonEvent(int button, bool pressed);
|
void windowMouseButtonEvent(int button, bool pressed);
|
||||||
void windowMouseWheelEvent(const QPoint& angle_delta);
|
void windowMouseWheelEvent(const QPoint& angle_delta);
|
||||||
|
|
||||||
|
|
|
@ -568,35 +568,6 @@ void EmuThread::onDisplayWindowTextEntered(const QString& text)
|
||||||
ImGuiManager::AddTextInput(text.toStdString());
|
ImGuiManager::AddTextInput(text.toStdString());
|
||||||
}
|
}
|
||||||
|
|
||||||
void EmuThread::onDisplayWindowMouseMoveEvent(bool relative, float x, float y)
|
|
||||||
{
|
|
||||||
// display might be null here if the event happened after shutdown
|
|
||||||
DebugAssert(isOnThread());
|
|
||||||
if (!relative)
|
|
||||||
{
|
|
||||||
if (g_gpu_device)
|
|
||||||
g_gpu_device->SetMousePosition(static_cast<s32>(x), static_cast<s32>(y));
|
|
||||||
|
|
||||||
InputManager::UpdatePointerAbsolutePosition(0, x, y);
|
|
||||||
ImGuiManager::UpdateMousePosition(x, y);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (x != 0.0f)
|
|
||||||
InputManager::UpdatePointerRelativeDelta(0, InputPointerAxis::X, x);
|
|
||||||
if (y != 0.0f)
|
|
||||||
InputManager::UpdatePointerRelativeDelta(0, InputPointerAxis::Y, y);
|
|
||||||
|
|
||||||
if (g_gpu_device)
|
|
||||||
{
|
|
||||||
const float abs_x = static_cast<float>(g_gpu_device->GetMousePositionX()) + x;
|
|
||||||
const float abs_y = static_cast<float>(g_gpu_device->GetMousePositionY()) + y;
|
|
||||||
g_gpu_device->SetMousePosition(static_cast<s32>(abs_x), static_cast<s32>(abs_y));
|
|
||||||
ImGuiManager::UpdateMousePosition(abs_x, abs_y);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void EmuThread::onDisplayWindowMouseButtonEvent(int button, bool pressed)
|
void EmuThread::onDisplayWindowMouseButtonEvent(int button, bool pressed)
|
||||||
{
|
{
|
||||||
DebugAssert(isOnThread());
|
DebugAssert(isOnThread());
|
||||||
|
@ -733,7 +704,6 @@ void EmuThread::connectDisplaySignals(DisplayWidget* widget)
|
||||||
connect(widget, &DisplayWidget::windowRestoredEvent, this, &EmuThread::redrawDisplayWindow);
|
connect(widget, &DisplayWidget::windowRestoredEvent, this, &EmuThread::redrawDisplayWindow);
|
||||||
connect(widget, &DisplayWidget::windowKeyEvent, this, &EmuThread::onDisplayWindowKeyEvent);
|
connect(widget, &DisplayWidget::windowKeyEvent, this, &EmuThread::onDisplayWindowKeyEvent);
|
||||||
connect(widget, &DisplayWidget::windowTextEntered, this, &EmuThread::onDisplayWindowTextEntered);
|
connect(widget, &DisplayWidget::windowTextEntered, this, &EmuThread::onDisplayWindowTextEntered);
|
||||||
connect(widget, &DisplayWidget::windowMouseMoveEvent, this, &EmuThread::onDisplayWindowMouseMoveEvent);
|
|
||||||
connect(widget, &DisplayWidget::windowMouseButtonEvent, this, &EmuThread::onDisplayWindowMouseButtonEvent);
|
connect(widget, &DisplayWidget::windowMouseButtonEvent, this, &EmuThread::onDisplayWindowMouseButtonEvent);
|
||||||
connect(widget, &DisplayWidget::windowMouseWheelEvent, this, &EmuThread::onDisplayWindowMouseWheelEvent);
|
connect(widget, &DisplayWidget::windowMouseWheelEvent, this, &EmuThread::onDisplayWindowMouseWheelEvent);
|
||||||
}
|
}
|
||||||
|
|
|
@ -192,7 +192,6 @@ public Q_SLOTS:
|
||||||
|
|
||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
void stopInThread();
|
void stopInThread();
|
||||||
void onDisplayWindowMouseMoveEvent(bool relative, float x, float y);
|
|
||||||
void onDisplayWindowMouseButtonEvent(int button, bool pressed);
|
void onDisplayWindowMouseButtonEvent(int button, bool pressed);
|
||||||
void onDisplayWindowMouseWheelEvent(const QPoint& delta_angle);
|
void onDisplayWindowMouseWheelEvent(const QPoint& delta_angle);
|
||||||
void onDisplayWindowResized(int width, int height, float scale);
|
void onDisplayWindowResized(int width, int height, float scale);
|
||||||
|
|
|
@ -793,7 +793,6 @@ void GPUDevice::ClearDisplayTexture()
|
||||||
m_display_texture_view_y = 0;
|
m_display_texture_view_y = 0;
|
||||||
m_display_texture_view_width = 0;
|
m_display_texture_view_width = 0;
|
||||||
m_display_texture_view_height = 0;
|
m_display_texture_view_height = 0;
|
||||||
m_display_changed = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GPUDevice::SetDisplayTexture(GPUTexture* texture, s32 view_x, s32 view_y, s32 view_width, s32 view_height)
|
void GPUDevice::SetDisplayTexture(GPUTexture* texture, s32 view_x, s32 view_y, s32 view_width, s32 view_height)
|
||||||
|
@ -804,7 +803,6 @@ void GPUDevice::SetDisplayTexture(GPUTexture* texture, s32 view_x, s32 view_y, s
|
||||||
m_display_texture_view_y = view_y;
|
m_display_texture_view_y = view_y;
|
||||||
m_display_texture_view_width = view_width;
|
m_display_texture_view_width = view_width;
|
||||||
m_display_texture_view_height = view_height;
|
m_display_texture_view_height = view_height;
|
||||||
m_display_changed = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GPUDevice::SetDisplayTextureRect(s32 view_x, s32 view_y, s32 view_width, s32 view_height)
|
void GPUDevice::SetDisplayTextureRect(s32 view_x, s32 view_y, s32 view_width, s32 view_height)
|
||||||
|
@ -813,7 +811,6 @@ void GPUDevice::SetDisplayTextureRect(s32 view_x, s32 view_y, s32 view_width, s3
|
||||||
m_display_texture_view_y = view_y;
|
m_display_texture_view_y = view_y;
|
||||||
m_display_texture_view_width = view_width;
|
m_display_texture_view_width = view_width;
|
||||||
m_display_texture_view_height = view_height;
|
m_display_texture_view_height = view_height;
|
||||||
m_display_changed = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GPUDevice::SetDisplayParameters(s32 display_width, s32 display_height, s32 active_left, s32 active_top,
|
void GPUDevice::SetDisplayParameters(s32 display_width, s32 display_height, s32 active_left, s32 active_top,
|
||||||
|
@ -826,7 +823,6 @@ void GPUDevice::SetDisplayParameters(s32 display_width, s32 display_height, s32
|
||||||
m_display_active_width = active_width;
|
m_display_active_width = active_width;
|
||||||
m_display_active_height = active_height;
|
m_display_active_height = active_height;
|
||||||
m_display_aspect_ratio = display_aspect_ratio;
|
m_display_aspect_ratio = display_aspect_ratio;
|
||||||
m_display_changed = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GPUDevice::GetHostRefreshRate(float* refresh_rate)
|
bool GPUDevice::GetHostRefreshRate(float* refresh_rate)
|
||||||
|
|
|
@ -506,15 +506,6 @@ public:
|
||||||
ALWAYS_INLINE GPUSampler* GetLinearSampler() const { return m_linear_sampler.get(); }
|
ALWAYS_INLINE GPUSampler* GetLinearSampler() const { return m_linear_sampler.get(); }
|
||||||
ALWAYS_INLINE GPUSampler* GetNearestSampler() const { return m_nearest_sampler.get(); }
|
ALWAYS_INLINE GPUSampler* GetNearestSampler() const { return m_nearest_sampler.get(); }
|
||||||
|
|
||||||
// Position is relative to the top-left corner of the window.
|
|
||||||
ALWAYS_INLINE s32 GetMousePositionX() const { return m_mouse_position_x; }
|
|
||||||
ALWAYS_INLINE s32 GetMousePositionY() const { return m_mouse_position_y; }
|
|
||||||
ALWAYS_INLINE void SetMousePosition(s32 x, s32 y)
|
|
||||||
{
|
|
||||||
m_mouse_position_x = x;
|
|
||||||
m_mouse_position_y = y;
|
|
||||||
}
|
|
||||||
|
|
||||||
ALWAYS_INLINE const void* GetDisplayTextureHandle() const { return m_display_texture; }
|
ALWAYS_INLINE const void* GetDisplayTextureHandle() const { return m_display_texture; }
|
||||||
ALWAYS_INLINE s32 GetDisplayWidth() const { return m_display_width; }
|
ALWAYS_INLINE s32 GetDisplayWidth() const { return m_display_width; }
|
||||||
ALWAYS_INLINE s32 GetDisplayHeight() const { return m_display_height; }
|
ALWAYS_INLINE s32 GetDisplayHeight() const { return m_display_height; }
|
||||||
|
@ -714,9 +705,6 @@ private:
|
||||||
|
|
||||||
u64 m_last_frame_displayed_time = 0;
|
u64 m_last_frame_displayed_time = 0;
|
||||||
|
|
||||||
s32 m_mouse_position_x = 0;
|
|
||||||
s32 m_mouse_position_y = 0;
|
|
||||||
|
|
||||||
s32 m_display_width = 0;
|
s32 m_display_width = 0;
|
||||||
s32 m_display_height = 0;
|
s32 m_display_height = 0;
|
||||||
s32 m_display_active_left = 0;
|
s32 m_display_active_left = 0;
|
||||||
|
@ -736,8 +724,6 @@ private:
|
||||||
std::unique_ptr<GPUPipeline> m_imgui_pipeline;
|
std::unique_ptr<GPUPipeline> m_imgui_pipeline;
|
||||||
std::unique_ptr<GPUTexture> m_imgui_font_texture;
|
std::unique_ptr<GPUTexture> m_imgui_font_texture;
|
||||||
|
|
||||||
bool m_display_changed = false;
|
|
||||||
|
|
||||||
std::unique_ptr<PostProcessingChain> m_post_processing_chain;
|
std::unique_ptr<PostProcessingChain> m_post_processing_chain;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1038,9 +1038,18 @@ void InputManager::UpdatePointerAbsolutePosition(u32 index, float x, float y)
|
||||||
const float dy = y - std::exchange(s_host_pointer_positions[index][static_cast<u8>(InputPointerAxis::Y)], y);
|
const float dy = y - std::exchange(s_host_pointer_positions[index][static_cast<u8>(InputPointerAxis::Y)], y);
|
||||||
|
|
||||||
if (dx != 0.0f)
|
if (dx != 0.0f)
|
||||||
UpdatePointerRelativeDelta(index, InputPointerAxis::X, dx);
|
{
|
||||||
|
s_pointer_state[index][static_cast<u8>(InputPointerAxis::X)].delta.fetch_add(static_cast<s32>(dx * 65536.0f),
|
||||||
|
std::memory_order_release);
|
||||||
|
}
|
||||||
if (dy != 0.0f)
|
if (dy != 0.0f)
|
||||||
UpdatePointerRelativeDelta(index, InputPointerAxis::Y, dy);
|
{
|
||||||
|
s_pointer_state[index][static_cast<u8>(InputPointerAxis::Y)].delta.fetch_add(static_cast<s32>(dy * 65536.0f),
|
||||||
|
std::memory_order_release);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (index == 0)
|
||||||
|
ImGuiManager::UpdateMousePosition(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
void InputManager::UpdatePointerRelativeDelta(u32 index, InputPointerAxis axis, float d, bool raw_input)
|
void InputManager::UpdatePointerRelativeDelta(u32 index, InputPointerAxis axis, float d, bool raw_input)
|
||||||
|
@ -1048,8 +1057,12 @@ void InputManager::UpdatePointerRelativeDelta(u32 index, InputPointerAxis axis,
|
||||||
if (raw_input != IsUsingRawInput())
|
if (raw_input != IsUsingRawInput())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
s_host_pointer_positions[index][static_cast<u8>(axis)] += d;
|
||||||
s_pointer_state[index][static_cast<u8>(axis)].delta.fetch_add(static_cast<s32>(d * 65536.0f),
|
s_pointer_state[index][static_cast<u8>(axis)].delta.fetch_add(static_cast<s32>(d * 65536.0f),
|
||||||
std::memory_order_release);
|
std::memory_order_release);
|
||||||
|
|
||||||
|
if (index == 0 && axis <= InputPointerAxis::Y)
|
||||||
|
ImGuiManager::UpdateMousePosition(s_host_pointer_positions[0][0], s_host_pointer_positions[0][1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void InputManager::UpdateHostMouseMode()
|
void InputManager::UpdateHostMouseMode()
|
||||||
|
|
Loading…
Reference in a new issue