Load OpenGL library dynamically from x11drv.
This commit is contained in:
parent
d09b9ccb39
commit
56ab2b3e91
|
@ -305,7 +305,7 @@ ac_includes_default="\
|
|||
# include <unistd.h>
|
||||
#endif"
|
||||
|
||||
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS LIBEXT OPTIONS WIN16_FILES WIN16_INSTALL build build_cpu build_vendor build_os host host_cpu host_vendor host_os SET_MAKE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP TOOLSDIR X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS YACC LEX LEXLIB LEX_OUTPUT_ROOT XYACC XLEX LD ac_ct_LD AR ac_ct_AR RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP WINDRES ac_ct_WINDRES INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN_S LN C2MAN LDCONFIG LINT LINTFLAGS JPEGLIB EGREP XLIB XFILES OPENGLFILES GLU32FILES NASLIBS CURSESLIBS sane_devel SANELIBS SANEINCL ft_devel ft_devel2 FREETYPEINCL ARTSCCONFIG ARTSLIBS ARTSINCL ALSALIBS AUDIOIOLIBS DLLEXT DLLFLAGS DLLIBS LDDLLFLAGS LDSHARED DLLWRAP ac_ct_DLLWRAP CROSSTEST CROSSCC DLLTOOL LDPATH CRTLIBS LDD ALLOCA LIBOBJS LTLIBOBJS'
|
||||
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS LIBEXT OPTIONS WIN16_FILES WIN16_INSTALL build build_cpu build_vendor build_os host host_cpu host_vendor host_os SET_MAKE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP TOOLSDIR X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS YACC LEX LEXLIB LEX_OUTPUT_ROOT XYACC XLEX LD ac_ct_LD AR ac_ct_AR RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP WINDRES ac_ct_WINDRES INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN_S LN C2MAN LDCONFIG LINT LINTFLAGS JPEGLIB EGREP XLIB XFILES OPENGLFILES GLU32FILES OPENGL_LIBS NASLIBS CURSESLIBS sane_devel SANELIBS SANEINCL ft_devel ft_devel2 FREETYPEINCL ARTSCCONFIG ARTSLIBS ARTSINCL ALSALIBS AUDIOIOLIBS DLLEXT DLLFLAGS DLLIBS LDDLLFLAGS LDSHARED DLLWRAP ac_ct_DLLWRAP CROSSTEST CROSSCC DLLTOOL LDPATH CRTLIBS LDD ALLOCA LIBOBJS LTLIBOBJS'
|
||||
ac_subst_files='MAKE_RULES MAKE_DLL_RULES MAKE_TEST_RULES MAKE_PROG_RULES'
|
||||
|
||||
# Initialize some variables set by options.
|
||||
|
@ -5761,6 +5761,8 @@ XFILES=""
|
|||
OPENGLFILES=""
|
||||
|
||||
GLU32FILES=""
|
||||
|
||||
OPENGL_LIBS=""
|
||||
if test "$have_x" = "yes"
|
||||
then
|
||||
XLIB="-lXext -lX11"
|
||||
|
@ -7013,7 +7015,7 @@ fi
|
|||
echo "$as_me:$LINENO: result: $ac_cv_lib_GL_glXCreateContext" >&5
|
||||
echo "${ECHO_T}$ac_cv_lib_GL_glXCreateContext" >&6
|
||||
if test $ac_cv_lib_GL_glXCreateContext = yes; then
|
||||
X_PRE_LIBS="$X_PRE_LIBS -lGL"
|
||||
OPENGL_LIBS="-lGL"
|
||||
|
||||
fi
|
||||
|
||||
|
@ -7149,7 +7151,7 @@ if test "${ac_cv_lib_GLU_gluLookAt+set}" = set; then
|
|||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||
else
|
||||
ac_check_lib_save_LIBS=$LIBS
|
||||
LIBS="-lGLU $X_LIBS $X_PRE_LIBS -lXext -lX11 -lm $X_EXTRA_LIBS
|
||||
LIBS="-lGLU $OPENGL_LIBS $X_LIBS $X_PRE_LIBS -lXext -lX11 -lm $X_EXTRA_LIBS
|
||||
$LIBS"
|
||||
cat >conftest.$ac_ext <<_ACEOF
|
||||
#line $LINENO "configure"
|
||||
|
@ -7194,7 +7196,7 @@ fi
|
|||
echo "$as_me:$LINENO: result: $ac_cv_lib_GLU_gluLookAt" >&5
|
||||
echo "${ECHO_T}$ac_cv_lib_GLU_gluLookAt" >&6
|
||||
if test $ac_cv_lib_GLU_gluLookAt = yes; then
|
||||
X_PRE_LIBS="$X_PRE_LIBS -lGLU"
|
||||
OPENGL_LIBS="$OPENGL_LIBS -lGLU"
|
||||
GLU32FILES='$(GLU32FILES)'
|
||||
|
||||
fi
|
||||
|
@ -10689,6 +10691,66 @@ cat >>confdefs.h <<_ACEOF
|
|||
_ACEOF
|
||||
fi
|
||||
|
||||
echo "$as_me:$LINENO: checking for -lGL soname" >&5
|
||||
echo $ECHO_N "checking for -lGL soname... $ECHO_C" >&6
|
||||
if test "${ac_cv_lib_soname_GL+set}" = set; then
|
||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||
else
|
||||
ac_get_soname_save_LIBS=$LIBS
|
||||
LIBS="-lGL $X_LIBS $X_EXTRA_LIBS $LIBS"
|
||||
cat >conftest.$ac_ext <<_ACEOF
|
||||
#line $LINENO "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
/* Override any gcc2 internal prototype to avoid an error. */
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
#endif
|
||||
/* We use char because int might match the return type of a gcc2
|
||||
builtin and then its argument prototype would still apply. */
|
||||
char glXQueryExtension ();
|
||||
int
|
||||
main ()
|
||||
{
|
||||
glXQueryExtension ();
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
rm -f conftest.$ac_objext conftest$ac_exeext
|
||||
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||
(eval $ac_link) 2>&5
|
||||
ac_status=$?
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -s conftest$ac_exeext'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); }; }; then
|
||||
ac_cv_lib_soname_GL=`$ac_cv_path_LDD conftest$ac_exeext | grep libGL\\.so | sed 's/^[ ]*\([^ ]*\)[ ]*=>.*$/\1/'`
|
||||
if test "x$ac_cv_lib_soname_GL" = "x"
|
||||
then
|
||||
ac_cv_lib_soname_GL="libGL.so"
|
||||
fi
|
||||
else
|
||||
echo "$as_me: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
ac_cv_lib_soname_GL="libGL.so"
|
||||
fi
|
||||
rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
|
||||
LIBS=$ac_get_soname_save_LIBS
|
||||
fi
|
||||
echo "$as_me:$LINENO: result: $ac_cv_lib_soname_GL" >&5
|
||||
echo "${ECHO_T}$ac_cv_lib_soname_GL" >&6
|
||||
if test "x$ac_cv_lib_soname_GL" != xNONE
|
||||
then
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define SONAME_LIBGL "$ac_cv_lib_soname_GL"
|
||||
_ACEOF
|
||||
fi
|
||||
|
||||
echo "$as_me:$LINENO: checking for -lcups soname" >&5
|
||||
echo $ECHO_N "checking for -lcups soname... $ECHO_C" >&6
|
||||
if test "${ac_cv_lib_soname_cups+set}" = set; then
|
||||
|
@ -14433,6 +14495,7 @@ s,@XLIB@,$XLIB,;t t
|
|||
s,@XFILES@,$XFILES,;t t
|
||||
s,@OPENGLFILES@,$OPENGLFILES,;t t
|
||||
s,@GLU32FILES@,$GLU32FILES,;t t
|
||||
s,@OPENGL_LIBS@,$OPENGL_LIBS,;t t
|
||||
s,@NASLIBS@,$NASLIBS,;t t
|
||||
s,@CURSESLIBS@,$CURSESLIBS,;t t
|
||||
s,@sane_devel@,$sane_devel,;t t
|
||||
|
|
|
@ -139,6 +139,8 @@ AC_SUBST(OPENGLFILES)
|
|||
OPENGLFILES=""
|
||||
AC_SUBST(GLU32FILES)
|
||||
GLU32FILES=""
|
||||
AC_SUBST(OPENGL_LIBS)
|
||||
OPENGL_LIBS=""
|
||||
if test "$have_x" = "yes"
|
||||
then
|
||||
XLIB="-lXext -lX11"
|
||||
|
@ -280,7 +282,7 @@ This prevents linking to OpenGL. Delete the file and restart configure.])
|
|||
then
|
||||
dnl Check for the presence of the library
|
||||
AC_CHECK_LIB(GL,glXCreateContext,
|
||||
X_PRE_LIBS="$X_PRE_LIBS -lGL"
|
||||
OPENGL_LIBS="-lGL"
|
||||
,,
|
||||
$X_LIBS -lXext -lX11 -lm $X_EXTRA_LIBS)
|
||||
|
||||
|
@ -317,10 +319,10 @@ This prevents linking to OpenGL. Delete the file and restart configure.])
|
|||
fi
|
||||
dnl Check for GLU32 library.
|
||||
AC_CHECK_LIB(GLU,gluLookAt,
|
||||
[X_PRE_LIBS="$X_PRE_LIBS -lGLU"
|
||||
[OPENGL_LIBS="$OPENGL_LIBS -lGLU"
|
||||
GLU32FILES='$(GLU32FILES)']
|
||||
,,
|
||||
$X_LIBS $X_PRE_LIBS -lXext -lX11 -lm $X_EXTRA_LIBS
|
||||
$OPENGL_LIBS $X_LIBS $X_PRE_LIBS -lXext -lX11 -lm $X_EXTRA_LIBS
|
||||
)
|
||||
fi
|
||||
fi
|
||||
|
@ -845,6 +847,7 @@ then
|
|||
WINE_GET_SONAME(Xext,XextCreateExtension,[$X_LIBS -lX11 $X_EXTRA_LIBS])
|
||||
WINE_GET_SONAME(Xrender,XRenderQueryExtension,[$X_LIBS -lXext -lX11 $X_EXTRA_LIBS])
|
||||
WINE_GET_SONAME(freetype,FT_Init_FreeType,[$X_LIBS])
|
||||
WINE_GET_SONAME(GL,glXQueryExtension,[$X_LIBS $X_EXTRA_LIBS])
|
||||
WINE_GET_SONAME(cups,cupsGetDefault)
|
||||
fi
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ VPATH = @srcdir@
|
|||
MODULE = d3d8.dll
|
||||
IMPORTS = user32 gdi32 kernel32
|
||||
EXTRAINCL = @X_CFLAGS@
|
||||
EXTRALIBS = $(LIBUUID) @X_LIBS@ @X_PRE_LIBS@ @XLIB@ @X_EXTRA_LIBS@
|
||||
EXTRALIBS = $(LIBUUID) @X_LIBS@ @X_PRE_LIBS@ @XLIB@ @X_EXTRA_LIBS@ @OPENGL_LIBS@
|
||||
|
||||
LDDLLFLAGS = @LDDLLFLAGS@
|
||||
SYMBOLFILE = $(MODULE).tmp.o
|
||||
|
|
|
@ -5,7 +5,7 @@ VPATH = @srcdir@
|
|||
MODULE = ddraw.dll
|
||||
IMPORTS = user32 gdi32 kernel32
|
||||
EXTRAINCL = @X_CFLAGS@
|
||||
EXTRALIBS = $(LIBUUID) @X_LIBS@ @X_PRE_LIBS@ @XLIB@ @X_EXTRA_LIBS@
|
||||
EXTRALIBS = $(LIBUUID) @X_LIBS@ @X_PRE_LIBS@ @XLIB@ @X_EXTRA_LIBS@ @OPENGL_LIBS@
|
||||
|
||||
LDDLLFLAGS = @LDDLLFLAGS@
|
||||
SYMBOLFILE = $(MODULE).tmp.o
|
||||
|
|
|
@ -4,7 +4,7 @@ SRCDIR = @srcdir@
|
|||
VPATH = @srcdir@
|
||||
MODULE = glu32.dll
|
||||
EXTRAINCL = @X_CFLAGS@
|
||||
EXTRALIBS = @X_LIBS@ @X_PRE_LIBS@ @XLIB@ @X_EXTRA_LIBS@
|
||||
EXTRALIBS = @X_LIBS@ @X_PRE_LIBS@ @XLIB@ @X_EXTRA_LIBS@ @OPENGL_LIBS@
|
||||
|
||||
LDDLLFLAGS = @LDDLLFLAGS@
|
||||
SYMBOLFILE = $(MODULE).tmp.o
|
||||
|
|
|
@ -5,7 +5,7 @@ VPATH = @srcdir@
|
|||
MODULE = opengl32.dll
|
||||
IMPORTS = user32 gdi32 kernel32
|
||||
EXTRAINCL = @X_CFLAGS@
|
||||
EXTRALIBS = @X_LIBS@ @X_PRE_LIBS@ @XLIB@ @X_EXTRA_LIBS@
|
||||
EXTRALIBS = @X_LIBS@ @X_PRE_LIBS@ @XLIB@ @X_EXTRA_LIBS@ @OPENGL_LIBS@
|
||||
|
||||
LDDLLFLAGS = @LDDLLFLAGS@
|
||||
SYMBOLFILE = $(MODULE).tmp.o
|
||||
|
|
|
@ -68,6 +68,7 @@ int client_side_antialias_with_render = 1;
|
|||
unsigned int X11DRV_server_startticks;
|
||||
|
||||
static BOOL synchronous; /* run in synchronous mode? */
|
||||
static BOOL desktop_dbl_buf;
|
||||
static char *desktop_geometry;
|
||||
static XVisualInfo *desktop_vi;
|
||||
|
||||
|
@ -268,6 +269,9 @@ static void setup_options(void)
|
|||
if (!get_config_key( hkey, appkey, "ClientSideAntiAliasWithRender", buffer, sizeof(buffer) ))
|
||||
client_side_antialias_with_render = IS_OPTION_TRUE( buffer[0] );
|
||||
|
||||
if (!get_config_key( hkey, appkey, "DesktopDoubleBuffered", buffer, sizeof(buffer) ))
|
||||
desktop_dbl_buf = IS_OPTION_TRUE( buffer[0] );
|
||||
|
||||
if (appkey) RegCloseKey( appkey );
|
||||
RegCloseKey( hkey );
|
||||
}
|
||||
|
@ -313,8 +317,11 @@ static void process_attach(void)
|
|||
}
|
||||
else screen_depth = DefaultDepthOfScreen( screen );
|
||||
|
||||
/* Initialize OpenGL */
|
||||
X11DRV_OpenGL_Init(display);
|
||||
|
||||
/* If OpenGL is available, change the default visual, etc as necessary */
|
||||
if ((desktop_vi = X11DRV_setup_opengl_visual( display )))
|
||||
if (desktop_dbl_buf && (desktop_vi = X11DRV_setup_opengl_visual( display )))
|
||||
{
|
||||
visual = desktop_vi->visual;
|
||||
screen = ScreenOfDisplay(display, desktop_vi->screen);
|
||||
|
@ -352,10 +359,6 @@ static void process_attach(void)
|
|||
/* initialize DGA2 */
|
||||
X11DRV_XF86DGA2_Init();
|
||||
#endif
|
||||
#ifdef HAVE_OPENGL
|
||||
/* initialize GLX */
|
||||
/*X11DRV_GLX_Init();*/
|
||||
#endif
|
||||
|
||||
/* load display.dll */
|
||||
LoadLibrary16( "display" );
|
||||
|
@ -385,10 +388,6 @@ static void thread_detach(void)
|
|||
*/
|
||||
static void process_detach(void)
|
||||
{
|
||||
#ifdef HAVE_OPENGL
|
||||
/* cleanup GLX */
|
||||
/*X11DRV_GLX_Cleanup();*/
|
||||
#endif
|
||||
#ifdef HAVE_LIBXXF86DGA2
|
||||
/* cleanup DGA2 */
|
||||
X11DRV_XF86DGA2_Cleanup();
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "wine/port.h"
|
||||
|
||||
#include "ts_xlib.h"
|
||||
|
||||
|
@ -31,7 +32,7 @@
|
|||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(opengl);
|
||||
|
||||
#ifdef HAVE_OPENGL
|
||||
#if defined(HAVE_GL_GL_H) && defined(HAVE_GL_GLX_H)
|
||||
|
||||
#undef APIENTRY
|
||||
#undef CALLBACK
|
||||
|
@ -105,6 +106,50 @@ static void dump_PIXELFORMATDESCRIPTOR(PIXELFORMATDESCRIPTOR *ppfd) {
|
|||
DPRINTF("\n");
|
||||
}
|
||||
|
||||
/* No need to load any other libraries as according to the ABI, libGL should be self-sufficient and
|
||||
include all dependencies
|
||||
*/
|
||||
#ifndef SONAME_LIBGL
|
||||
#define SONAME_LIBGL "libGL.so"
|
||||
#endif
|
||||
|
||||
static void *opengl_handle;
|
||||
|
||||
#define MAKE_FUNCPTR(f) static typeof(f) * p##f;
|
||||
MAKE_FUNCPTR(glXChooseVisual)
|
||||
MAKE_FUNCPTR(glXGetConfig)
|
||||
MAKE_FUNCPTR(glXSwapBuffers)
|
||||
MAKE_FUNCPTR(glXQueryExtension)
|
||||
#undef MAKE_FUNCPTR
|
||||
|
||||
void X11DRV_OpenGL_Init(Display *display) {
|
||||
int error_base, event_base;
|
||||
|
||||
opengl_handle = wine_dlopen(SONAME_LIBGL, RTLD_NOW|RTLD_GLOBAL, NULL, 0);
|
||||
if (opengl_handle == NULL) return;
|
||||
|
||||
#define LOAD_FUNCPTR(f) if((p##f = wine_dlsym(opengl_handle, #f, NULL, 0)) == NULL) goto sym_not_found;
|
||||
LOAD_FUNCPTR(glXChooseVisual)
|
||||
LOAD_FUNCPTR(glXGetConfig)
|
||||
LOAD_FUNCPTR(glXSwapBuffers)
|
||||
LOAD_FUNCPTR(glXQueryExtension)
|
||||
#undef LOAD_FUNCPTR
|
||||
|
||||
wine_tsx11_lock();
|
||||
if (pglXQueryExtension(display, &event_base, &error_base) == True) {
|
||||
TRACE("GLX is up and running error_base = %d\n", error_base);
|
||||
} else {
|
||||
wine_dlclose(opengl_handle, NULL, 0);
|
||||
opengl_handle = NULL;
|
||||
}
|
||||
wine_tsx11_unlock();
|
||||
return;
|
||||
|
||||
sym_not_found:
|
||||
wine_dlclose(opengl_handle, NULL, 0);
|
||||
opengl_handle = NULL;
|
||||
}
|
||||
|
||||
/* X11DRV_ChoosePixelFormat
|
||||
|
||||
Equivalent of glXChooseVisual
|
||||
|
@ -121,6 +166,11 @@ int X11DRV_ChoosePixelFormat(X11DRV_PDEVICE *physDev,
|
|||
XVisualInfo *vis;
|
||||
int i;
|
||||
|
||||
if (opengl_handle == NULL) {
|
||||
ERR("No libGL on this box - disabling OpenGL support !\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (TRACE_ON(opengl)) {
|
||||
TRACE("(%p,%p)\n", physDev, ppfd);
|
||||
|
||||
|
@ -200,6 +250,11 @@ int X11DRV_DescribePixelFormat(X11DRV_PDEVICE *physDev,
|
|||
int value;
|
||||
int rb,gb,bb,ab;
|
||||
|
||||
if (opengl_handle == NULL) {
|
||||
ERR("No libGL on this box - disabling OpenGL support !\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
TRACE("(%p,%d,%d,%p)\n", physDev, iPixelFormat, nBytes, ppfd);
|
||||
|
||||
if (ppfd == NULL) {
|
||||
|
@ -225,7 +280,7 @@ int X11DRV_DescribePixelFormat(X11DRV_PDEVICE *physDev,
|
|||
|
||||
/* Create a 'standard' X Visual */
|
||||
wine_tsx11_lock();
|
||||
vis = glXChooseVisual(gdi_display, DefaultScreen(gdi_display), dblBuf);
|
||||
vis = pglXChooseVisual(gdi_display, DefaultScreen(gdi_display), dblBuf);
|
||||
wine_tsx11_unlock();
|
||||
|
||||
WARN("Uninitialized Visual. Creating standard (%p) !\n", vis);
|
||||
|
@ -248,26 +303,26 @@ int X11DRV_DescribePixelFormat(X11DRV_PDEVICE *physDev,
|
|||
ppfd->dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_GENERIC_ACCELERATED;
|
||||
/* Now the flags extraced from the Visual */
|
||||
wine_tsx11_lock();
|
||||
glXGetConfig(gdi_display, vis, GLX_DOUBLEBUFFER, &value); if (value) ppfd->dwFlags |= PFD_DOUBLEBUFFER;
|
||||
glXGetConfig(gdi_display, vis, GLX_STEREO, &value); if (value) ppfd->dwFlags |= PFD_STEREO;
|
||||
pglXGetConfig(gdi_display, vis, GLX_DOUBLEBUFFER, &value); if (value) ppfd->dwFlags |= PFD_DOUBLEBUFFER;
|
||||
pglXGetConfig(gdi_display, vis, GLX_STEREO, &value); if (value) ppfd->dwFlags |= PFD_STEREO;
|
||||
|
||||
/* Pixel type */
|
||||
glXGetConfig(gdi_display, vis, GLX_RGBA, &value);
|
||||
pglXGetConfig(gdi_display, vis, GLX_RGBA, &value);
|
||||
if (value)
|
||||
ppfd->iPixelType = PFD_TYPE_RGBA;
|
||||
else
|
||||
ppfd->iPixelType = PFD_TYPE_COLORINDEX;
|
||||
|
||||
/* Color bits */
|
||||
glXGetConfig(gdi_display, vis, GLX_BUFFER_SIZE, &value);
|
||||
pglXGetConfig(gdi_display, vis, GLX_BUFFER_SIZE, &value);
|
||||
ppfd->cColorBits = value;
|
||||
|
||||
/* Red, green, blue and alpha bits / shifts */
|
||||
if (ppfd->iPixelType == PFD_TYPE_RGBA) {
|
||||
glXGetConfig(gdi_display, vis, GLX_RED_SIZE, &rb);
|
||||
glXGetConfig(gdi_display, vis, GLX_GREEN_SIZE, &gb);
|
||||
glXGetConfig(gdi_display, vis, GLX_BLUE_SIZE, &bb);
|
||||
glXGetConfig(gdi_display, vis, GLX_ALPHA_SIZE, &ab);
|
||||
pglXGetConfig(gdi_display, vis, GLX_RED_SIZE, &rb);
|
||||
pglXGetConfig(gdi_display, vis, GLX_GREEN_SIZE, &gb);
|
||||
pglXGetConfig(gdi_display, vis, GLX_BLUE_SIZE, &bb);
|
||||
pglXGetConfig(gdi_display, vis, GLX_ALPHA_SIZE, &ab);
|
||||
|
||||
ppfd->cRedBits = rb;
|
||||
ppfd->cRedShift = gb + bb + ab;
|
||||
|
@ -290,11 +345,11 @@ int X11DRV_DescribePixelFormat(X11DRV_PDEVICE *physDev,
|
|||
/* Accums : to do ... */
|
||||
|
||||
/* Depth bits */
|
||||
glXGetConfig(gdi_display, vis, GLX_DEPTH_SIZE, &value);
|
||||
pglXGetConfig(gdi_display, vis, GLX_DEPTH_SIZE, &value);
|
||||
ppfd->cDepthBits = value;
|
||||
|
||||
/* stencil bits */
|
||||
glXGetConfig( gdi_display, vis, GLX_STENCIL_SIZE, &value );
|
||||
pglXGetConfig( gdi_display, vis, GLX_STENCIL_SIZE, &value );
|
||||
ppfd->cStencilBits = value;
|
||||
|
||||
wine_tsx11_unlock();
|
||||
|
@ -339,10 +394,15 @@ BOOL X11DRV_SetPixelFormat(X11DRV_PDEVICE *physDev,
|
|||
Swap the buffers of this DC
|
||||
*/
|
||||
BOOL X11DRV_SwapBuffers(X11DRV_PDEVICE *physDev) {
|
||||
if (opengl_handle == NULL) {
|
||||
ERR("No libGL on this box - disabling OpenGL support !\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
TRACE("(%p)\n", physDev);
|
||||
|
||||
wine_tsx11_lock();
|
||||
glXSwapBuffers(gdi_display, physDev->drawable);
|
||||
pglXSwapBuffers(gdi_display, physDev->drawable);
|
||||
wine_tsx11_unlock();
|
||||
|
||||
return TRUE;
|
||||
|
@ -357,22 +417,19 @@ BOOL X11DRV_SwapBuffers(X11DRV_PDEVICE *physDev) {
|
|||
*/
|
||||
XVisualInfo *X11DRV_setup_opengl_visual( Display *display )
|
||||
{
|
||||
int err_base, evt_base;
|
||||
XVisualInfo *visual = NULL;
|
||||
int dblBuf[]={GLX_RGBA,GLX_DEPTH_SIZE,16,GLX_DOUBLEBUFFER,None};
|
||||
|
||||
/* In order to support OpenGL or D3D, we require a double-buffered
|
||||
* visual */
|
||||
if (opengl_handle == NULL) return NULL;
|
||||
|
||||
/* In order to support OpenGL or D3D, we require a double-buffered visual */
|
||||
wine_tsx11_lock();
|
||||
if (glXQueryExtension(display, &err_base, &evt_base) == True)
|
||||
{
|
||||
int dblBuf[]={GLX_RGBA,GLX_DEPTH_SIZE,16,GLX_DOUBLEBUFFER,None};
|
||||
visual = glXChooseVisual(display, DefaultScreen(display), dblBuf);
|
||||
}
|
||||
visual = pglXChooseVisual(display, DefaultScreen(display), dblBuf);
|
||||
wine_tsx11_unlock();
|
||||
return visual;
|
||||
}
|
||||
|
||||
#else /* defined(HAVE_OPENGL) */
|
||||
#else /* no OpenGL includes */
|
||||
|
||||
int X11DRV_ChoosePixelFormat(X11DRV_PDEVICE *physDev,
|
||||
const PIXELFORMATDESCRIPTOR *ppfd) {
|
||||
|
|
|
@ -692,6 +692,9 @@
|
|||
/* Define to the soname of the libfreetype library. */
|
||||
#undef SONAME_LIBFREETYPE
|
||||
|
||||
/* Define to the soname of the libGL library. */
|
||||
#undef SONAME_LIBGL
|
||||
|
||||
/* Define to the soname of the libX11 library. */
|
||||
#undef SONAME_LIBX11
|
||||
|
||||
|
|
|
@ -226,6 +226,9 @@ extern BOOL X11DRV_XRender_ExtTextOut(X11DRV_PDEVICE *physDev, INT x, INT y, UIN
|
|||
UINT count, const INT *lpDx);
|
||||
extern void X11DRV_XRender_UpdateDrawable(X11DRV_PDEVICE *physDev);
|
||||
|
||||
extern void X11DRV_OpenGL_Init(Display *display);
|
||||
extern XVisualInfo *X11DRV_setup_opengl_visual(Display *display);
|
||||
|
||||
/* exported dib functions for now */
|
||||
|
||||
/* Additional info for DIB section objects */
|
||||
|
@ -440,6 +443,5 @@ extern void X11DRV_sync_window_style( Display *display, WND *win );
|
|||
extern int X11DRV_sync_whole_window_position( Display *display, WND *win, int zorder );
|
||||
extern int X11DRV_sync_client_window_position( Display *display, WND *win );
|
||||
extern void X11DRV_set_wm_hints( Display *display, WND *win );
|
||||
extern XVisualInfo *X11DRV_setup_opengl_visual( Display *display );
|
||||
|
||||
#endif /* __WINE_X11DRV_H */
|
||||
|
|
Loading…
Reference in New Issue