mirror of
https://github.com/glfw/glfw.git
synced 2025-12-20 22:22:04 +00:00
Compare commits
4 Commits
9907bb94e5
...
f447016f3c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f447016f3c | ||
|
|
4df5129529 | ||
|
|
6de70d8252 | ||
|
|
52243c2ff4 |
@ -282,10 +282,12 @@ video tutorials.
|
|||||||
- Corentin Wallez
|
- Corentin Wallez
|
||||||
- Torsten Walluhn
|
- Torsten Walluhn
|
||||||
- Patrick Walton
|
- Patrick Walton
|
||||||
|
- Ivor Wanders
|
||||||
- Jim Wang
|
- Jim Wang
|
||||||
- Xo Wang
|
- Xo Wang
|
||||||
- Andre Weissflog
|
- Andre Weissflog
|
||||||
- Jay Weisskopf
|
- Jay Weisskopf
|
||||||
|
- Drew Weymouth
|
||||||
- Frank Wille
|
- Frank Wille
|
||||||
- Andy Williams
|
- Andy Williams
|
||||||
- Joel Winarske
|
- Joel Winarske
|
||||||
|
|||||||
@ -145,10 +145,13 @@ information on what to include when reporting a bug.
|
|||||||
- [Wayland] Bugfix: The cursor position was not updated when clicking through
|
- [Wayland] Bugfix: The cursor position was not updated when clicking through
|
||||||
from a modal to the content area
|
from a modal to the content area
|
||||||
- [X11] Bugfix: Running without a WM could trigger an assert (#2593,#2601,#2631)
|
- [X11] Bugfix: Running without a WM could trigger an assert (#2593,#2601,#2631)
|
||||||
|
- [X11] Bugfix: Occasional crash when an idle display awakes (#2766)
|
||||||
- [Null] Added Vulkan 'window' surface creation via `VK_EXT_headless_surface`
|
- [Null] Added Vulkan 'window' surface creation via `VK_EXT_headless_surface`
|
||||||
- [Null] Added EGL context creation on Mesa via `EGL_MESA_platform_surfaceless`
|
- [Null] Added EGL context creation on Mesa via `EGL_MESA_platform_surfaceless`
|
||||||
- [EGL] Allowed native access on Wayland with `GLFW_CONTEXT_CREATION_API` set to
|
- [EGL] Allowed native access on Wayland with `GLFW_CONTEXT_CREATION_API` set to
|
||||||
`GLFW_NATIVE_CONTEXT_API` (#2518)
|
`GLFW_NATIVE_CONTEXT_API` (#2518)
|
||||||
|
- [X11] Bugfix: Prevent BadWindow when creating small windows with a content scale
|
||||||
|
less than 1 (#2754)
|
||||||
|
|
||||||
|
|
||||||
## Contact
|
## Contact
|
||||||
|
|||||||
@ -126,6 +126,9 @@ static GLFWbool loadLibraries(void)
|
|||||||
{
|
{
|
||||||
_glfw.win32.xinput.GetCapabilities = (PFN_XInputGetCapabilities)
|
_glfw.win32.xinput.GetCapabilities = (PFN_XInputGetCapabilities)
|
||||||
_glfwPlatformGetModuleSymbol(_glfw.win32.xinput.instance, "XInputGetCapabilities");
|
_glfwPlatformGetModuleSymbol(_glfw.win32.xinput.instance, "XInputGetCapabilities");
|
||||||
|
// 108 is the ordinal for _XInputGetCapabilitiesEx, which additionally returns VID/PID of the controller.
|
||||||
|
_glfw.win32.xinput.GetCapabilitiesEx = (PFN_XInputGetCapabilitiesEx)
|
||||||
|
_glfwPlatformGetModuleSymbol(_glfw.win32.xinput.instance, (LPCSTR)108);
|
||||||
_glfw.win32.xinput.GetState = (PFN_XInputGetState)
|
_glfw.win32.xinput.GetState = (PFN_XInputGetState)
|
||||||
_glfwPlatformGetModuleSymbol(_glfw.win32.xinput.instance, "XInputGetState");
|
_glfwPlatformGetModuleSymbol(_glfw.win32.xinput.instance, "XInputGetState");
|
||||||
|
|
||||||
|
|||||||
@ -519,12 +519,33 @@ void _glfwDetectJoystickConnectionWin32(void)
|
|||||||
if (jid <= GLFW_JOYSTICK_LAST)
|
if (jid <= GLFW_JOYSTICK_LAST)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (XInputGetCapabilities(index, 0, &xic) != ERROR_SUCCESS)
|
if (XInputGetCapabilities(index, XINPUT_FLAG_GAMEPAD, &xic) != ERROR_SUCCESS)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Generate a joystick GUID that matches the SDL 2.0.5+ one
|
GLFW_XINPUT_CAPABILITIES_EX xic_ex;
|
||||||
sprintf(guid, "78696e707574%02x000000000000000000",
|
if (!XInputGetCapabilitiesEx || XInputGetCapabilitiesEx(1, index, 0, &xic_ex) != ERROR_SUCCESS)
|
||||||
xic.SubType & 0xff);
|
{
|
||||||
|
// use a generic VID/PID representing an XInput controller
|
||||||
|
xic_ex.VendorId = USB_VENDOR_MICROSOFT;
|
||||||
|
xic_ex.ProductId = USB_PRODUCT_XBOX360_XUSB_CONTROLLER;
|
||||||
|
xic_ex.VersionNumber = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// fixup for Wireless Xbox 360 Controller
|
||||||
|
if (xic_ex.ProductId == 0 && xic_ex.Capabilities.Flags & XINPUT_CAPS_WIRELESS)
|
||||||
|
{
|
||||||
|
xic_ex.VendorId = USB_VENDOR_MICROSOFT;
|
||||||
|
xic_ex.ProductId = USB_PRODUCT_XBOX360_XUSB_CONTROLLER;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate a joystick GUID that matches the SDL one
|
||||||
|
// SDL_xinputjoystick.c:207
|
||||||
|
uint8_t* vid = (uint8_t*)&xic_ex.VendorId;
|
||||||
|
uint8_t* pid = (uint8_t*)&xic_ex.ProductId;
|
||||||
|
uint8_t* ver = (uint8_t*)&xic_ex.VersionNumber;
|
||||||
|
sprintf(guid, "03000000%02x%02x0000%02x%02x0000%02x%02x0000", vid[0], vid[1], pid[0], pid[1], ver[0], ver[1]);
|
||||||
|
|
||||||
js = _glfwAllocJoystick(getDeviceDescription(&xic), guid, 6, 10, 1);
|
js = _glfwAllocJoystick(getDeviceDescription(&xic), guid, 6, 10, 1);
|
||||||
if (!js)
|
if (!js)
|
||||||
|
|||||||
@ -216,11 +216,26 @@ typedef enum
|
|||||||
#define ERROR_INVALID_PROFILE_ARB 0x2096
|
#define ERROR_INVALID_PROFILE_ARB 0x2096
|
||||||
#define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054
|
#define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054
|
||||||
|
|
||||||
|
// this struct might not defined in XInput headers
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
XINPUT_CAPABILITIES Capabilities;
|
||||||
|
WORD VendorId;
|
||||||
|
WORD ProductId;
|
||||||
|
WORD VersionNumber;
|
||||||
|
WORD unk1;
|
||||||
|
DWORD unk2;
|
||||||
|
} GLFW_XINPUT_CAPABILITIES_EX;
|
||||||
|
|
||||||
// xinput.dll function pointer typedefs
|
// xinput.dll function pointer typedefs
|
||||||
typedef DWORD (WINAPI * PFN_XInputGetCapabilities)(DWORD,DWORD,XINPUT_CAPABILITIES*);
|
typedef DWORD (WINAPI * PFN_XInputGetCapabilities)(DWORD,DWORD,XINPUT_CAPABILITIES*);
|
||||||
|
typedef DWORD (WINAPI * PFN_XInputGetCapabilitiesEx)(DWORD,DWORD,DWORD,GLFW_XINPUT_CAPABILITIES_EX*);
|
||||||
typedef DWORD (WINAPI * PFN_XInputGetState)(DWORD,XINPUT_STATE*);
|
typedef DWORD (WINAPI * PFN_XInputGetState)(DWORD,XINPUT_STATE*);
|
||||||
#define XInputGetCapabilities _glfw.win32.xinput.GetCapabilities
|
#define XInputGetCapabilities _glfw.win32.xinput.GetCapabilities
|
||||||
|
#define XInputGetCapabilitiesEx _glfw.win32.xinput.GetCapabilitiesEx
|
||||||
#define XInputGetState _glfw.win32.xinput.GetState
|
#define XInputGetState _glfw.win32.xinput.GetState
|
||||||
|
#define USB_VENDOR_MICROSOFT 0x045e
|
||||||
|
#define USB_PRODUCT_XBOX360_XUSB_CONTROLLER 0x02a1 // XUSB driver software PID
|
||||||
|
|
||||||
// dinput8.dll function pointer typedefs
|
// dinput8.dll function pointer typedefs
|
||||||
typedef HRESULT (WINAPI * PFN_DirectInput8Create)(HINSTANCE,DWORD,REFIID,LPVOID*,LPUNKNOWN);
|
typedef HRESULT (WINAPI * PFN_DirectInput8Create)(HINSTANCE,DWORD,REFIID,LPVOID*,LPUNKNOWN);
|
||||||
@ -412,6 +427,7 @@ typedef struct _GLFWlibraryWin32
|
|||||||
struct {
|
struct {
|
||||||
HINSTANCE instance;
|
HINSTANCE instance;
|
||||||
PFN_XInputGetCapabilities GetCapabilities;
|
PFN_XInputGetCapabilities GetCapabilities;
|
||||||
|
PFN_XInputGetCapabilitiesEx GetCapabilitiesEx;
|
||||||
PFN_XInputGetState GetState;
|
PFN_XInputGetState GetState;
|
||||||
} xinput;
|
} xinput;
|
||||||
|
|
||||||
|
|||||||
@ -151,6 +151,11 @@ void _glfwPollMonitorsX11(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
XRRCrtcInfo* ci = XRRGetCrtcInfo(_glfw.x11.display, sr, oi->crtc);
|
XRRCrtcInfo* ci = XRRGetCrtcInfo(_glfw.x11.display, sr, oi->crtc);
|
||||||
|
if (!ci) {
|
||||||
|
XRRFreeOutputInfo(oi);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (ci->rotation == RR_Rotate_90 || ci->rotation == RR_Rotate_270)
|
if (ci->rotation == RR_Rotate_90 || ci->rotation == RR_Rotate_270)
|
||||||
{
|
{
|
||||||
widthMM = oi->mm_height;
|
widthMM = oi->mm_height;
|
||||||
|
|||||||
@ -576,6 +576,10 @@ static GLFWbool createNativeWindow(_GLFWwindow* window,
|
|||||||
height *= _glfw.x11.contentScaleY;
|
height *= _glfw.x11.contentScaleY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The dimensions must be nonzero, or a BadValue error results.
|
||||||
|
width = _glfw_max(1, width);
|
||||||
|
height = _glfw_max(1, height);
|
||||||
|
|
||||||
int xpos = 0, ypos = 0;
|
int xpos = 0, ypos = 0;
|
||||||
|
|
||||||
if (wndconfig->xpos != GLFW_ANY_POSITION && wndconfig->ypos != GLFW_ANY_POSITION)
|
if (wndconfig->xpos != GLFW_ANY_POSITION && wndconfig->ypos != GLFW_ANY_POSITION)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user