mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 10:22:45 -04:00
Support querying the available display modes in X11
This commit is contained in:
parent
5b06c531d7
commit
350119fd45
@ -691,12 +691,19 @@
|
||||
#defer HAVE_X11 $[and $[IS_LINUX],$[libtest $[X11_LPATH],$[X11_LIBS]]]
|
||||
|
||||
// This defines if we have XF86DGA installed. This enables smooth
|
||||
// FPS-style mouse in glxdisplay, when mouse mode M_relative is used.
|
||||
// FPS-style mouse in x11display, when mouse mode M_relative is used.
|
||||
#define XF86DGA_IPATH /usr/include/X11/extensions
|
||||
#define XF86DGA_LPATH /usr/lib
|
||||
#define XF86DGA_LIBS Xxf86dga
|
||||
#defer HAVE_XF86DGA $[libtest $[XF86DGA_LPATH],$[XF86DGA_LIBS]]
|
||||
|
||||
// This defines if we have XF86DGA installed. This
|
||||
// enables resolution switching in x11display.
|
||||
#define XRANDR_IPATH /usr/include/X11/extensions
|
||||
#define XRANDR_LPATH /usr/lib
|
||||
#define XRANDR_LIBS Xrandr
|
||||
#defer HAVE_XRANDR $[libtest $[XRANDR_LPATH],$[XRANDR_LIBS]]
|
||||
|
||||
// How about GLX?
|
||||
#define GLX_IPATH
|
||||
#define GLX_LPATH
|
||||
|
@ -164,6 +164,13 @@
|
||||
#define xf86dga_libs $[XF86DGA_LIBS]
|
||||
#endif
|
||||
|
||||
#if $[HAVE_XRANDR]
|
||||
#define xrandr_ipath $[wildcard $[XRANDR_IPATH]]
|
||||
#define xrandr_lpath $[wildcard $[XRANDR_LPATH]]
|
||||
#define xrandr_cflags $[XRANDR_CFLAGS]
|
||||
#define xrandr_libs $[XRANDR_LIBS]
|
||||
#endif
|
||||
|
||||
#if $[HAVE_MESA]
|
||||
#define mesa_ipath $[wildcard $[MESA_IPATH]]
|
||||
#define mesa_lpath $[wildcard $[MESA_LPATH]]
|
||||
|
@ -54,7 +54,7 @@ PkgListSet(MAYAVERSIONS + MAXVERSIONS + DXVERSIONS + [
|
||||
"FMODEX","OPENAL","NVIDIACG","OPENSSL","FREETYPE","WX",
|
||||
"FFTW","ARTOOLKIT","SQUISH","ODE","DIRECTCAM","NPAPI",
|
||||
"OPENCV","FFMPEG","SWSCALE","FCOLLADA","GTK2","OPENGL",
|
||||
"X11","XF86DGA","PHYSX","PANDATOOL","CONTRIB",
|
||||
"X11","XF86DGA","XRANDR","PHYSX","PANDATOOL","CONTRIB",
|
||||
])
|
||||
|
||||
CheckPandaSourceTree()
|
||||
@ -309,6 +309,7 @@ else:
|
||||
|
||||
if (COMPILER=="MSVC"):
|
||||
PkgDisable("X11")
|
||||
PkgDisable("XRANDR")
|
||||
PkgDisable("XF86DGA")
|
||||
if (PkgSkip("PYTHON")==0):
|
||||
IncDirectory("ALWAYS", SDK["PYTHON"] + "/include")
|
||||
@ -484,6 +485,7 @@ if (COMPILER=="LINUX"):
|
||||
SmartPkgEnable("CGGL", "", ("CgGL"), "Cg/cgGL.h")
|
||||
SmartPkgEnable("X11", "x11", "X11", ("X11", "X11/Xlib.h"))
|
||||
if (not RUNTIME):
|
||||
SmartPkgEnable("XRANDR", "xrandr", "Xrandr", "X11/extensions/Xrandr.h")
|
||||
SmartPkgEnable("XF86DGA", "xxf86dga", "Xxf86dga", "X11/extensions/xf86dga.h")
|
||||
|
||||
if (RUNTIME):
|
||||
@ -1284,6 +1286,7 @@ DTOOL_CONFIG=[
|
||||
("PHAVE_UCONTEXT_H", 'UNDEF', '1'),
|
||||
("HAVE_RTTI", '1', '1'),
|
||||
("HAVE_X11", 'UNDEF', '1'),
|
||||
("HAVE_XRANDR", 'UNDEF', '1'),
|
||||
("HAVE_XF86DGA", 'UNDEF', '1'),
|
||||
("IS_LINUX", 'UNDEF', '1'),
|
||||
("IS_OSX", 'UNDEF', 'UNDEF'),
|
||||
@ -1387,6 +1390,7 @@ def WriteConfigSettings():
|
||||
dtool_config["PHAVE_SYS_MALLOC_H"] = '1'
|
||||
dtool_config["HAVE_OPENAL_FRAMEWORK"] = '1'
|
||||
dtool_config["HAVE_X11"] = 'UNDEF' # We might have X11, but we don't need it.
|
||||
dtool_config["HAVE_XRANDR"] = 'UNDEF'
|
||||
dtool_config["HAVE_XF86DGA"] = 'UNDEF'
|
||||
dtool_config["HAVE_GLX"] = 'UNDEF'
|
||||
dtool_config["IS_LINUX"] = 'UNDEF'
|
||||
@ -3055,7 +3059,7 @@ if (sys.platform != "win32" and sys.platform != "darwin" and PkgSkip("OPENGL")==
|
||||
TargetAdd('libpandagl.dll', input='libp3glstuff.dll')
|
||||
TargetAdd('libpandagl.dll', input='libpandafx.dll')
|
||||
TargetAdd('libpandagl.dll', input=COMMON_PANDA_LIBS)
|
||||
TargetAdd('libpandagl.dll', opts=['MODULE', 'OPENGL', 'NVIDIACG', 'CGGL', 'X11', 'XF86DGA'])
|
||||
TargetAdd('libpandagl.dll', opts=['MODULE', 'OPENGL', 'NVIDIACG', 'CGGL', 'X11', 'XRANDR', 'XF86DGA'])
|
||||
|
||||
#
|
||||
# DIRECTORY: panda/src/osxdisplay/
|
||||
@ -3249,7 +3253,7 @@ if (not RUNTIME and (sys.platform == "win32" or sys.platform == "darwin" or PkgS
|
||||
TargetAdd('libtinydisplay.dll', opts=['WINIMM', 'WINGDI', 'WINKERNEL', 'WINOLDNAMES', 'WINUSER', 'WINMM'])
|
||||
else:
|
||||
TargetAdd('libtinydisplay.dll', input='x11display_composite.obj')
|
||||
TargetAdd('libtinydisplay.dll', opts=['X11', 'XF86DGA'])
|
||||
TargetAdd('libtinydisplay.dll', opts=['X11', 'XRANDR', 'XF86DGA'])
|
||||
TargetAdd('libtinydisplay.dll', input='tinydisplay_composite1.obj')
|
||||
TargetAdd('libtinydisplay.dll', input='tinydisplay_composite2.obj')
|
||||
TargetAdd('libtinydisplay.dll', input='tinydisplay_ztriangle_1.obj')
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
#define OTHER_LIBS interrogatedb:c dconfig:c dtoolconfig:m \
|
||||
dtoolutil:c dtoolbase:c dtool:m
|
||||
#define USE_PACKAGES x11 xf86dga
|
||||
#define USE_PACKAGES x11 xf86dga xrandr
|
||||
|
||||
#begin lib_target
|
||||
#define TARGET x11display
|
||||
|
@ -17,6 +17,16 @@
|
||||
#include "config_x11display.h"
|
||||
#include "frameBufferProperties.h"
|
||||
|
||||
#ifdef HAVE_XRANDR
|
||||
// Ugly workaround around the conflicting definition
|
||||
// of Connection that randr.h provides.
|
||||
#define _RANDR_H_
|
||||
typedef unsigned short Rotation;
|
||||
typedef unsigned short SizeID;
|
||||
typedef unsigned short SubpixelOrder;
|
||||
#include <X11/extensions/Xrandr.h>
|
||||
#endif
|
||||
|
||||
TypeHandle x11GraphicsPipe::_type_handle;
|
||||
|
||||
bool x11GraphicsPipe::_error_handlers_installed = false;
|
||||
@ -81,6 +91,33 @@ x11GraphicsPipe(const string &display) {
|
||||
_display_height = DisplayHeight(_display, _screen);
|
||||
_is_valid = true;
|
||||
|
||||
#ifdef HAVE_XRANDR
|
||||
// Use Xrandr to fill in the supported resolution list.
|
||||
int num_sizes, num_rates;
|
||||
XRRScreenSize *xrrs;
|
||||
xrrs = XRRSizes(_display, 0, &num_sizes);
|
||||
_display_information->_total_display_modes = 0;
|
||||
for (int i = 0; i < num_sizes; ++i) {
|
||||
XRRRates(_display, 0, i, &num_rates);
|
||||
_display_information->_total_display_modes += num_rates;
|
||||
}
|
||||
|
||||
short *rates;
|
||||
short counter = 0;
|
||||
_display_information->_display_mode_array = new DisplayMode[_display_information->_total_display_modes];
|
||||
for (int i = 0; i < num_sizes; ++i) {
|
||||
int num_rates;
|
||||
rates = XRRRates(_display, 0, i, &num_rates);
|
||||
for (int j = 0; j < num_rates; ++j) {
|
||||
DisplayMode* dm = _display_information->_display_mode_array + counter;
|
||||
dm->width = xrrs[i].width;
|
||||
dm->height = xrrs[i].height;
|
||||
dm->refresh_rate = rates[j];
|
||||
++counter;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// Connect to an input method for supporting international text
|
||||
// entry.
|
||||
_im = XOpenIM(_display, NULL, NULL, NULL);
|
||||
|
Loading…
x
Reference in New Issue
Block a user