Optimize calls to XRRGetScreenResources

This commit is contained in:
Jan Ziak 2016-10-07 17:13:04 +02:00
parent cc3036860a
commit b35d3d0c13
3 changed files with 20 additions and 9 deletions

View File

@ -458,6 +458,16 @@ static void detectEWMH(void)
XFree(supportedAtoms);
}
XRRScreenResources* _glfwXRRGetScreenResources()
{
#if (RANDR_MAJOR > 1 || (RANDR_MAJOR == 1 && RANDR_MINOR >= 3))
if(_glfw.x11.randr.major > 1 || (_glfw.x11.randr.major == 1 && _glfw.x11.randr.minor >= 3))
return XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root);
else
#endif
return XRRGetScreenResources(_glfw.x11.display, _glfw.x11.root);
}
// Initialize X11 display and look for supported X11 extensions
//
static GLFWbool initExtensions(void)
@ -492,8 +502,7 @@ static GLFWbool initExtensions(void)
if (_glfw.x11.randr.available)
{
XRRScreenResources* sr = XRRGetScreenResources(_glfw.x11.display,
_glfw.x11.root);
XRRScreenResources* sr = _glfwXRRGetScreenResources();
if (!sr->ncrtc || !XRRGetCrtcGammaSize(_glfw.x11.display, sr->crtcs[0]))
{

View File

@ -114,7 +114,7 @@ GLFWbool _glfwSetVideoModeX11(_GLFWmonitor* monitor, const GLFWvidmode* desired)
if (_glfwCompareVideoModes(&current, best) == 0)
return GLFW_TRUE;
sr = XRRGetScreenResources(_glfw.x11.display, _glfw.x11.root);
sr = _glfwXRRGetScreenResources();
ci = XRRGetCrtcInfo(_glfw.x11.display, sr, monitor->x11.crtc);
oi = XRRGetOutputInfo(_glfw.x11.display, sr, monitor->x11.output);
@ -174,7 +174,7 @@ void _glfwRestoreVideoModeX11(_GLFWmonitor* monitor)
if (monitor->x11.oldMode == None)
return;
sr = XRRGetScreenResources(_glfw.x11.display, _glfw.x11.root);
sr = _glfwXRRGetScreenResources(_glfw.x11.display, _glfw.x11.root);
ci = XRRGetCrtcInfo(_glfw.x11.display, sr, monitor->x11.crtc);
XRRSetCrtcConfig(_glfw.x11.display,
@ -209,8 +209,8 @@ _GLFWmonitor** _glfwPlatformGetMonitors(int* count)
{
int screenCount = 0;
XineramaScreenInfo* screens = NULL;
XRRScreenResources* sr = XRRGetScreenResources(_glfw.x11.display,
_glfw.x11.root);
XRRScreenResources* sr = _glfwXRRGetScreenResources(_glfw.x11.display,
_glfw.x11.root);
RROutput primary = XRRGetOutputPrimary(_glfw.x11.display,
_glfw.x11.root);
@ -318,7 +318,7 @@ void _glfwPlatformGetMonitorPos(_GLFWmonitor* monitor, int* xpos, int* ypos)
XRRScreenResources* sr;
XRRCrtcInfo* ci;
sr = XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root);
sr = _glfwXRRGetScreenResources(_glfw.x11.display, _glfw.x11.root);
ci = XRRGetCrtcInfo(_glfw.x11.display, sr, monitor->x11.crtc);
if (xpos)
@ -344,7 +344,7 @@ GLFWvidmode* _glfwPlatformGetVideoModes(_GLFWmonitor* monitor, int* count)
XRRCrtcInfo* ci;
XRROutputInfo* oi;
sr = XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root);
sr = _glfwXRRGetScreenResources(_glfw.x11.display, _glfw.x11.root);
ci = XRRGetCrtcInfo(_glfw.x11.display, sr, monitor->x11.crtc);
oi = XRRGetOutputInfo(_glfw.x11.display, sr, monitor->x11.output);
@ -393,7 +393,7 @@ void _glfwPlatformGetVideoMode(_GLFWmonitor* monitor, GLFWvidmode* mode)
XRRScreenResources* sr;
XRRCrtcInfo* ci;
sr = XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root);
sr = _glfwXRRGetScreenResources(_glfw.x11.display, _glfw.x11.root);
ci = XRRGetCrtcInfo(_glfw.x11.display, sr, monitor->x11.crtc);
*mode = vidmodeFromModeInfo(getModeInfo(sr, ci->mode), ci);

View File

@ -299,4 +299,6 @@ void _glfwInputErrorX11(int error, const char* message);
void _glfwPushSelectionToManagerX11(void);
XRRScreenResources* _glfwXRRGetScreenResources();
#endif // _glfw3_x11_platform_h_