Added support for OpenGL.

This commit is contained in:
Lionel Ulmer 2000-05-12 20:18:14 +00:00 committed by Alexandre Julliard
parent 6f93bb4fea
commit bedf40b58b
36 changed files with 7391 additions and 400 deletions

View File

@ -86,6 +86,7 @@ LINTS = $(C_SRCS:.c=.ln)
X_DLLS = \
ddraw \
opengl32 \
x11drv
DLLS = \

579
configure vendored

File diff suppressed because it is too large Load Diff

View File

@ -126,6 +126,8 @@ AC_SUBST(X_DLLS)
X_DLLS=""
AC_SUBST(XFILES)
XFILES=""
AC_SUBST(OPENGLFILES)
OPENGLFILES=""
AC_SUBST(DGA_SRCS)
DGA_SRCS=""
AC_SUBST(DGA2_SRCS)
@ -195,64 +197,58 @@ then
AC_CHECK_LIB(Xxf86vm,XF86VidModeQueryExtension,AC_DEFINE(HAVE_LIBXXF86VM) X_PRE_LIBS="$X_PRE_LIBS -lXxf86vm",,$X_LIBS -lXext -lX11 $X_EXTRA_LIBS)
fi
dnl Check for the presence of Mesa
dnl Check for the presence of OpenGL
if test $OPENGL = "yes" -o $OPENGL = "normal"
then
AC_CHECK_HEADERS(GL/gl.h GL/glx.h)
if test "$ac_cv_header_GL_gl_h" = "yes" -a "$ac_cv_header_GL_glx_h" = "yes"
AC_CHECK_HEADERS(GL/gl.h GL/glx.h GL/glext.h)
if test "$ac_cv_header_GL_gl_h" = "yes" -a "$ac_cv_header_GL_glx_h" = "yes" -a "$ac_cv_header_GL_glext_h" = "yes"
then
dnl Check for some problems due to old Mesa versions
AC_CACHE_CHECK("for up-to-date OpenGL version", wine_cv_mesa_version_OK,
AC_CACHE_CHECK("for up-to-date OpenGL version", wine_cv_opengl_version_OK,
AC_TRY_COMPILE(
[#include <GL/gl.h>],
[GLenum test = GL_UNSIGNED_SHORT_5_6_5;],
[wine_cv_mesa_version_OK="yes"],
[wine_cv_mesa_version_OK="no"]
[wine_cv_opengl_version_OK="yes"],
[wine_cv_opengl_version_OK="no"]
)
)
dnl Check for the thread-safety of the OpenGL library
AC_CACHE_CHECK("for thread-safe OpenGL version",
wine_cv_mesa_version_threadsafe,
wine_cv_opengl_version_threadsafe,
[saved_libs=$LIBS
LIBS="$X_LIBS -lGL"
AC_TRY_LINK([],[pthread_getspecific();],
[wine_cv_mesa_version_threadsafe="yes"],
[wine_cv_mesa_version_threadsafe="no"])
[wine_cv_opengl_version_threadsafe="yes"],
[wine_cv_opengl_version_threadsafe="no"])
LIBS=$saved_libs]
)
if test "$wine_cv_mesa_version_OK" = "yes" -a \( "$wine_cv_mesa_version_threadsafe" = "no" -o $OPENGL = "yes" \)
if test "$wine_cv_opengl_version_OK" = "yes" -a \( "$wine_cv_opengl_version_threadsafe" = "no" -o $OPENGL = "yes" \)
then
dnl Check for the presense of the library
AC_CHECK_LIB(GL,glXCreateContext,
AC_DEFINE(HAVE_LIBMESAGL)
X_PRE_LIBS="$X_PRE_LIBS -lGL"
MESA_SRCS='$(MESA_SRCS)'
,,
$X_LIBS -lXext -lX11 -lm $X_EXTRA_LIBS)
if test "$ac_cv_lib_GL_glXCreateContext" = "no"
if test $ac_cv_lib_GL_glXCreateContext = "yes"
then
AC_CHECK_LIB(MesaGL,glXCreateContext,
AC_DEFINE(HAVE_LIBMESAGL)
X_PRE_LIBS="$X_PRE_LIBS -lMesaGL"
MESA_SRCS='$(MESA_SRCS)'
,,
$X_LIBS -lXext -lX11 -lm $X_EXTRA_LIBS)
fi
dnl Check for the Color Table and Paletted Texture extensions
AC_CACHE_CHECK("for the OpenGL Color Index extension",dummy,
AC_TRY_COMPILE([#include <GL/gl.h>],
[GLenum test = GL_COLOR_INDEX8_EXT;],
[AC_DEFINE(HAVE_GL_COLOR_TABLE)],))
dnl Check for the Color Table and Paletted Texture extensions
AC_CACHE_CHECK("for the OpenGL Color Index extension",dummy,
AC_TRY_COMPILE([#include <GL/gl.h>],
[GLenum test = GL_COLOR_INDEX8_EXT;],
[AC_DEFINE(HAVE_GL_COLOR_TABLE)],))
AC_CHECK_LIB(GL,glColorTableEXT,AC_DEFINE(HAVE_GL_PALETTED_TEXTURE),,$X_LIBS -lXext -lX11 -lm $X_EXTRA_LIBS)
AC_CHECK_LIB(GL,glXGetProcAddressARB,AC_DEFINE(HAVE_GLX_GETPROCADDRESS),,$X_LIBS -lXext -lX11 -lm $X_EXTRA_LIBS)
if test "$ac_cv_lib_GL_glXCreateContext" = "no"
then
AC_CHECK_LIB(MesaGL,glColorTableEXT,AC_DEFINE(HAVE_GL_PALETTED_TEXTURE),,$X_LIBS -lXext -lX11 -lm $X_EXTRA_LIBS)
else
AC_CHECK_LIB(GL,glColorTableEXT,AC_DEFINE(HAVE_GL_PALETTED_TEXTURE),,$X_LIBS -lXext -lX11 -lm $X_EXTRA_LIBS)
if test $ac_cv_lib_GL_glXGetProcAddressARB = "yes"
then
AC_DEFINE(HAVE_OPENGL)
OPENGLFILES='$(OPENGLFILES)'
fi
fi
fi
fi
@ -994,6 +990,7 @@ dlls/olecli/Makefile
dlls/oledlg/Makefile
dlls/olepro32/Makefile
dlls/olesvr/Makefile
dlls/opengl32/Makefile
dlls/psapi/Makefile
dlls/rasapi32/Makefile
dlls/richedit/Makefile
@ -1108,14 +1105,14 @@ then
echo "*** reentrant version of libc."
fi
if test "$wine_cv_mesa_version_OK" = "no"
if test "$wine_cv_opengl_version_OK" = "no"
then
echo
echo "*** Warning: old Mesa headers detected. Wine will be built without Direct3D"
echo "*** support. Consider upgrading your Mesa libraries (http://www.mesa3d.org/)."
fi
if test "$wine_cv_mesa_version_threadsafe" = "yes" -a $OPENGL = "normal"
if test "$wine_cv_opengl_version_threadsafe" = "yes" -a $OPENGL = "normal"
then
echo
echo "*** Warning: the OpenGL version you have installed relies on libpthread for"
@ -1124,7 +1121,7 @@ then
echo "*** start configure with '--enable-opengl' to force OpenGL support."
fi
if test "$wine_cv_mesa_version_threadsafe" = "yes" -a $OPENGL = "yes"
if test "$wine_cv_opengl_version_threadsafe" = "yes" -a $OPENGL = "yes"
then
echo
echo "*** Warning: you explicitely linked in a thread-safe OpenGL version. If you"

View File

@ -3,8 +3,12 @@ TOPOBJDIR = ..
SRCDIR = @srcdir@
VPATH = @srcdir@
OPENGLFILES= \
opengl32/libopengl32.@LIBEXT@
XFILES = \
ddraw/libddraw.@LIBEXT@ \
@OPENGLFILES@ \
x11drv/libx11drv.@LIBEXT@
DLLFILES = \
@ -118,6 +122,7 @@ SUBDIRS = \
oledlg \
olepro32 \
olesvr \
opengl32 \
psapi \
rasapi32 \
richedit \
@ -246,6 +251,9 @@ libolepro32.@LIBEXT@: olepro32/libolepro32.@LIBEXT@
libolesvr32.@LIBEXT@ libolesvr.@LIBEXT@: olesvr/libolesvr32.@LIBEXT@
$(RM) $@ && $(LN_S) olesvr/libolesvr32.@LIBEXT@ $@
libopengl32.@LIBEXT@: opengl32/libopengl32.@LIBEXT@
$(RM) $@ && $(LN_S) opengl32/libopengl32.@LIBEXT@ $@
libpsapi.@LIBEXT@: psapi/libpsapi.@LIBEXT@
$(RM) $@ && $(LN_S) psapi/libpsapi.@LIBEXT@ $@
@ -325,6 +333,7 @@ msvideo/libmsvfw32.so: libwinmm.so
oleaut32/liboleaut32.so: libole32.so libcomctl32.so
olecli/libolecli32.so: libolesvr32.so libole32.so
olepro32/libolepro32.so: liboleaut32.so libole32.so
opengl32/libopengl32.so: libx11drv.so libgdi32.so
shell32/libshell32.so: libole32.so
urlmon/liburlmon.so: libole32.so
version/libversion.so: liblz32.so

View File

@ -14,10 +14,14 @@
#include "x11drv.h"
#include "d3d_private.h"
#include "mesa_private.h"
DEFAULT_DEBUG_CHANNEL(ddraw)
#ifdef HAVE_MESAGL
#ifdef HAVE_OPENGL
#define D3DVPRIVATE(x) mesa_d3dv_private*dvpriv=((mesa_d3dv_private*)x->private)
#define D3DLPRIVATE(x) mesa_d3dl_private*dlpriv=((mesa_d3dl_private*)x->private)
static ICOM_VTABLE(IDirect3DViewport2) viewport2_vtable;
@ -44,6 +48,7 @@ LPDIRECT3DVIEWPORT2 d3dviewport2_create(IDirect3D2Impl* d3d2)
IDirect3DViewport2Impl* vp;
vp = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirect3DViewport2Impl));
vp->private = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(mesa_d3dv_private));
vp->ref = 1;
ICOM_VTBL(vp) = &viewport2_vtable;
vp->d3d.d3d2 = d3d2;
@ -54,7 +59,7 @@ LPDIRECT3DVIEWPORT2 d3dviewport2_create(IDirect3D2Impl* d3d2)
vp->lights = NULL;
vp->nextlight = GL_LIGHT0;
((mesa_d3dv_private *) vp->private)->nextlight = GL_LIGHT0;
return (LPDIRECT3DVIEWPORT2)vp;
}
@ -64,6 +69,7 @@ LPDIRECT3DVIEWPORT d3dviewport_create(IDirect3DImpl* d3d1)
IDirect3DViewport2Impl* vp;
vp = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirect3DViewport2Impl));
vp->private = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(mesa_d3dv_private));
vp->ref = 1;
ICOM_VTBL(vp) = &viewport2_vtable;
vp->d3d.d3d1 = d3d1;
@ -74,7 +80,7 @@ LPDIRECT3DVIEWPORT d3dviewport_create(IDirect3DImpl* d3d1)
vp->lights = NULL;
vp->nextlight = GL_LIGHT0;
((mesa_d3dv_private *) vp->private)->nextlight = GL_LIGHT0;
return (LPDIRECT3DVIEWPORT) vp;
}
@ -83,7 +89,7 @@ LPDIRECT3DVIEWPORT d3dviewport_create(IDirect3DImpl* d3d1)
* IDirect3DViewport2 methods
*/
static HRESULT WINAPI IDirect3DViewport2Impl_QueryInterface(LPDIRECT3DVIEWPORT2 iface,
HRESULT WINAPI IDirect3DViewport2Impl_QueryInterface(LPDIRECT3DVIEWPORT2 iface,
REFIID riid,
LPVOID* ppvObj)
{
@ -96,7 +102,7 @@ static HRESULT WINAPI IDirect3DViewport2Impl_QueryInterface(LPDIRECT3DVIEWPORT2
static ULONG WINAPI IDirect3DViewport2Impl_AddRef(LPDIRECT3DVIEWPORT2 iface)
ULONG WINAPI IDirect3DViewport2Impl_AddRef(LPDIRECT3DVIEWPORT2 iface)
{
ICOM_THIS(IDirect3DViewport2Impl,iface);
TRACE("(%p)->()incrementing from %lu.\n", This, This->ref );
@ -106,7 +112,7 @@ static ULONG WINAPI IDirect3DViewport2Impl_AddRef(LPDIRECT3DVIEWPORT2 iface)
static ULONG WINAPI IDirect3DViewport2Impl_Release(LPDIRECT3DVIEWPORT2 iface)
ULONG WINAPI IDirect3DViewport2Impl_Release(LPDIRECT3DVIEWPORT2 iface)
{
ICOM_THIS(IDirect3DViewport2Impl,iface);
FIXME("(%p)->() decrementing from %lu.\n", This, This->ref );
@ -120,7 +126,7 @@ static ULONG WINAPI IDirect3DViewport2Impl_Release(LPDIRECT3DVIEWPORT2 iface)
}
/*** IDirect3DViewport methods ***/
static HRESULT WINAPI IDirect3DViewport2Impl_Initialize(LPDIRECT3DVIEWPORT2 iface,
HRESULT WINAPI IDirect3DViewport2Impl_Initialize(LPDIRECT3DVIEWPORT2 iface,
LPDIRECT3D d3d)
{
ICOM_THIS(IDirect3DViewport2Impl,iface);
@ -129,7 +135,7 @@ static HRESULT WINAPI IDirect3DViewport2Impl_Initialize(LPDIRECT3DVIEWPORT2 ifac
return DD_OK;
}
static HRESULT WINAPI IDirect3DViewport2Impl_GetViewport(LPDIRECT3DVIEWPORT2 iface,
HRESULT WINAPI IDirect3DViewport2Impl_GetViewport(LPDIRECT3DVIEWPORT2 iface,
LPD3DVIEWPORT lpvp)
{
ICOM_THIS(IDirect3DViewport2Impl,iface);
@ -143,7 +149,7 @@ static HRESULT WINAPI IDirect3DViewport2Impl_GetViewport(LPDIRECT3DVIEWPORT2 ifa
return DD_OK;
}
static HRESULT WINAPI IDirect3DViewport2Impl_SetViewport(LPDIRECT3DVIEWPORT2 iface,
HRESULT WINAPI IDirect3DViewport2Impl_SetViewport(LPDIRECT3DVIEWPORT2 iface,
LPD3DVIEWPORT lpvp)
{
ICOM_THIS(IDirect3DViewport2Impl,iface);
@ -167,7 +173,7 @@ static HRESULT WINAPI IDirect3DViewport2Impl_SetViewport(LPDIRECT3DVIEWPORT2 ifa
return DD_OK;
}
static HRESULT WINAPI IDirect3DViewport2Impl_TransformVertices(LPDIRECT3DVIEWPORT2 iface,
HRESULT WINAPI IDirect3DViewport2Impl_TransformVertices(LPDIRECT3DVIEWPORT2 iface,
DWORD dwVertexCount,
LPD3DTRANSFORMDATA lpData,
DWORD dwFlags,
@ -180,7 +186,7 @@ static HRESULT WINAPI IDirect3DViewport2Impl_TransformVertices(LPDIRECT3DVIEWPOR
return DD_OK;
}
static HRESULT WINAPI IDirect3DViewport2Impl_LightElements(LPDIRECT3DVIEWPORT2 iface,
HRESULT WINAPI IDirect3DViewport2Impl_LightElements(LPDIRECT3DVIEWPORT2 iface,
DWORD dwElementCount,
LPD3DLIGHTDATA lpData)
{
@ -190,7 +196,7 @@ static HRESULT WINAPI IDirect3DViewport2Impl_LightElements(LPDIRECT3DVIEWPORT2 i
return DD_OK;
}
static HRESULT WINAPI IDirect3DViewport2Impl_SetBackground(LPDIRECT3DVIEWPORT2 iface,
HRESULT WINAPI IDirect3DViewport2Impl_SetBackground(LPDIRECT3DVIEWPORT2 iface,
D3DMATERIALHANDLE hMat)
{
ICOM_THIS(IDirect3DViewport2Impl,iface);
@ -199,7 +205,7 @@ static HRESULT WINAPI IDirect3DViewport2Impl_SetBackground(LPDIRECT3DVIEWPORT2 i
return DD_OK;
}
static HRESULT WINAPI IDirect3DViewport2Impl_GetBackground(LPDIRECT3DVIEWPORT2 iface,
HRESULT WINAPI IDirect3DViewport2Impl_GetBackground(LPDIRECT3DVIEWPORT2 iface,
LPD3DMATERIALHANDLE lphMat,
LPBOOL lpValid)
{
@ -209,7 +215,7 @@ static HRESULT WINAPI IDirect3DViewport2Impl_GetBackground(LPDIRECT3DVIEWPORT2 i
return DD_OK;
}
static HRESULT WINAPI IDirect3DViewport2Impl_SetBackgroundDepth(LPDIRECT3DVIEWPORT2 iface,
HRESULT WINAPI IDirect3DViewport2Impl_SetBackgroundDepth(LPDIRECT3DVIEWPORT2 iface,
LPDIRECTDRAWSURFACE lpDDSurface)
{
ICOM_THIS(IDirect3DViewport2Impl,iface);
@ -218,7 +224,7 @@ static HRESULT WINAPI IDirect3DViewport2Impl_SetBackgroundDepth(LPDIRECT3DVIEWPO
return DD_OK;
}
static HRESULT WINAPI IDirect3DViewport2Impl_GetBackgroundDepth(LPDIRECT3DVIEWPORT2 iface,
HRESULT WINAPI IDirect3DViewport2Impl_GetBackgroundDepth(LPDIRECT3DVIEWPORT2 iface,
LPDIRECTDRAWSURFACE* lplpDDSurface,
LPBOOL lpValid)
{
@ -228,7 +234,7 @@ static HRESULT WINAPI IDirect3DViewport2Impl_GetBackgroundDepth(LPDIRECT3DVIEWPO
return DD_OK;
}
static HRESULT WINAPI IDirect3DViewport2Impl_Clear(LPDIRECT3DVIEWPORT2 iface,
HRESULT WINAPI IDirect3DViewport2Impl_Clear(LPDIRECT3DVIEWPORT2 iface,
DWORD dwCount,
LPD3DRECT lpRects,
DWORD dwFlags)
@ -257,7 +263,7 @@ static HRESULT WINAPI IDirect3DViewport2Impl_Clear(LPDIRECT3DVIEWPORT2 iface,
return DD_OK;
}
static HRESULT WINAPI IDirect3DViewport2Impl_AddLight(LPDIRECT3DVIEWPORT2 iface,
HRESULT WINAPI IDirect3DViewport2Impl_AddLight(LPDIRECT3DVIEWPORT2 iface,
LPDIRECT3DLIGHT lpLight)
{
ICOM_THIS(IDirect3DViewport2Impl,iface);
@ -270,6 +276,9 @@ static HRESULT WINAPI IDirect3DViewport2Impl_AddLight(LPDIRECT3DVIEWPORT2 iface,
/* If active, activate the light */
if (This->device.active_device1 != NULL) {
D3DVPRIVATE(This);
D3DLPRIVATE(ilpLight);
/* Get the rendering context */
if (This->use_d3d2)
This->device.active_device2->set_context(This->device.active_device2);
@ -277,14 +286,14 @@ static HRESULT WINAPI IDirect3DViewport2Impl_AddLight(LPDIRECT3DVIEWPORT2 iface,
This->device.active_device1->set_context(This->device.active_device1);
/* Activate the light */
ilpLight->light_num = This->nextlight++;
dlpriv->light_num = dvpriv->nextlight++;
ilpLight->activate(ilpLight);
}
return DD_OK;
}
static HRESULT WINAPI IDirect3DViewport2Impl_DeleteLight(LPDIRECT3DVIEWPORT2 iface,
HRESULT WINAPI IDirect3DViewport2Impl_DeleteLight(LPDIRECT3DVIEWPORT2 iface,
LPDIRECT3DLIGHT lpLight)
{
ICOM_THIS(IDirect3DViewport2Impl,iface);
@ -293,7 +302,7 @@ static HRESULT WINAPI IDirect3DViewport2Impl_DeleteLight(LPDIRECT3DVIEWPORT2 ifa
return DD_OK;
}
static HRESULT WINAPI IDirect3DViewport2Impl_NextLight(LPDIRECT3DVIEWPORT2 iface,
HRESULT WINAPI IDirect3DViewport2Impl_NextLight(LPDIRECT3DVIEWPORT2 iface,
LPDIRECT3DLIGHT lpLight,
LPDIRECT3DLIGHT* lplpLight,
DWORD dwFlags)
@ -305,7 +314,7 @@ static HRESULT WINAPI IDirect3DViewport2Impl_NextLight(LPDIRECT3DVIEWPORT2 iface
}
/*** IDirect3DViewport2 methods ***/
static HRESULT WINAPI IDirect3DViewport2Impl_GetViewport2(LPDIRECT3DVIEWPORT2 iface,
HRESULT WINAPI IDirect3DViewport2Impl_GetViewport2(LPDIRECT3DVIEWPORT2 iface,
LPD3DVIEWPORT2 lpViewport2)
{
ICOM_THIS(IDirect3DViewport2Impl,iface);
@ -319,7 +328,7 @@ static HRESULT WINAPI IDirect3DViewport2Impl_GetViewport2(LPDIRECT3DVIEWPORT2 if
return DD_OK;
}
static HRESULT WINAPI IDirect3DViewport2Impl_SetViewport2(LPDIRECT3DVIEWPORT2 iface,
HRESULT WINAPI IDirect3DViewport2Impl_SetViewport2(LPDIRECT3DVIEWPORT2 iface,
LPD3DVIEWPORT2 lpViewport2)
{
ICOM_THIS(IDirect3DViewport2Impl,iface);
@ -372,7 +381,7 @@ static ICOM_VTABLE(IDirect3DViewport2) viewport2_vtable =
IDirect3DViewport2Impl_SetViewport2
};
#else /* HAVE_MESAGL */
#else /* HAVE_OPENGL */
LPDIRECT3DVIEWPORT d3dviewport_create(IDirect3DImpl* d3d1) {
ERR("Should not be called...\n");
@ -384,4 +393,4 @@ LPDIRECT3DVIEWPORT2 d3dviewport2_create(IDirect3D2Impl* d3d2) {
return NULL;
}
#endif /* HAVE_MESAGL */
#endif /* HAVE_OPENGL */

View File

@ -345,7 +345,7 @@ static void fill_caps(LPDDCAPS caps) {
DDSCAPS_FRONTBUFFER | DDSCAPS_LOCALVIDMEM | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN |
/*DDSCAPS_OVERLAY |*/ DDSCAPS_PALETTE | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY |
DDSCAPS_VIDEOMEMORY | DDSCAPS_VISIBLE;
#ifdef HAVE_MESAGL
#ifdef HAVE_OPENGL
caps->dwCaps |= DDCAPS_3D | DDCAPS_ZBLTS;
caps->dwCaps2 |= DDCAPS2_NO2DDURING3DSCENE;
caps->ddsCaps.dwCaps |= DDSCAPS_3DDEVICE | DDSCAPS_MIPMAP | DDSCAPS_TEXTURE | DDSCAPS_ZBUFFER;

View File

@ -553,7 +553,7 @@ static void fill_caps(LPDDCAPS caps) {
DDSCAPS_FRONTBUFFER | DDSCAPS_LOCALVIDMEM | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN |
/*DDSCAPS_OVERLAY |*/ DDSCAPS_PALETTE | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY |
DDSCAPS_VIDEOMEMORY | DDSCAPS_VISIBLE;
#ifdef HAVE_MESAGL
#ifdef HAVE_OPENGL
caps->dwCaps |= DDCAPS_3D | DDCAPS_ZBLTS;
caps->dwCaps2 |= DDCAPS2_NO2DDURING3DSCENE;
caps->ddsCaps.dwCaps |= DDSCAPS_3DDEVICE | DDSCAPS_MIPMAP | DDSCAPS_TEXTURE | DDSCAPS_ZBUFFER;
@ -650,7 +650,7 @@ static HRESULT WINAPI Xlib_IDirectDraw2Impl_QueryInterface(
return S_OK;
}
#ifdef HAVE_MESAGL
#ifdef HAVE_OPENGL
if ( IsEqualGUID( &IID_IDirect3D, refiid ) )
return create_direct3d(obj,This);
if ( IsEqualGUID( &IID_IDirect3D2, refiid ) )

View File

@ -17,7 +17,7 @@
#include "debugtools.h"
#include "x11_private.h"
#ifdef HAVE_MESAGL
#ifdef HAVE_OPENGL
/* for d3d texture stuff */
# include "mesa_private.h"
#endif
@ -59,7 +59,7 @@ HRESULT WINAPI Xlib_IDirectDrawSurface4Impl_QueryInterface(
TRACE(" Creating IDirectDrawSurface interface (%p)\n", *obj);
return S_OK;
}
#ifdef HAVE_MESAGL
#ifdef HAVE_OPENGL
if ( IsEqualGUID( &IID_IDirect3DTexture2, refiid ) ) {
/* Texture interface */
*obj = d3dtexture2_create(This);
@ -74,7 +74,7 @@ HRESULT WINAPI Xlib_IDirectDrawSurface4Impl_QueryInterface(
TRACE(" Creating IDirect3DTexture interface (%p)\n", *obj);
return S_OK;
}
#endif /* HAVE_MESAGL */
#endif /* HAVE_OPENGL */
FIXME("(%p):interface for IID %s NOT found!\n",This,debugstr_guid(refiid));
return OLE_E_ENUM_NOMORE;
}

View File

@ -40,14 +40,6 @@ typedef struct mesa_d3dv_private
GLenum nextlight;
} mesa_d3dv_private;
#ifdef USE_OSMESA
# define LEAVE_GL() ;
# define ENTER_GL() ;
#else
# define LEAVE_GL() LeaveCriticalSection( &X11DRV_CritSection )
# define ENTER_GL() EnterCriticalSection( &X11DRV_CritSection )
#endif
/* Matrix copy WITH transposition */
#define conv_mat2(mat,gl_mat) \
{ \

3
dlls/opengl32/.cvsignore Normal file
View File

@ -0,0 +1,3 @@
*.spec.c
Makefile
libopengl32.so.1.0

20
dlls/opengl32/Makefile.in Normal file
View File

@ -0,0 +1,20 @@
TOPSRCDIR = @top_srcdir@
TOPOBJDIR = ../..
SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = opengl32
SOVERSION = 1.0
IMPORTS = \
x11drv \
gdi32
SPEC_SRCS = opengl32.spec
C_SRCS = \
wgl.c \
opengl_norm.c \
opengl_ext.c
@MAKE_DLL_RULES@
### Dependencies:

145
dlls/opengl32/make_opengl_ext Executable file
View File

@ -0,0 +1,145 @@
#!/usr/bin/perl -w
print "
/* Auto-generated file... Do not edit ! */
#include \"config.h\"
#include \"wine_gl.h\"
#include \"opengl_ext.h\"
";
#
# First, create a hash-table with all function defined in opengl32.spec
#
%opengl_std = ();
open(SPEC, "dlls/opengl32/opengl32.spec") || die "Could not open spec file";
foreach (<SPEC>) {
if (($_ =~ /@/) && ($_ !~ /wgl/)) {
($name) = ($_ =~ /stdcall (\w*)\(/);
$opengl_std{$name} = 1;
}
}
close(SPEC);
#
# Now, the functions from the include file
#
%opengl_ext = ();
open(INC, "/home/ulmer/OpenGL/glext_proto.h") || die "Could not open GL/glext.h";
while ($line = <INC>) {
if ($line =~ /extern.*APIENTRY/) {
# Start of a function declaration
($ret, $name, $args) = ($line =~ /extern (\w*) APIENTRY *(\w*) *\((.*)\)/);
# Now, remove all function already defined in opengl32.spec
if ($opengl_std{$name}) {
# Do nothing as we already have these functions
} else {
# Now, get the typedef name (the line after)
($typedef_name) = (<INC> =~ /\(APIENTRY *\* *(\w*) *\)/);
# After that, parse the arguments
@args = split /,/, $args;
$args_ref = [];
foreach (@args) {
push @$args_ref, $_;
}
$opengl_ext{$name} = [ $ret, $typedef_name, $args_ref ];
}
}
}
close(INC);
#
# After that, generate the file itself....
#
print "/* These will be filled during a wglGetProcAddress call */\n";
$num = 0;
foreach $name (sort keys(%opengl_ext)) {
$ref = $opengl_ext{$name};
$arg_ref = $$ref[2];
@larg = @$arg_ref;
print "$$ref[0] (*func_$name)(";
$farg = shift @larg;
print "$farg";
foreach (@larg) {
print ", $_";
}
print ") = (void *) 0xdeadbeef;\n";
$num++;
}
print "\n";
print "/* The function prototypes */\n";
foreach $name (sort keys(%opengl_ext)) {
$ref = $opengl_ext{$name};
$arg_ref = $$ref[2];
@larg = @$arg_ref;
print "$$ref[0] WINAPI wine_$name(";
$farg = shift @larg;
print "$farg";
foreach (@larg) {
print ", $_";
}
print ") ;\n";
}
print "\n";
print "/* The table giving the correspondance between names and functions */\n";
print "int extension_registry_size = $num;\n";
print "OpenGL_extension extension_registry[] = {\n";
foreach $name (sort keys(%opengl_ext)) {
$num--;
print " { \"$name\", (void *) wine_$name, (void **) (&func_$name) }";
if ($num) {
print ",";
}
print "\n";
}
print "};\n";
print "\n";
print "/* Now, the function declarations */\n";
foreach $name (sort keys(%opengl_ext)) {
$ref = $opengl_ext{$name};
$arg_ref = $$ref[2];
print "$$ref[0] WINAPI wine_$name(";
$farg = shift @$arg_ref;
$num = 0;
if ($farg !~ /void/) {
print "$farg arg_0";
$num++;
foreach (@$arg_ref) {
print ", $_ arg_$num";
$num++;
}
}
print ") {\n";
if ($$ref[0] !~ /void/) {
print " $$ref[0] ret;\n"
}
print " ENTER_GL();\n";
print " ";
if ($$ref[0] !~ /void/) {
print " ret = ";
}
print "func_$name(";
if ($num > 0) {
print "arg_0";
for ($i = 1; $i < $num; $i++) {
print ", arg_$i";
}
}
print ");\n";
print " LEAVE_GL();\n";
if ($$ref[0] !~ /void/) {
print " return ret;\n"
}
print "}\n\n";
}

91
dlls/opengl32/make_opengl_norm Executable file
View File

@ -0,0 +1,91 @@
#!/usr/bin/perl -w
print "
/* Auto-generated file... Do not edit ! */
#include \"config.h\"
#include \"wine_gl.h\"
";
#
# Now, the functions from the include file
#
open(INC, "/usr/X11R6/include/GL/gl.h") || die "Could not open GL/gl.h";
while ($line = <INC>) {
if ($line =~ /GLAPI.*GLAPIENTRY/) {
# Start of a function declaration
($ret, $name, $args) = ($line =~ /GLAPI (.*) GLAPIENTRY *(.*)\((.*)/);
# Remove all extensions except the multitexture one (see OpenGL ABI)
if (($name !~ /(MESA|PGI|ARB|EXT)/) ||
($name =~ /MultiTexCoord/) ||
($name =~ /ActiveTextureARB/)) {
print "$ret WINAPI wine_$name(";
@rargs = ();
@names = ();
# Now, get the parameters
while (1) {
@args = split /,|\)/, $args;
foreach (@args) {
if ($_ =~ /[a-z,A-Z]/) {
($a) = ($_ =~ /^\s*(.*)\s*$/);
if ($a =~ /\*\*/) {
($var) = ($a =~ /\*\*(\w*)/);
} elsif ($a =~ /\*/) {
($var) = ($a =~ /\*(\w*)/);
} else {
($var) = ($a =~ /\s(\w*)/);
}
@rargs = (@rargs, $a);
if ($var !~ /void/) {
@names = (@names, $var);
}
}
}
if ($args !~ /\)/) {
$args = <INC>;
} else {
last;
}
}
print shift @rargs;
foreach (@rargs) {
print ", $_";
}
print ") {\n";
if ($ret !~ /void/) {
print " $ret ret;\n";
}
print " ENTER_GL();\n";
if ($ret !~ /void/) {
print " ret = ";
} else {
print " ";
}
print "$name(";
$farg = shift @names;
if ($farg) {
print "$farg";
foreach (@names) {
print ", $_";
}
}
print ");\n";
print " LEAVE_GL();\n";
if ($ret !~ /void/) {
print " return ret;\n";
}
print "}\n\n";
}
}
}
close(INC);

86
dlls/opengl32/make_opengl_spec Executable file
View File

@ -0,0 +1,86 @@
#!/usr/bin/perl -w
#
# First, the basics and the wgl functions
#
print "
name opengl32
type win32
@ stdcall wglCreateContext(long) wglCreateContext
@ stdcall wglCreateLayerContext(long long) wglCreateLayerContext
@ stdcall wglCopyContext(long long long) wglCopyContext
@ stdcall wglDeleteContext(long) wglDeleteContext
@ stdcall wglDescribeLayerPlane(long long long long ptr) wglDescribeLayerPlane
@ stdcall wglGetCurrentContext() wglGetCurrentContext
@ stdcall wglGetCurrentDC() wglGetCurrentDC
@ stdcall wglGetLayerPaletteEntries(long long long long ptr) wglGetLayerPaletteEntries
@ stdcall wglGetProcAddress(str) wglGetProcAddress
@ stdcall wglMakeCurrent(long long) wglMakeCurrent
@ stdcall wglRealizeLayerPalette(long long long) wglRealizeLayerPalette
@ stdcall wglSetLayerPaletteEntries(long long long long ptr) wglSetLayerPaletteEntries
@ stdcall wglShareLists(long long) wglShareLists
@ stdcall wglSwapLayerBuffers(long long) wglSwapLayerBuffers
@ stdcall wglUseFontBitmaps(long long long long) wglUseFontBitmaps
@ stdcall wglUseFontOutlines(long long long long long long long) wglUseFontOutlines
@ stub glGetLevelParameterfv
@ stub glGetLevelParameteriv
@ stub wglUseFontBitmapsA
@ stub wglUseFontOutlinesA
@ forward wglChoosePixelFormat GDI32.ChoosePixelFormat
@ forward wglDescribePixelFormat GDI32.DescribePixelFormat
@ forward wglGetPixelFormat GDI32.GetPixelFormat
@ forward wglSetPixelFormat GDI32.SetPixelFormat
@ forward wglSwapBuffers GDI32.SwapBuffers
";
#
# Now, the functions from the include file
#
open(INC, "/usr/X11R6/include/GL/gl.h") || die "Could not open GL/gl.h";
while ($line = <INC>) {
if ($line =~ /GLAPI.*GLAPIENTRY/) {
# Start of a function declaration
($name, $args) = ($line =~ /GLAPIENTRY *(.*)\((.*)/);
# Remove all extensions except the multitexture one (see OpenGL ABI)
if (($name !~ /(MESA|PGI|ARB|EXT)/) ||
($name =~ /MultiTexCoord/) ||
($name =~ /ActiveTextureARB/)) {
print "@ stdcall $name(";
# Now, get the parameters
while (1) {
@args = split /,/, $args;
foreach (@args) {
if ($_ =~ /\)/) {
($_) = ($_ =~ /(.*)\)/);
}
if ($_ =~ /\*/) {
print "ptr ";
} elsif ($_ =~ /[a-zA-Z]/) {
($type) = ($_ =~ /^ *(.*) +.*/);
if ($type =~ /double/) {
print "double ";
} elsif ($type !~ /void/) {
print "long ";
}
}
}
if ($args !~ /\)/) {
$args = <INC>;
} else {
last;
}
}
print ") wine_$name\n";
}
}
}
close(INC);

437
dlls/opengl32/opengl32.spec Normal file
View File

@ -0,0 +1,437 @@
name opengl32
type win32
@ stdcall wglCreateContext(long) wglCreateContext
@ stdcall wglCreateLayerContext(long long) wglCreateLayerContext
@ stdcall wglCopyContext(long long long) wglCopyContext
@ stdcall wglDeleteContext(long) wglDeleteContext
@ stdcall wglDescribeLayerPlane(long long long long ptr) wglDescribeLayerPlane
@ stdcall wglGetCurrentContext() wglGetCurrentContext
@ stdcall wglGetCurrentDC() wglGetCurrentDC
@ stdcall wglGetLayerPaletteEntries(long long long long ptr) wglGetLayerPaletteEntries
@ stdcall wglGetProcAddress(str) wglGetProcAddress
@ stdcall wglMakeCurrent(long long) wglMakeCurrent
@ stdcall wglRealizeLayerPalette(long long long) wglRealizeLayerPalette
@ stdcall wglSetLayerPaletteEntries(long long long long ptr) wglSetLayerPaletteEntries
@ stdcall wglShareLists(long long) wglShareLists
@ stdcall wglSwapLayerBuffers(long long) wglSwapLayerBuffers
@ stdcall wglUseFontBitmaps(long long long long) wglUseFontBitmaps
@ stdcall wglUseFontOutlines(long long long long long long long) wglUseFontOutlines
@ stub glGetLevelParameterfv
@ stub glGetLevelParameteriv
@ stub wglUseFontBitmapsA
@ stub wglUseFontOutlinesA
@ forward wglChoosePixelFormat GDI32.ChoosePixelFormat
@ forward wglDescribePixelFormat GDI32.DescribePixelFormat
@ forward wglGetPixelFormat GDI32.GetPixelFormat
@ forward wglSetPixelFormat GDI32.SetPixelFormat
@ forward wglSwapBuffers GDI32.SwapBuffers
@ stdcall glClearIndex(long ) wine_glClearIndex
@ stdcall glClearColor(long long long long ) wine_glClearColor
@ stdcall glClear(long ) wine_glClear
@ stdcall glIndexMask(long ) wine_glIndexMask
@ stdcall glColorMask(long long long long ) wine_glColorMask
@ stdcall glAlphaFunc(long long ) wine_glAlphaFunc
@ stdcall glBlendFunc(long long ) wine_glBlendFunc
@ stdcall glLogicOp(long ) wine_glLogicOp
@ stdcall glCullFace(long ) wine_glCullFace
@ stdcall glFrontFace(long ) wine_glFrontFace
@ stdcall glPointSize(long ) wine_glPointSize
@ stdcall glLineWidth(long ) wine_glLineWidth
@ stdcall glLineStipple(long long ) wine_glLineStipple
@ stdcall glPolygonMode(long long ) wine_glPolygonMode
@ stdcall glPolygonOffset(long long ) wine_glPolygonOffset
@ stdcall glPolygonStipple(ptr ) wine_glPolygonStipple
@ stdcall glGetPolygonStipple(ptr ) wine_glGetPolygonStipple
@ stdcall glEdgeFlag(long ) wine_glEdgeFlag
@ stdcall glEdgeFlagv(ptr ) wine_glEdgeFlagv
@ stdcall glScissor(long long long long ) wine_glScissor
@ stdcall glClipPlane(long ptr ) wine_glClipPlane
@ stdcall glGetClipPlane(long ptr ) wine_glGetClipPlane
@ stdcall glDrawBuffer(long ) wine_glDrawBuffer
@ stdcall glReadBuffer(long ) wine_glReadBuffer
@ stdcall glEnable(long ) wine_glEnable
@ stdcall glDisable(long ) wine_glDisable
@ stdcall glIsEnabled(long ) wine_glIsEnabled
@ stdcall glEnableClientState(long ) wine_glEnableClientState
@ stdcall glDisableClientState(long ) wine_glDisableClientState
@ stdcall glGetBooleanv(long ptr ) wine_glGetBooleanv
@ stdcall glGetDoublev(long ptr ) wine_glGetDoublev
@ stdcall glGetFloatv(long ptr ) wine_glGetFloatv
@ stdcall glGetIntegerv(long ptr ) wine_glGetIntegerv
@ stdcall glPushAttrib(long ) wine_glPushAttrib
@ stdcall glPopAttrib() wine_glPopAttrib
@ stdcall glPushClientAttrib(long ) wine_glPushClientAttrib
@ stdcall glPopClientAttrib() wine_glPopClientAttrib
@ stdcall glRenderMode(long ) wine_glRenderMode
@ stdcall glGetError() wine_glGetError
@ stdcall glGetString(long ) wine_glGetString
@ stdcall glFinish() wine_glFinish
@ stdcall glFlush() wine_glFlush
@ stdcall glHint(long long ) wine_glHint
@ stdcall glClearDepth(long ) wine_glClearDepth
@ stdcall glDepthFunc(long ) wine_glDepthFunc
@ stdcall glDepthMask(long ) wine_glDepthMask
@ stdcall glDepthRange(long long ) wine_glDepthRange
@ stdcall glClearAccum(long long long long ) wine_glClearAccum
@ stdcall glAccum(long long ) wine_glAccum
@ stdcall glMatrixMode(long ) wine_glMatrixMode
@ stdcall glOrtho(double double double double double double ) wine_glOrtho
@ stdcall glFrustum(double double double double double double ) wine_glFrustum
@ stdcall glViewport(long long long long ) wine_glViewport
@ stdcall glPushMatrix() wine_glPushMatrix
@ stdcall glPopMatrix() wine_glPopMatrix
@ stdcall glLoadIdentity() wine_glLoadIdentity
@ stdcall glLoadMatrixd(ptr ) wine_glLoadMatrixd
@ stdcall glLoadMatrixf(ptr ) wine_glLoadMatrixf
@ stdcall glMultMatrixd(ptr ) wine_glMultMatrixd
@ stdcall glMultMatrixf(ptr ) wine_glMultMatrixf
@ stdcall glRotated(double double double double ) wine_glRotated
@ stdcall glRotatef(long long long long ) wine_glRotatef
@ stdcall glScaled(double double double ) wine_glScaled
@ stdcall glScalef(long long long ) wine_glScalef
@ stdcall glTranslated(double double double ) wine_glTranslated
@ stdcall glTranslatef(long long long ) wine_glTranslatef
@ stdcall glIsList(long ) wine_glIsList
@ stdcall glDeleteLists(long long ) wine_glDeleteLists
@ stdcall glGenLists(long ) wine_glGenLists
@ stdcall glNewList(long long ) wine_glNewList
@ stdcall glEndList() wine_glEndList
@ stdcall glCallList(long ) wine_glCallList
@ stdcall glCallLists(long long ptr ) wine_glCallLists
@ stdcall glListBase(long ) wine_glListBase
@ stdcall glBegin(long ) wine_glBegin
@ stdcall glEnd() wine_glEnd
@ stdcall glVertex2d(double double ) wine_glVertex2d
@ stdcall glVertex2f(long long ) wine_glVertex2f
@ stdcall glVertex2i(long long ) wine_glVertex2i
@ stdcall glVertex2s(long long ) wine_glVertex2s
@ stdcall glVertex3d(double double double ) wine_glVertex3d
@ stdcall glVertex3f(long long long ) wine_glVertex3f
@ stdcall glVertex3i(long long long ) wine_glVertex3i
@ stdcall glVertex3s(long long long ) wine_glVertex3s
@ stdcall glVertex4d(double double double double ) wine_glVertex4d
@ stdcall glVertex4f(long long long long ) wine_glVertex4f
@ stdcall glVertex4i(long long long long ) wine_glVertex4i
@ stdcall glVertex4s(long long long long ) wine_glVertex4s
@ stdcall glVertex2dv(ptr ) wine_glVertex2dv
@ stdcall glVertex2fv(ptr ) wine_glVertex2fv
@ stdcall glVertex2iv(ptr ) wine_glVertex2iv
@ stdcall glVertex2sv(ptr ) wine_glVertex2sv
@ stdcall glVertex3dv(ptr ) wine_glVertex3dv
@ stdcall glVertex3fv(ptr ) wine_glVertex3fv
@ stdcall glVertex3iv(ptr ) wine_glVertex3iv
@ stdcall glVertex3sv(ptr ) wine_glVertex3sv
@ stdcall glVertex4dv(ptr ) wine_glVertex4dv
@ stdcall glVertex4fv(ptr ) wine_glVertex4fv
@ stdcall glVertex4iv(ptr ) wine_glVertex4iv
@ stdcall glVertex4sv(ptr ) wine_glVertex4sv
@ stdcall glNormal3b(long long long ) wine_glNormal3b
@ stdcall glNormal3d(double double double ) wine_glNormal3d
@ stdcall glNormal3f(long long long ) wine_glNormal3f
@ stdcall glNormal3i(long long long ) wine_glNormal3i
@ stdcall glNormal3s(long long long ) wine_glNormal3s
@ stdcall glNormal3bv(ptr ) wine_glNormal3bv
@ stdcall glNormal3dv(ptr ) wine_glNormal3dv
@ stdcall glNormal3fv(ptr ) wine_glNormal3fv
@ stdcall glNormal3iv(ptr ) wine_glNormal3iv
@ stdcall glNormal3sv(ptr ) wine_glNormal3sv
@ stdcall glIndexd(double ) wine_glIndexd
@ stdcall glIndexf(long ) wine_glIndexf
@ stdcall glIndexi(long ) wine_glIndexi
@ stdcall glIndexs(long ) wine_glIndexs
@ stdcall glIndexub(long ) wine_glIndexub
@ stdcall glIndexdv(ptr ) wine_glIndexdv
@ stdcall glIndexfv(ptr ) wine_glIndexfv
@ stdcall glIndexiv(ptr ) wine_glIndexiv
@ stdcall glIndexsv(ptr ) wine_glIndexsv
@ stdcall glIndexubv(ptr ) wine_glIndexubv
@ stdcall glColor3b(long long long ) wine_glColor3b
@ stdcall glColor3d(double double double ) wine_glColor3d
@ stdcall glColor3f(long long long ) wine_glColor3f
@ stdcall glColor3i(long long long ) wine_glColor3i
@ stdcall glColor3s(long long long ) wine_glColor3s
@ stdcall glColor3ub(long long long ) wine_glColor3ub
@ stdcall glColor3ui(long long long ) wine_glColor3ui
@ stdcall glColor3us(long long long ) wine_glColor3us
@ stdcall glColor4b(long long long long ) wine_glColor4b
@ stdcall glColor4d(double double double double ) wine_glColor4d
@ stdcall glColor4f(long long long long ) wine_glColor4f
@ stdcall glColor4i(long long long long ) wine_glColor4i
@ stdcall glColor4s(long long long long ) wine_glColor4s
@ stdcall glColor4ub(long long long long ) wine_glColor4ub
@ stdcall glColor4ui(long long long long ) wine_glColor4ui
@ stdcall glColor4us(long long long long ) wine_glColor4us
@ stdcall glColor3bv(ptr ) wine_glColor3bv
@ stdcall glColor3dv(ptr ) wine_glColor3dv
@ stdcall glColor3fv(ptr ) wine_glColor3fv
@ stdcall glColor3iv(ptr ) wine_glColor3iv
@ stdcall glColor3sv(ptr ) wine_glColor3sv
@ stdcall glColor3ubv(ptr ) wine_glColor3ubv
@ stdcall glColor3uiv(ptr ) wine_glColor3uiv
@ stdcall glColor3usv(ptr ) wine_glColor3usv
@ stdcall glColor4bv(ptr ) wine_glColor4bv
@ stdcall glColor4dv(ptr ) wine_glColor4dv
@ stdcall glColor4fv(ptr ) wine_glColor4fv
@ stdcall glColor4iv(ptr ) wine_glColor4iv
@ stdcall glColor4sv(ptr ) wine_glColor4sv
@ stdcall glColor4ubv(ptr ) wine_glColor4ubv
@ stdcall glColor4uiv(ptr ) wine_glColor4uiv
@ stdcall glColor4usv(ptr ) wine_glColor4usv
@ stdcall glTexCoord1d(double ) wine_glTexCoord1d
@ stdcall glTexCoord1f(long ) wine_glTexCoord1f
@ stdcall glTexCoord1i(long ) wine_glTexCoord1i
@ stdcall glTexCoord1s(long ) wine_glTexCoord1s
@ stdcall glTexCoord2d(double double ) wine_glTexCoord2d
@ stdcall glTexCoord2f(long long ) wine_glTexCoord2f
@ stdcall glTexCoord2i(long long ) wine_glTexCoord2i
@ stdcall glTexCoord2s(long long ) wine_glTexCoord2s
@ stdcall glTexCoord3d(double double double ) wine_glTexCoord3d
@ stdcall glTexCoord3f(long long long ) wine_glTexCoord3f
@ stdcall glTexCoord3i(long long long ) wine_glTexCoord3i
@ stdcall glTexCoord3s(long long long ) wine_glTexCoord3s
@ stdcall glTexCoord4d(double double double double ) wine_glTexCoord4d
@ stdcall glTexCoord4f(long long long long ) wine_glTexCoord4f
@ stdcall glTexCoord4i(long long long long ) wine_glTexCoord4i
@ stdcall glTexCoord4s(long long long long ) wine_glTexCoord4s
@ stdcall glTexCoord1dv(ptr ) wine_glTexCoord1dv
@ stdcall glTexCoord1fv(ptr ) wine_glTexCoord1fv
@ stdcall glTexCoord1iv(ptr ) wine_glTexCoord1iv
@ stdcall glTexCoord1sv(ptr ) wine_glTexCoord1sv
@ stdcall glTexCoord2dv(ptr ) wine_glTexCoord2dv
@ stdcall glTexCoord2fv(ptr ) wine_glTexCoord2fv
@ stdcall glTexCoord2iv(ptr ) wine_glTexCoord2iv
@ stdcall glTexCoord2sv(ptr ) wine_glTexCoord2sv
@ stdcall glTexCoord3dv(ptr ) wine_glTexCoord3dv
@ stdcall glTexCoord3fv(ptr ) wine_glTexCoord3fv
@ stdcall glTexCoord3iv(ptr ) wine_glTexCoord3iv
@ stdcall glTexCoord3sv(ptr ) wine_glTexCoord3sv
@ stdcall glTexCoord4dv(ptr ) wine_glTexCoord4dv
@ stdcall glTexCoord4fv(ptr ) wine_glTexCoord4fv
@ stdcall glTexCoord4iv(ptr ) wine_glTexCoord4iv
@ stdcall glTexCoord4sv(ptr ) wine_glTexCoord4sv
@ stdcall glRasterPos2d(double double ) wine_glRasterPos2d
@ stdcall glRasterPos2f(long long ) wine_glRasterPos2f
@ stdcall glRasterPos2i(long long ) wine_glRasterPos2i
@ stdcall glRasterPos2s(long long ) wine_glRasterPos2s
@ stdcall glRasterPos3d(double double double ) wine_glRasterPos3d
@ stdcall glRasterPos3f(long long long ) wine_glRasterPos3f
@ stdcall glRasterPos3i(long long long ) wine_glRasterPos3i
@ stdcall glRasterPos3s(long long long ) wine_glRasterPos3s
@ stdcall glRasterPos4d(double double double double ) wine_glRasterPos4d
@ stdcall glRasterPos4f(long long long long ) wine_glRasterPos4f
@ stdcall glRasterPos4i(long long long long ) wine_glRasterPos4i
@ stdcall glRasterPos4s(long long long long ) wine_glRasterPos4s
@ stdcall glRasterPos2dv(ptr ) wine_glRasterPos2dv
@ stdcall glRasterPos2fv(ptr ) wine_glRasterPos2fv
@ stdcall glRasterPos2iv(ptr ) wine_glRasterPos2iv
@ stdcall glRasterPos2sv(ptr ) wine_glRasterPos2sv
@ stdcall glRasterPos3dv(ptr ) wine_glRasterPos3dv
@ stdcall glRasterPos3fv(ptr ) wine_glRasterPos3fv
@ stdcall glRasterPos3iv(ptr ) wine_glRasterPos3iv
@ stdcall glRasterPos3sv(ptr ) wine_glRasterPos3sv
@ stdcall glRasterPos4dv(ptr ) wine_glRasterPos4dv
@ stdcall glRasterPos4fv(ptr ) wine_glRasterPos4fv
@ stdcall glRasterPos4iv(ptr ) wine_glRasterPos4iv
@ stdcall glRasterPos4sv(ptr ) wine_glRasterPos4sv
@ stdcall glRectd(double double double double ) wine_glRectd
@ stdcall glRectf(long long long long ) wine_glRectf
@ stdcall glRecti(long long long long ) wine_glRecti
@ stdcall glRects(long long long long ) wine_glRects
@ stdcall glRectdv(ptr ptr ) wine_glRectdv
@ stdcall glRectfv(ptr ptr ) wine_glRectfv
@ stdcall glRectiv(ptr ptr ) wine_glRectiv
@ stdcall glRectsv(ptr ptr ) wine_glRectsv
@ stdcall glVertexPointer(long long long ptr ) wine_glVertexPointer
@ stdcall glNormalPointer(long long ptr ) wine_glNormalPointer
@ stdcall glColorPointer(long long long ptr ) wine_glColorPointer
@ stdcall glIndexPointer(long long ptr ) wine_glIndexPointer
@ stdcall glTexCoordPointer(long long long ptr ) wine_glTexCoordPointer
@ stdcall glEdgeFlagPointer(long ptr ) wine_glEdgeFlagPointer
@ stdcall glGetPointerv(long ptr ) wine_glGetPointerv
@ stdcall glArrayElement(long ) wine_glArrayElement
@ stdcall glDrawArrays(long long long ) wine_glDrawArrays
@ stdcall glDrawElements(long long long ptr ) wine_glDrawElements
@ stdcall glInterleavedArrays(long long ptr ) wine_glInterleavedArrays
@ stdcall glShadeModel(long ) wine_glShadeModel
@ stdcall glLightf(long long long ) wine_glLightf
@ stdcall glLighti(long long long ) wine_glLighti
@ stdcall glLightfv(long long ptr ) wine_glLightfv
@ stdcall glLightiv(long long ptr ) wine_glLightiv
@ stdcall glGetLightfv(long long ptr ) wine_glGetLightfv
@ stdcall glGetLightiv(long long ptr ) wine_glGetLightiv
@ stdcall glLightModelf(long long ) wine_glLightModelf
@ stdcall glLightModeli(long long ) wine_glLightModeli
@ stdcall glLightModelfv(long ptr ) wine_glLightModelfv
@ stdcall glLightModeliv(long ptr ) wine_glLightModeliv
@ stdcall glMaterialf(long long long ) wine_glMaterialf
@ stdcall glMateriali(long long long ) wine_glMateriali
@ stdcall glMaterialfv(long long ptr ) wine_glMaterialfv
@ stdcall glMaterialiv(long long ptr ) wine_glMaterialiv
@ stdcall glGetMaterialfv(long long ptr ) wine_glGetMaterialfv
@ stdcall glGetMaterialiv(long long ptr ) wine_glGetMaterialiv
@ stdcall glColorMaterial(long long ) wine_glColorMaterial
@ stdcall glPixelZoom(long long ) wine_glPixelZoom
@ stdcall glPixelStoref(long long ) wine_glPixelStoref
@ stdcall glPixelStorei(long long ) wine_glPixelStorei
@ stdcall glPixelTransferf(long long ) wine_glPixelTransferf
@ stdcall glPixelTransferi(long long ) wine_glPixelTransferi
@ stdcall glPixelMapfv(long long ptr ) wine_glPixelMapfv
@ stdcall glPixelMapuiv(long long ptr ) wine_glPixelMapuiv
@ stdcall glPixelMapusv(long long ptr ) wine_glPixelMapusv
@ stdcall glGetPixelMapfv(long ptr ) wine_glGetPixelMapfv
@ stdcall glGetPixelMapuiv(long ptr ) wine_glGetPixelMapuiv
@ stdcall glGetPixelMapusv(long ptr ) wine_glGetPixelMapusv
@ stdcall glBitmap(long long long long long long ptr ) wine_glBitmap
@ stdcall glReadPixels(long long long long long long ptr ) wine_glReadPixels
@ stdcall glDrawPixels(long long long long ptr ) wine_glDrawPixels
@ stdcall glCopyPixels(long long long long long ) wine_glCopyPixels
@ stdcall glStencilFunc(long long long ) wine_glStencilFunc
@ stdcall glStencilMask(long ) wine_glStencilMask
@ stdcall glStencilOp(long long long ) wine_glStencilOp
@ stdcall glClearStencil(long ) wine_glClearStencil
@ stdcall glTexGend(long long double ) wine_glTexGend
@ stdcall glTexGenf(long long long ) wine_glTexGenf
@ stdcall glTexGeni(long long long ) wine_glTexGeni
@ stdcall glTexGendv(long long ptr ) wine_glTexGendv
@ stdcall glTexGenfv(long long ptr ) wine_glTexGenfv
@ stdcall glTexGeniv(long long ptr ) wine_glTexGeniv
@ stdcall glGetTexGendv(long long ptr ) wine_glGetTexGendv
@ stdcall glGetTexGenfv(long long ptr ) wine_glGetTexGenfv
@ stdcall glGetTexGeniv(long long ptr ) wine_glGetTexGeniv
@ stdcall glTexEnvf(long long long ) wine_glTexEnvf
@ stdcall glTexEnvi(long long long ) wine_glTexEnvi
@ stdcall glTexEnvfv(long long ptr ) wine_glTexEnvfv
@ stdcall glTexEnviv(long long ptr ) wine_glTexEnviv
@ stdcall glGetTexEnvfv(long long ptr ) wine_glGetTexEnvfv
@ stdcall glGetTexEnviv(long long ptr ) wine_glGetTexEnviv
@ stdcall glTexParameterf(long long long ) wine_glTexParameterf
@ stdcall glTexParameteri(long long long ) wine_glTexParameteri
@ stdcall glTexParameterfv(long long ptr ) wine_glTexParameterfv
@ stdcall glTexParameteriv(long long ptr ) wine_glTexParameteriv
@ stdcall glGetTexParameterfv(long long ptr ) wine_glGetTexParameterfv
@ stdcall glGetTexParameteriv(long long ptr ) wine_glGetTexParameteriv
@ stdcall glGetTexLevelParameterfv(long long long ptr ) wine_glGetTexLevelParameterfv
@ stdcall glGetTexLevelParameteriv(long long long ptr ) wine_glGetTexLevelParameteriv
@ stdcall glTexImage1D(long long long long long long long ptr ) wine_glTexImage1D
@ stdcall glTexImage2D(long long long long long long long long ptr ) wine_glTexImage2D
@ stdcall glGetTexImage(long long long long ptr ) wine_glGetTexImage
@ stdcall glGenTextures(long ptr ) wine_glGenTextures
@ stdcall glDeleteTextures(long ptr ) wine_glDeleteTextures
@ stdcall glBindTexture(long long ) wine_glBindTexture
@ stdcall glPrioritizeTextures(long ptr ptr ) wine_glPrioritizeTextures
@ stdcall glAreTexturesResident(long ptr ptr ) wine_glAreTexturesResident
@ stdcall glIsTexture(long ) wine_glIsTexture
@ stdcall glTexSubImage1D(long long long long long long ptr ) wine_glTexSubImage1D
@ stdcall glTexSubImage2D(long long long long long long long long ptr ) wine_glTexSubImage2D
@ stdcall glCopyTexImage1D(long long long long long long long ) wine_glCopyTexImage1D
@ stdcall glCopyTexImage2D(long long long long long long long long ) wine_glCopyTexImage2D
@ stdcall glCopyTexSubImage1D(long long long long long long ) wine_glCopyTexSubImage1D
@ stdcall glCopyTexSubImage2D(long long long long long long long long ) wine_glCopyTexSubImage2D
@ stdcall glMap1d(long double double long long ptr ) wine_glMap1d
@ stdcall glMap1f(long long long long long ptr ) wine_glMap1f
@ stdcall glMap2d(long double double long long double double long long ptr ) wine_glMap2d
@ stdcall glMap2f(long long long long long long long long long ptr ) wine_glMap2f
@ stdcall glGetMapdv(long long ptr ) wine_glGetMapdv
@ stdcall glGetMapfv(long long ptr ) wine_glGetMapfv
@ stdcall glGetMapiv(long long ptr ) wine_glGetMapiv
@ stdcall glEvalCoord1d(double ) wine_glEvalCoord1d
@ stdcall glEvalCoord1f(long ) wine_glEvalCoord1f
@ stdcall glEvalCoord1dv(ptr ) wine_glEvalCoord1dv
@ stdcall glEvalCoord1fv(ptr ) wine_glEvalCoord1fv
@ stdcall glEvalCoord2d(double double ) wine_glEvalCoord2d
@ stdcall glEvalCoord2f(long long ) wine_glEvalCoord2f
@ stdcall glEvalCoord2dv(ptr ) wine_glEvalCoord2dv
@ stdcall glEvalCoord2fv(ptr ) wine_glEvalCoord2fv
@ stdcall glMapGrid1d(long double double ) wine_glMapGrid1d
@ stdcall glMapGrid1f(long long long ) wine_glMapGrid1f
@ stdcall glMapGrid2d(long double double long double double ) wine_glMapGrid2d
@ stdcall glMapGrid2f(long long long long long long ) wine_glMapGrid2f
@ stdcall glEvalPoint1(long ) wine_glEvalPoint1
@ stdcall glEvalPoint2(long long ) wine_glEvalPoint2
@ stdcall glEvalMesh1(long long long ) wine_glEvalMesh1
@ stdcall glEvalMesh2(long long long long long ) wine_glEvalMesh2
@ stdcall glFogf(long long ) wine_glFogf
@ stdcall glFogi(long long ) wine_glFogi
@ stdcall glFogfv(long ptr ) wine_glFogfv
@ stdcall glFogiv(long ptr ) wine_glFogiv
@ stdcall glFeedbackBuffer(long long ptr ) wine_glFeedbackBuffer
@ stdcall glPassThrough(long ) wine_glPassThrough
@ stdcall glSelectBuffer(long ptr ) wine_glSelectBuffer
@ stdcall glInitNames() wine_glInitNames
@ stdcall glLoadName(long ) wine_glLoadName
@ stdcall glPushName(long ) wine_glPushName
@ stdcall glPopName() wine_glPopName
@ stdcall glDrawRangeElements(long long long long long ptr ) wine_glDrawRangeElements
@ stdcall glTexImage3D(long long long long long long long long long ptr ) wine_glTexImage3D
@ stdcall glTexSubImage3D(long long long long long long long long long long ptr ) wine_glTexSubImage3D
@ stdcall glCopyTexSubImage3D(long long long long long long long long long ) wine_glCopyTexSubImage3D
@ stdcall glColorTable(long long long long long ptr ) wine_glColorTable
@ stdcall glColorSubTable(long long long long long ptr ) wine_glColorSubTable
@ stdcall glColorTableParameteriv(long long ptr ) wine_glColorTableParameteriv
@ stdcall glColorTableParameterfv(long long ptr ) wine_glColorTableParameterfv
@ stdcall glCopyColorSubTable(long long long long long ) wine_glCopyColorSubTable
@ stdcall glCopyColorTable(long long long long long ) wine_glCopyColorTable
@ stdcall glGetColorTable(long long long ptr ) wine_glGetColorTable
@ stdcall glGetColorTableParameterfv(long long ptr ) wine_glGetColorTableParameterfv
@ stdcall glGetColorTableParameteriv(long long ptr ) wine_glGetColorTableParameteriv
@ stdcall glBlendEquation(long ) wine_glBlendEquation
@ stdcall glBlendColor(long long long long ) wine_glBlendColor
@ stdcall glHistogram(long long long long ) wine_glHistogram
@ stdcall glResetHistogram(long ) wine_glResetHistogram
@ stdcall glGetHistogram(long long long long ptr ) wine_glGetHistogram
@ stdcall glGetHistogramParameterfv(long long ptr ) wine_glGetHistogramParameterfv
@ stdcall glGetHistogramParameteriv(long long ptr ) wine_glGetHistogramParameteriv
@ stdcall glMinmax(long long long ) wine_glMinmax
@ stdcall glResetMinmax(long ) wine_glResetMinmax
@ stdcall glGetMinmax(long long long long ptr ) wine_glGetMinmax
@ stdcall glGetMinmaxParameterfv(long long ptr ) wine_glGetMinmaxParameterfv
@ stdcall glGetMinmaxParameteriv(long long ptr ) wine_glGetMinmaxParameteriv
@ stdcall glConvolutionFilter1D(long long long long long ptr ) wine_glConvolutionFilter1D
@ stdcall glConvolutionFilter2D(long long long long long long ptr ) wine_glConvolutionFilter2D
@ stdcall glConvolutionParameterf(long long long ) wine_glConvolutionParameterf
@ stdcall glConvolutionParameterfv(long long ptr ) wine_glConvolutionParameterfv
@ stdcall glConvolutionParameteri(long long long ) wine_glConvolutionParameteri
@ stdcall glConvolutionParameteriv(long long ptr ) wine_glConvolutionParameteriv
@ stdcall glCopyConvolutionFilter1D(long long long long long ) wine_glCopyConvolutionFilter1D
@ stdcall glCopyConvolutionFilter2D(long long long long long long ) wine_glCopyConvolutionFilter2D
@ stdcall glGetConvolutionFilter(long long long ptr ) wine_glGetConvolutionFilter
@ stdcall glGetConvolutionParameterfv(long long ptr ) wine_glGetConvolutionParameterfv
@ stdcall glGetConvolutionParameteriv(long long ptr ) wine_glGetConvolutionParameteriv
@ stdcall glSeparableFilter2D(long long long long long long ptr ptr ) wine_glSeparableFilter2D
@ stdcall glGetSeparableFilter(long long long ptr ptr ptr ) wine_glGetSeparableFilter
@ stdcall glActiveTextureARB(long ) wine_glActiveTextureARB
@ stdcall glClientActiveTextureARB(long ) wine_glClientActiveTextureARB
@ stdcall glMultiTexCoord1dARB(long double ) wine_glMultiTexCoord1dARB
@ stdcall glMultiTexCoord1dvARB(long ptr ) wine_glMultiTexCoord1dvARB
@ stdcall glMultiTexCoord1fARB(long long ) wine_glMultiTexCoord1fARB
@ stdcall glMultiTexCoord1fvARB(long ptr ) wine_glMultiTexCoord1fvARB
@ stdcall glMultiTexCoord1iARB(long long ) wine_glMultiTexCoord1iARB
@ stdcall glMultiTexCoord1ivARB(long ptr ) wine_glMultiTexCoord1ivARB
@ stdcall glMultiTexCoord1sARB(long long ) wine_glMultiTexCoord1sARB
@ stdcall glMultiTexCoord1svARB(long ptr ) wine_glMultiTexCoord1svARB
@ stdcall glMultiTexCoord2dARB(long double double ) wine_glMultiTexCoord2dARB
@ stdcall glMultiTexCoord2dvARB(long ptr ) wine_glMultiTexCoord2dvARB
@ stdcall glMultiTexCoord2fARB(long long long ) wine_glMultiTexCoord2fARB
@ stdcall glMultiTexCoord2fvARB(long ptr ) wine_glMultiTexCoord2fvARB
@ stdcall glMultiTexCoord2iARB(long long long ) wine_glMultiTexCoord2iARB
@ stdcall glMultiTexCoord2ivARB(long ptr ) wine_glMultiTexCoord2ivARB
@ stdcall glMultiTexCoord2sARB(long long long ) wine_glMultiTexCoord2sARB
@ stdcall glMultiTexCoord2svARB(long ptr ) wine_glMultiTexCoord2svARB
@ stdcall glMultiTexCoord3dARB(long double double double ) wine_glMultiTexCoord3dARB
@ stdcall glMultiTexCoord3dvARB(long ptr ) wine_glMultiTexCoord3dvARB
@ stdcall glMultiTexCoord3fARB(long long long long ) wine_glMultiTexCoord3fARB
@ stdcall glMultiTexCoord3fvARB(long ptr ) wine_glMultiTexCoord3fvARB
@ stdcall glMultiTexCoord3iARB(long long long long ) wine_glMultiTexCoord3iARB
@ stdcall glMultiTexCoord3ivARB(long ptr ) wine_glMultiTexCoord3ivARB
@ stdcall glMultiTexCoord3sARB(long long long long ) wine_glMultiTexCoord3sARB
@ stdcall glMultiTexCoord3svARB(long ptr ) wine_glMultiTexCoord3svARB
@ stdcall glMultiTexCoord4dARB(long double double double double ) wine_glMultiTexCoord4dARB
@ stdcall glMultiTexCoord4dvARB(long ptr ) wine_glMultiTexCoord4dvARB
@ stdcall glMultiTexCoord4fARB(long long long long long ) wine_glMultiTexCoord4fARB
@ stdcall glMultiTexCoord4fvARB(long ptr ) wine_glMultiTexCoord4fvARB
@ stdcall glMultiTexCoord4iARB(long long long long long ) wine_glMultiTexCoord4iARB
@ stdcall glMultiTexCoord4ivARB(long ptr ) wine_glMultiTexCoord4ivARB
@ stdcall glMultiTexCoord4sARB(long long long long long ) wine_glMultiTexCoord4sARB
@ stdcall glMultiTexCoord4svARB(long ptr ) wine_glMultiTexCoord4svARB

2924
dlls/opengl32/opengl_ext.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,17 @@
/* Typedefs for extensions loading
Copyright (c) 2000 Lionel Ulmer
*/
#ifndef __DLLS_OPENGL32_OPENGL_EXT_H
#define __DLLS_OPENGL32_OPENGL_EXT_H
typedef struct {
char *name; /* name of the extension */
void *func; /* pointer to the Wine function for this extension */
void **func_ptr; /* where to store the value of glXGetProcAddressARB */
} OpenGL_extension;
extern OpenGL_extension extension_registry[];
extern int extension_registry_size;
#endif /* __DLLS_OPENGL32_OPENGL_EXT_H */

2471
dlls/opengl32/opengl_norm.c Normal file

File diff suppressed because it is too large Load Diff

276
dlls/opengl32/wgl.c Normal file
View File

@ -0,0 +1,276 @@
/* Window-specific OpenGL functions implementation.
Copyright (c) 1999 Lionel Ulmer
*/
#include <stdlib.h>
#include "config.h"
#include "debugtools.h"
#include "gdi.h"
#include "dc.h"
#include "windef.h"
#include "wine_gl.h"
#include "x11drv.h"
#include "wgl.h"
#include "opengl_ext.h"
DEFAULT_DEBUG_CHANNEL(opengl)
HGLRC WINAPI wglCreateContext(HDC hdc) {
DC * dc = DC_GetDCPtr( hdc );
X11DRV_PDEVICE *physDev;
XVisualInfo *vis;
GLXContext ret;
TRACE("(%08x)\n", hdc);
if (dc == NULL) {
ERR("Null DC !!!\n");
return NULL;
}
physDev = (X11DRV_PDEVICE *)dc->physDev;
/* First, get the visual for the choosen pixel format */
vis = physDev->visuals[physDev->current_pf - 1];
if (vis == NULL) {
ERR("NULL visual !!!\n");
/* Need to set errors here */
return NULL;
}
ENTER_GL();
ret = glXCreateContext(display, vis, NULL, True);
LEAVE_GL();
return (HGLRC) ret;
}
HGLRC WINAPI wglCreateLayerContext(HDC hdc,
int iLayerPlane) {
FIXME("(%08x,%d): stub !\n", hdc, iLayerPlane);
return NULL;
}
BOOL WINAPI wglCopyContext(HGLRC hglrcSrc,
HGLRC hglrcDst,
UINT mask) {
FIXME("(%p,%p,%d)\n", hglrcSrc, hglrcDst, mask);
return FALSE;
}
BOOL WINAPI wglDeleteContext(HGLRC hglrc) {
FIXME("(%p): stub !\n", hglrc);
return FALSE;
}
BOOL WINAPI wglDescribeLayerPlane(HDC hdc,
int iPixelFormat,
int iLayerPlane,
UINT nBytes,
LPLAYERPLANEDESCRIPTOR plpd) {
FIXME("(%08x,%d,%d,%d,%p)\n", hdc, iPixelFormat, iLayerPlane, nBytes, plpd);
return FALSE;
}
HGLRC WINAPI wglGetCurrentContext(void) {
GLXContext ret;
TRACE("()\n");
ENTER_GL();
ret = glXGetCurrentContext();
LEAVE_GL();
TRACE(" returning %p\n", ret);
return ret;
}
HDC WINAPI wglGetCurrentDC(void) {
GLXContext ret;
ENTER_GL();
ret = glXGetCurrentContext();
LEAVE_GL();
if (ret == NULL) {
TRACE("() no current context -> returning NULL\n");
return 0;
} else {
FIXME("()\n");
return 0;
}
}
int WINAPI wglGetLayerPaletteEntries(HDC hdc,
int iLayerPlane,
int iStart,
int cEntries,
const COLORREF *pcr) {
FIXME("(): stub !\n");
return 0;
}
static int compar(const void *elt_a, const void *elt_b) {
return strcmp(((OpenGL_extension *) elt_a)->name,
((OpenGL_extension *) elt_b)->name);
}
void* WINAPI wglGetProcAddress(LPCSTR lpszProc) {
void *local_func;
static HMODULE hm = 0;
TRACE("(%s)\n", lpszProc);
if (hm == 0)
hm = GetModuleHandleA("opengl32");
/* First, look if it's not already defined in the 'standard' OpenGL functions */
if ((local_func = GetProcAddress(hm, lpszProc)) != NULL) {
TRACE("Found function in 'standard' OpenGL functions (%p)\n", local_func);
return local_func;
}
/* After that, look at the extensions defined in the Linux OpenGL library */
if ((local_func = glXGetProcAddressARB(lpszProc)) == NULL) {
char buf[256];
void *ret = NULL;
/* Remove the 3 last letters (EXT, ARB, ...).
I know that some extensions have more than 3 letters (MESA, NV,
INTEL, ...), but this is only a stop-gap measure to fix buggy
OpenGL drivers (moreover, it is only useful for old 1.0 apps
that query the glBindTextureEXT extension).
*/
strncpy(buf, lpszProc, strlen(lpszProc) - 3);
buf[strlen(lpszProc) - 3] = '\0';
TRACE("Extension not found in the Linux OpenGL library, checking against libGL bug with %s..\n", buf);
ret = GetProcAddress(hm, buf);
if (ret != NULL) {
TRACE("Found function in main OpenGL library (%p) !\n", ret);
}
return ret;
} else {
OpenGL_extension ext;
OpenGL_extension *ret;
ext.name = (char *) lpszProc;
ret = (OpenGL_extension *) bsearch(&ext, extension_registry,
extension_registry_size, sizeof(OpenGL_extension), compar);
if (ret != NULL) {
TRACE("Returning function (%p)\n", ret->func);
*(ret->func_ptr) = local_func;
return ret->func;
} else {
ERR("Extension defined in the OpenGL library but NOT in opengl_ext.c... Please report (lionel.ulmer@free.fr) !\n");
return NULL;
}
}
}
BOOL WINAPI wglMakeCurrent(HDC hdc,
HGLRC hglrc) {
DC * dc = DC_GetDCPtr( hdc );
X11DRV_PDEVICE *physDev;
BOOL ret;
TRACE("(%08x,%p)\n", hdc, hglrc);
if (dc == NULL) {
ERR("Null DC !!!\n");
return FALSE;
}
physDev =(X11DRV_PDEVICE *)dc->physDev;
ENTER_GL();
ret = glXMakeCurrent(display, physDev->drawable, (GLXContext) hglrc);
LEAVE_GL();
return ret;
}
BOOL WINAPI wglRealizeLayerPalette(HDC hdc,
int iLayerPlane,
BOOL bRealize) {
FIXME("()\n");
return FALSE;
}
int WINAPI wglSetLayerPaletteEntries(HDC hdc,
int iLayerPlane,
int iStart,
int cEntries,
const COLORREF *pcr) {
FIXME("(): stub !\n");
return 0;
}
BOOL WINAPI wglShareLists(HGLRC hglrc1,
HGLRC hglrc2) {
FIXME("(): stub !\n");
return FALSE;
}
BOOL WINAPI wglSwapLayerBuffers(HDC hdc,
UINT fuPlanes) {
FIXME("(): stub !\n");
return FALSE;
}
BOOL WINAPI wglUseFontBitmaps(HDC hdc,
DWORD first,
DWORD count,
DWORD listBase) {
FIXME("(): stub !\n");
return FALSE;
}
BOOL WINAPI wglUseFontOutlines(HDC hdc,
DWORD first,
DWORD count,
DWORD listBase,
FLOAT deviation,
FLOAT extrusion,
int format,
LPGLYPHMETRICSFLOAT lpgmf) {
FIXME("(): stub !\n");
return FALSE;
}
/* This is for brain-dead applications that use OpenGL functions before even
creating a rendering context.... */
DECL_GLOBAL_CONSTRUCTOR(OpenGL_create_default_context) {
int num;
XVisualInfo template;
XVisualInfo *vis;
GLXContext cx;
ENTER_GL();
template.visualid = XVisualIDFromVisual(visual);
vis = XGetVisualInfo(display, VisualIDMask, &template, &num);
cx=glXCreateContext(display, vis, 0, GL_TRUE);
glXMakeCurrent(display, X11DRV_GetXRootWindow(), cx);
LEAVE_GL();
}

103
dlls/opengl32/wgl.h Normal file
View File

@ -0,0 +1,103 @@
/* Window-specific OpenGL functions implementation.
Copyright (c) 2000 Lionel Ulmer
*/
#ifndef __DLLS_OPENGL32_WGL_H
#define __DLLS_OPENGL32_WGL_H
#include "gdi.h"
typedef void *HGLRC;
typedef struct {
WORD nSize;
WORD nVersion;
DWORD dwFlags;
BYTE iPixelType;
BYTE cColorBits;
BYTE cRedBits;
BYTE cRedShift;
BYTE cGreenBits;
BYTE cGreenShift;
BYTE cBlueBits;
BYTE cBlueShift;
BYTE cAlphaBits;
BYTE cAlphaShift;
BYTE cAccumBits;
BYTE cAccumRedBits;
BYTE cAccumGreenBits;
BYTE cAccumBlueBits;
BYTE cAccumAlphaBits;
BYTE cDepthBits;
BYTE cStencilBits;
BYTE cAuxBuffers;
BYTE iLayerPlane;
BYTE bReserved;
COLORREF crTransparent;
} LAYERPLANEDESCRIPTOR;
typedef LAYERPLANEDESCRIPTOR* LPLAYERPLANEDESCRIPTOR;
typedef struct {
FLOAT x;
FLOAT y;
} POINTFLOAT;
typedef struct {
FLOAT gmfBlackBoxX;
FLOAT gmfBlackBoxY;
POINTFLOAT gmfptGlyphOrigin;
FLOAT gmfCellIncX;
FLOAT gmfCellIncY;
} GLYPHMETRICSFLOAT;
typedef GLYPHMETRICSFLOAT *LPGLYPHMETRICSFLOAT;
HGLRC WINAPI wglCreateContext(HDC hdc) ;
HGLRC WINAPI wglCreateLayerContext(HDC hdc,
int iLayerPlane) ;
BOOL WINAPI wglCopyContext(HGLRC hglrcSrc,
HGLRC hglrcDst,
UINT mask) ;
BOOL WINAPI wglDeleteContext(HGLRC hglrc) ;
BOOL WINAPI wglDescribeLayerPlane(HDC hdc,
int iPixelFormat,
int iLayerPlane,
UINT nBytes,
LPLAYERPLANEDESCRIPTOR plpd) ;
HGLRC WINAPI wglGetCurrentContext(void) ;
HDC WINAPI wglGetCurrentDC(void) ;
int WINAPI wglGetLayerPaletteEntries(HDC hdc,
int iLayerPlane,
int iStart,
int cEntries,
const COLORREF *pcr) ;
void * WINAPI wglGetProcAddress(LPCSTR lpszProc) ;
BOOL WINAPI wglMakeCurrent(HDC hdc,
HGLRC hglrc) ;
BOOL WINAPI wglRealizeLayerPalette(HDC hdc,
int iLayerPlane,
BOOL bRealize) ;
int WINAPI wglSetLayerPaletteEntries(HDC hdc,
int iLayerPlane,
int iStart,
int cEntries,
const COLORREF *pcr) ;
BOOL WINAPI wglShareLists(HGLRC hglrc1,
HGLRC hglrc2) ;
BOOL WINAPI wglSwapLayerBuffers(HDC hdc,
UINT fuPlanes);
BOOL WINAPI wglUseFontBitmaps(HDC hdc,
DWORD first,
DWORD count,
DWORD listBase) ;
BOOL WINAPI wglUseFontOutlines(HDC hdc,
DWORD first,
DWORD count,
DWORD listBase,
FLOAT deviation,
FLOAT extrusion,
int format,
LPGLYPHMETRICSFLOAT lpgmf) ;
#endif /* __DLLS_OPENGL32_WGL_H */

View File

@ -29,6 +29,7 @@ static const DC_FUNCTIONS EMFDRV_Funcs =
EMFDRV_BeginPath, /* pBeginPath */
NULL, /* pBitBlt */
NULL, /* pBitmapBits */
NULL, /* pChoosePixelFormat */
EMFDRV_Chord, /* pChord */
EMFDRV_CloseFigure, /* pCloseFigure */
NULL, /* pCreateBitmap */
@ -37,6 +38,7 @@ static const DC_FUNCTIONS EMFDRV_Funcs =
NULL, /* pCreateDIBSection16 */
NULL, /* no implementation */ /* pDeleteDC */
NULL, /* pDeleteObject */
NULL, /* pDescribePixelFormat */
NULL, /* pDeviceCapabilities */
EMFDRV_Ellipse, /* pEllipse */
NULL, /* pEndDoc */
@ -55,6 +57,7 @@ static const DC_FUNCTIONS EMFDRV_Funcs =
NULL, /* pGetCharWidth */
NULL, /* pGetDCOrgEx */
NULL, /* no implementation */ /* pGetPixel */
NULL, /* pGetPixelFormat */
NULL, /* pGetTextExtentPoint */
NULL, /* pGetTextMetrics */
EMFDRV_IntersectClipRect, /* pIntersectClipRect */
@ -94,6 +97,7 @@ static const DC_FUNCTIONS EMFDRV_Funcs =
EMFDRV_SetMapMode, /* pSetMapMode */
EMFDRV_SetMapperFlags, /* pSetMapperFlags */
NULL, /* pSetPixel */
NULL, /* pSetPixelFormat */
EMFDRV_SetPolyFillMode, /* pSetPolyFillMode */
EMFDRV_SetROP2, /* pSetROP2 */
NULL, /* pSetRelAbs */
@ -112,6 +116,7 @@ static const DC_FUNCTIONS EMFDRV_Funcs =
NULL, /* pStretchDIBits */
EMFDRV_StrokeAndFillPath, /* pStrokeAndFillPath */
EMFDRV_StrokePath, /* pStrokePath */
NULL, /* pSwapBuffers */
EMFDRV_WidenPath /* pWiddenPath */
};

View File

@ -27,6 +27,7 @@ static const DC_FUNCTIONS MFDRV_Funcs =
MFDRV_BeginPath, /* pBeginPath */
MFDRV_BitBlt, /* pBitBlt */
NULL, /* pBitmapBits */
NULL, /* pChoosePixelFormat */
MFDRV_Chord, /* pChord */
MFDRV_CloseFigure, /* pCloseFigure */
NULL, /* pCreateBitmap */
@ -35,6 +36,7 @@ static const DC_FUNCTIONS MFDRV_Funcs =
NULL, /* pCreateDIBSection16 */
NULL, /* no implementation */ /* pDeleteDC */
NULL, /* pDeleteObject */
NULL, /* pDescribePixelFormat */
NULL, /* pDeviceCapabilities */
MFDRV_Ellipse, /* pEllipse */
NULL, /* pEndDoc */
@ -53,6 +55,7 @@ static const DC_FUNCTIONS MFDRV_Funcs =
NULL, /* pGetCharWidth */
NULL, /* pGetDCOrgEx */
NULL, /* no implementation */ /* pGetPixel */
NULL, /* pGetPixelFormat */
NULL, /* pGetTextExtentPoint */
NULL, /* pGetTextMetrics */
MFDRV_IntersectClipRect, /* pIntersectClipRect */
@ -92,6 +95,7 @@ static const DC_FUNCTIONS MFDRV_Funcs =
MFDRV_SetMapMode, /* pSetMapMode */
MFDRV_SetMapperFlags, /* pSetMapperFlags */
MFDRV_SetPixel, /* pSetPixel */
NULL, /* pSetPixelFormat */
MFDRV_SetPolyFillMode, /* pSetPolyFillMode */
MFDRV_SetROP2, /* pSetROP2 */
MFDRV_SetRelAbs, /* pSetRelAbs */
@ -110,6 +114,7 @@ static const DC_FUNCTIONS MFDRV_Funcs =
MFDRV_StretchDIBits, /* pStretchDIBits */
MFDRV_StrokeAndFillPath, /* pStrokeAndFillPath */
MFDRV_StrokePath, /* pStrokePath */
NULL, /* pSwapBuffers */
MFDRV_WidenPath /* pWidenPath */
};

View File

@ -404,8 +404,17 @@ COLORREF WINAPI GetPixel( HDC hdc, INT x, INT y )
*/
INT WINAPI ChoosePixelFormat( HDC hdc, const LPPIXELFORMATDESCRIPTOR ppfd )
{
FIXME("(%d,%p): stub\n",hdc,ppfd);
return 1;
DC * dc = DC_GetDCPtr( hdc );
TRACE("(%08x,%p)\n",hdc,ppfd);
if (dc == NULL) return 0;
if (dc->funcs->pChoosePixelFormat == NULL) {
FIXME(" :stub\n");
return 0;
}
return dc->funcs->pChoosePixelFormat(dc,ppfd);
}
@ -423,8 +432,16 @@ INT WINAPI ChoosePixelFormat( HDC hdc, const LPPIXELFORMATDESCRIPTOR ppfd )
BOOL WINAPI SetPixelFormat( HDC hdc, INT iPixelFormat,
const PIXELFORMATDESCRIPTOR *ppfd)
{
FIXME("(%d,%d,%p): stub\n",hdc,iPixelFormat,ppfd);
return TRUE;
DC * dc = DC_GetDCPtr( hdc );
TRACE("(%d,%d,%p)\n",hdc,iPixelFormat,ppfd);
if (dc == NULL) return 0;
if (dc->funcs->pSetPixelFormat == NULL) {
FIXME(" :stub\n");
return 0;
}
return dc->funcs->pSetPixelFormat(dc,iPixelFormat,ppfd);
}
@ -441,8 +458,16 @@ BOOL WINAPI SetPixelFormat( HDC hdc, INT iPixelFormat,
*/
INT WINAPI GetPixelFormat( HDC hdc )
{
FIXME("(%d): stub\n",hdc);
return 1;
DC * dc = DC_GetDCPtr( hdc );
TRACE("(%08x)\n",hdc);
if (dc == NULL) return 0;
if (dc->funcs->pGetPixelFormat == NULL) {
FIXME(" :stub\n");
return 0;
}
return dc->funcs->pGetPixelFormat(dc);
}
@ -463,10 +488,18 @@ INT WINAPI GetPixelFormat( HDC hdc )
INT WINAPI DescribePixelFormat( HDC hdc, INT iPixelFormat, UINT nBytes,
LPPIXELFORMATDESCRIPTOR ppfd )
{
FIXME("(%d,%d,%d,%p): stub\n",hdc,iPixelFormat,nBytes,ppfd);
DC * dc = DC_GetDCPtr( hdc );
TRACE("(%08x,%d,%d,%p): stub\n",hdc,iPixelFormat,nBytes,ppfd);
if (dc == NULL) return 0;
if (dc->funcs->pDescribePixelFormat == NULL) {
FIXME(" :stub\n");
ppfd->nSize = nBytes;
ppfd->nVersion = 1;
return 3;
}
return dc->funcs->pDescribePixelFormat(dc,iPixelFormat,nBytes,ppfd);
}
@ -481,8 +514,16 @@ INT WINAPI DescribePixelFormat( HDC hdc, INT iPixelFormat, UINT nBytes,
*/
BOOL WINAPI SwapBuffers( HDC hdc )
{
FIXME("(%d): stub\n",hdc);
DC * dc = DC_GetDCPtr( hdc );
TRACE("(%08x)\n",hdc);
if (dc == NULL) return 0;
if (dc->funcs->pSwapBuffers == NULL) {
FIXME(" :stub\n");
return TRUE;
}
return dc->funcs->pSwapBuffers(dc);
}

View File

@ -31,6 +31,7 @@ static const DC_FUNCTIONS PSDRV_Funcs =
NULL, /* pBeginPath */
NULL, /* pBitBlt */
NULL, /* pBitmapBits */
NULL, /* pChoosePixelFormat */
PSDRV_Chord, /* pChord */
NULL, /* pCloseFigure */
NULL, /* pCreateBitmap */
@ -39,6 +40,7 @@ static const DC_FUNCTIONS PSDRV_Funcs =
NULL, /* pCreateDIBSection16 */
PSDRV_DeleteDC, /* pDeleteDC */
NULL, /* pDeleteObject */
NULL, /* pDescribePixelFormat */
PSDRV_DeviceCapabilities, /* pDeviceCapabilities */
PSDRV_Ellipse, /* pEllipse */
PSDRV_EndDoc, /* pEndDoc */
@ -57,6 +59,7 @@ static const DC_FUNCTIONS PSDRV_Funcs =
PSDRV_GetCharWidth, /* pGetCharWidth */
NULL, /* pGetDCOrgEx */
NULL, /* pGetPixel */
NULL, /* pGetPixelFormat */
PSDRV_GetTextExtentPoint, /* pGetTextExtentPoint */
PSDRV_GetTextMetrics, /* pGetTextMetrics */
NULL, /* pIntersectClipRect */
@ -96,6 +99,7 @@ static const DC_FUNCTIONS PSDRV_Funcs =
NULL, /* pSetMapMode (optional) */
NULL, /* pSetMapperFlags */
PSDRV_SetPixel, /* pSetPixel */
NULL, /* pSetPixelFormat */
NULL, /* pSetPolyFillMode */
NULL, /* pSetROP2 */
NULL, /* pSetRelAbs */
@ -114,6 +118,7 @@ static const DC_FUNCTIONS PSDRV_Funcs =
PSDRV_StretchDIBits, /* pStretchDIBits */
NULL, /* pStrokeAndFillPath */
NULL, /* pStrokePath */
NULL, /* pSwapBuffers */
NULL /* pWidenPath */
};

View File

@ -25,6 +25,7 @@ static const DC_FUNCTIONS TTYDRV_DC_Driver =
NULL, /* pBeginPath */
TTYDRV_DC_BitBlt, /* pBitBlt */
TTYDRV_DC_BitmapBits,/* pBitmapBits */
NULL, /* pChoosePixelFormat */
TTYDRV_DC_Chord, /* pChord */
NULL, /* pCloseFigure */
TTYDRV_DC_CreateBitmap, /* pCreateBitmap */
@ -33,6 +34,7 @@ static const DC_FUNCTIONS TTYDRV_DC_Driver =
NULL, /* pCreateDIBSection16 */
TTYDRV_DC_DeleteDC, /* pDeleteDC */
TTYDRV_DC_DeleteObject, /* pDeleteObject */
NULL, /* pDescribePixelFormat */
NULL, /* pDeviceCapabilities */
TTYDRV_DC_Ellipse, /* pEllipse */
NULL, /* pEndDoc */
@ -51,6 +53,7 @@ static const DC_FUNCTIONS TTYDRV_DC_Driver =
TTYDRV_DC_GetCharWidth, /* pGetCharWidth */
NULL, /* pGetDCOrgEx */
TTYDRV_DC_GetPixel, /* pGetPixel */
NULL, /* pGetPixelFormat */
TTYDRV_DC_GetTextExtentPoint, /* pGetTextExtentPoint */
TTYDRV_DC_GetTextMetrics, /* pGetTextMetrics */
NULL, /* pIntersectClipRect */
@ -90,6 +93,7 @@ static const DC_FUNCTIONS TTYDRV_DC_Driver =
NULL, /* pSetMapMode (optional) */
NULL, /* pSetMapperFlags */
TTYDRV_DC_SetPixel, /* pSetPixel */
NULL, /* pSetPixelFormat */
NULL, /* pSetPolyFillMode */
NULL, /* pSetROP2 */
NULL, /* pSetRelAbs */
@ -108,6 +112,7 @@ static const DC_FUNCTIONS TTYDRV_DC_Driver =
NULL, /* pStretchDIBits */
NULL, /* pStrokeAndFillPath */
NULL, /* pStrokePath */
NULL, /* pSwapBuffers */
NULL /* pWidenPath */
};

View File

@ -53,6 +53,7 @@ static const DC_FUNCTIONS WIN16DRV_Funcs =
NULL, /* pBeginPath */
NULL, /* pBitBlt */
NULL, /* pBitmapBits */
NULL, /* pChoosePixelFormat */
NULL, /* pChord */
NULL, /* pCloseFigure */
NULL, /* pCreateBitmap */
@ -61,6 +62,7 @@ static const DC_FUNCTIONS WIN16DRV_Funcs =
NULL, /* pCreateDIBSection16 */
NULL, /* pDeleteDC */
NULL, /* pDeleteObject */
NULL, /* pDescribePixelFormat */
WIN16DRV_DeviceCapabilities, /* pDeviceCapabilities */
WIN16DRV_Ellipse, /* pEllipse */
NULL, /* pEndDoc */
@ -79,6 +81,7 @@ static const DC_FUNCTIONS WIN16DRV_Funcs =
WIN16DRV_GetCharWidth, /* pGetCharWidth */
NULL, /* pGetDCOrgEx */
NULL, /* pGetPixel */
NULL, /* pGetPixelFormat */
WIN16DRV_GetTextExtentPoint, /* pGetTextExtentPoint */
WIN16DRV_GetTextMetrics, /* pGetTextMetrics */
NULL, /* pIntersectClipRect */
@ -118,6 +121,7 @@ static const DC_FUNCTIONS WIN16DRV_Funcs =
NULL, /* pSetMapMode */
NULL, /* pSetMapperFlags */
NULL, /* pSetPixel */
NULL, /* pSetPixelFormat */
NULL, /* pSetPolyFillMode */
NULL, /* pSetROP2 */
NULL, /* pSetRelAbs */
@ -136,6 +140,7 @@ static const DC_FUNCTIONS WIN16DRV_Funcs =
NULL, /* pStretchDIBits */
NULL, /* pStrokeAndFillPath */
NULL, /* pStrokePath */
NULL, /* pSwapBuffers */
NULL /* pWidenPath */
};

View File

@ -15,6 +15,7 @@ C_SRCS = \
init.c \
objects.c \
oembitmap.c \
opengl.c \
palette.c \
pen.c \
text.c \

View File

@ -38,6 +38,7 @@ const DC_FUNCTIONS X11DRV_DC_Funcs =
NULL, /* pBeginPath */
X11DRV_BitBlt, /* pBitBlt */
X11DRV_BitmapBits, /* pBitmapBits */
X11DRV_ChoosePixelFormat, /* pChoosePixelFormat */
X11DRV_Chord, /* pChord */
NULL, /* pCloseFigure */
X11DRV_CreateBitmap, /* pCreateBitmap */
@ -46,6 +47,7 @@ const DC_FUNCTIONS X11DRV_DC_Funcs =
X11DRV_DIB_CreateDIBSection16, /* pCreateDIBSection16 */
X11DRV_DeleteDC, /* pDeleteDC */
X11DRV_DeleteObject, /* pDeleteObject */
X11DRV_DescribePixelFormat, /* pDescribePixelFormat */
NULL, /* pDeviceCapabilities */
X11DRV_Ellipse, /* pEllipse */
NULL, /* pEndDoc */
@ -64,6 +66,7 @@ const DC_FUNCTIONS X11DRV_DC_Funcs =
X11DRV_GetCharWidth, /* pGetCharWidth */
X11DRV_GetDCOrgEx, /* pGetDCOrgEx */
X11DRV_GetPixel, /* pGetPixel */
X11DRV_GetPixelFormat, /* pGetPixelFormat */
X11DRV_GetTextExtentPoint, /* pGetTextExtentPoint */
X11DRV_GetTextMetrics, /* pGetTextMetrics */
NULL, /* pIntersectClipRect */
@ -103,6 +106,7 @@ const DC_FUNCTIONS X11DRV_DC_Funcs =
NULL, /* pSetMapMode (optional) */
NULL, /* pSetMapperFlags */
X11DRV_SetPixel, /* pSetPixel */
X11DRV_SetPixelFormat, /* pSetPixelFormat */
NULL, /* pSetPolyFillMode */
NULL, /* pSetROP2 */
NULL, /* pSetRelAbs */
@ -121,6 +125,7 @@ const DC_FUNCTIONS X11DRV_DC_Funcs =
NULL, /* pStretchDIBits */
NULL, /* pStrokeAndFillPath */
NULL, /* pStrokePath */
X11DRV_SwapBuffers, /* pSwapBuffers */
NULL /* pWidenPath */
};
@ -265,6 +270,9 @@ static BOOL X11DRV_CreateDC( DC *dc, LPCSTR driver, LPCSTR device,
dc->w.hVisRgn = CreateRectRgnIndirect( &dc->w.totalExtent );
}
physDev->current_pf = 0;
physDev->used_visuals = 0;
if (!dc->w.hVisRgn)
{
TSXFreeGC( display, physDev->gc );
@ -285,6 +293,8 @@ static BOOL X11DRV_DeleteDC( DC *dc )
{
X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
TSXFreeGC( display, physDev->gc );
while (physDev->used_visuals-- > 0)
TSXFree(physDev->visuals[physDev->used_visuals]);
HeapFree( GetProcessHeap(), 0, physDev );
dc->physDev = NULL;
return TRUE;

343
graphics/x11drv/opengl.c Normal file
View File

@ -0,0 +1,343 @@
/*
* X11DRV OpenGL functions
*
* Copyright 2000 Lionel Ulmer
*
*/
#include "config.h"
#include "ts_xlib.h"
#include <stdlib.h>
#include <string.h>
#include "debugtools.h"
#include "gdi.h"
#include "x11drv.h"
#include "wine_gl.h"
DEFAULT_DEBUG_CHANNEL(opengl)
#ifdef HAVE_OPENGL
static void dump_PIXELFORMATDESCRIPTOR(PIXELFORMATDESCRIPTOR *ppfd) {
DPRINTF(" - size / version : %d / %d\n", ppfd->nSize, ppfd->nVersion);
DPRINTF(" - dwFlags : ");
#define TEST_AND_DUMP(t,tv) if ((t) & (tv)) DPRINTF(#tv " ")
TEST_AND_DUMP(ppfd->dwFlags, PFD_DEPTH_DONTCARE);
TEST_AND_DUMP(ppfd->dwFlags, PFD_DOUBLEBUFFER);
TEST_AND_DUMP(ppfd->dwFlags, PFD_DOUBLEBUFFER_DONTCARE);
TEST_AND_DUMP(ppfd->dwFlags, PFD_DRAW_TO_WINDOW);
TEST_AND_DUMP(ppfd->dwFlags, PFD_DRAW_TO_BITMAP);
TEST_AND_DUMP(ppfd->dwFlags, PFD_GENERIC_ACCELERATED);
TEST_AND_DUMP(ppfd->dwFlags, PFD_GENERIC_FORMAT);
TEST_AND_DUMP(ppfd->dwFlags, PFD_NEED_PALETTE);
TEST_AND_DUMP(ppfd->dwFlags, PFD_NEED_SYSTEM_PALETTE);
TEST_AND_DUMP(ppfd->dwFlags, PFD_STEREO);
TEST_AND_DUMP(ppfd->dwFlags, PFD_STEREO_DONTCARE);
TEST_AND_DUMP(ppfd->dwFlags, PFD_SUPPORT_GDI);
TEST_AND_DUMP(ppfd->dwFlags, PFD_SUPPORT_OPENGL);
TEST_AND_DUMP(ppfd->dwFlags, PFD_SWAP_COPY);
TEST_AND_DUMP(ppfd->dwFlags, PFD_SWAP_EXCHANGE);
TEST_AND_DUMP(ppfd->dwFlags, PFD_SWAP_LAYER_BUFFERS);
#undef TEST_AND_DUMP
DPRINTF("\n");
DPRINTF(" - iPixelType : ");
switch (ppfd->iPixelType) {
case PFD_TYPE_RGBA: DPRINTF("PFD_TYPE_RGBA"); break;
case PFD_TYPE_COLORINDEX: DPRINTF("PFD_TYPE_COLORINDEX"); break;
}
DPRINTF("\n");
DPRINTF(" - Color : %d\n", ppfd->cColorBits);
DPRINTF(" - Alpha : %d\n", ppfd->cAlphaBits);
DPRINTF(" - Accum : %d\n", ppfd->cAccumBits);
DPRINTF(" - Depth : %d\n", ppfd->cDepthBits);
DPRINTF(" - Stencil : %d\n", ppfd->cStencilBits);
DPRINTF(" - Aux : %d\n", ppfd->cAuxBuffers);
DPRINTF(" - iLayerType : ");
switch (ppfd->iLayerType) {
case PFD_MAIN_PLANE: DPRINTF("PFD_MAIN_PLANE"); break;
case PFD_OVERLAY_PLANE: DPRINTF("PFD_OVERLAY_PLANE"); break;
case PFD_UNDERLAY_PLANE: DPRINTF("PFD_UNDERLAY_PLANE"); break;
}
DPRINTF("\n");
}
/* X11DRV_ChoosePixelFormat
Equivalent of glXChooseVisual
*/
int X11DRV_ChoosePixelFormat(DC *dc,
const PIXELFORMATDESCRIPTOR *ppfd) {
#define TEST_AND_ADD1(t,a) if (t) att_list[att_pos++] = a
#define TEST_AND_ADD2(t,a,b) if (t) { att_list[att_pos++] = a; att_list[att_pos++] = b; }
#define NULL_TEST_AND_ADD2(tv,a,b) att_list[att_pos++] = a; att_list[att_pos++] = ((tv) == 0 ? 0 : b)
#define ADD2(a,b) att_list[att_pos++] = a; att_list[att_pos++] = b
X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
int att_list[64];
int att_pos = 0;
XVisualInfo *vis;
if (TRACE_ON(opengl)) {
TRACE("(%p,%p)\n", dc, ppfd);
dump_PIXELFORMATDESCRIPTOR((PIXELFORMATDESCRIPTOR *) ppfd);
}
/* For the moment, we are dumb : we always allocate a new XVisualInfo structure,
we do not try to find an already found that could match */
if (physDev->used_visuals == MAX_PIXELFORMATS) {
ERR("Maximum number of visuals reached !\n");
/* Should SetError here... */
return 0;
}
if (ppfd->dwFlags & PFD_DRAW_TO_BITMAP) {
ERR("Flag not supported !\n");
/* Should SetError here... */
return 0;
}
/* Now, build the request to GLX */
TEST_AND_ADD1(ppfd->dwFlags & PFD_DOUBLEBUFFER, GLX_DOUBLEBUFFER);
TEST_AND_ADD1(ppfd->dwFlags & PFD_STEREO, GLX_STEREO);
TEST_AND_ADD1(ppfd->iPixelType == PFD_TYPE_RGBA, GLX_RGBA);
TEST_AND_ADD2(ppfd->iPixelType == PFD_TYPE_COLORINDEX, GLX_BUFFER_SIZE, ppfd->cColorBits);
NULL_TEST_AND_ADD2(ppfd->cDepthBits, GLX_DEPTH_SIZE, 8);
/* These flags are not supported yet...
NULL_TEST_AND_ADD2(ppfd->cAlphaBits, GLX_ALPHA_SIZE, 8);
ADD2(GLX_ACCUM_SIZE, ppfd->cAccumBits);
ADD2(GLX_STENCIL_SIZE, ppfd->cStencilBits);
ADD2(GLX_AUX_BUFFERS, ppfd->cAuxBuffers); */
att_list[att_pos] = None;
ENTER_GL(); {
/*
This command cannot be used as we need to use the default visual...
Let's hope it at least contains some OpenGL functionnalities
vis = glXChooseVisual(display, DefaultScreen(display), att_list);
*/
int num;
XVisualInfo template;
template.visualid = XVisualIDFromVisual(visual);
vis = XGetVisualInfo(display, VisualIDMask, &template, &num);
TRACE("Found visual : %p - returns %d\n", vis, physDev->used_visuals + 1);
}
LEAVE_GL();
if (vis == NULL) {
ERR("No visual found !\n");
/* Should SetError here... */
return 0;
}
physDev->visuals[physDev->used_visuals++] = vis;
return physDev->used_visuals;
}
/* X11DRV_DescribePixelFormat
Get the pixel-format descriptor associated to the given id
*/
int X11DRV_DescribePixelFormat(DC *dc,
int iPixelFormat,
UINT nBytes,
PIXELFORMATDESCRIPTOR *ppfd) {
X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
XVisualInfo *vis;
int value;
int rb,gb,bb,ab;
TRACE("(%p,%d,%d,%p)\n", dc, iPixelFormat, nBytes, ppfd);
if (nBytes < sizeof(PIXELFORMATDESCRIPTOR)) {
ERR("Wrong structure size !\n");
/* Should set error */
return 0;
}
if ((iPixelFormat > MAX_PIXELFORMATS) ||
(iPixelFormat > physDev->used_visuals + 1) ||
(iPixelFormat <= 0)) {
ERR("Wrong pixel format !\n");
/* Should set error */
return 0;
}
if (iPixelFormat == physDev->used_visuals + 1) {
int dblBuf[]={GLX_RGBA,GLX_DEPTH_SIZE,16,GLX_DOUBLEBUFFER,None};
/* Create a 'standard' X Visual */
ENTER_GL();
vis = glXChooseVisual(display,
DefaultScreen(display),
dblBuf);
LEAVE_GL();
WARN("Uninitialized Visual. Creating standard (%p) !\n", vis);
if (vis == NULL) {
ERR("Could not create standard visual !\n");
/* Should set error */
return 0;
}
physDev->visuals[physDev->used_visuals++] = vis;
}
vis = physDev->visuals[iPixelFormat - 1];
memset(ppfd, 0, sizeof(PIXELFORMATDESCRIPTOR));
ppfd->nSize = sizeof(PIXELFORMATDESCRIPTOR);
ppfd->nVersion = 1;
/* These flags are always the same... */
ppfd->dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_GENERIC_ACCELERATED;
/* Now the flags extraced from the Visual */
ENTER_GL();
glXGetConfig(display, vis, GLX_DOUBLEBUFFER, &value); if (value) ppfd->dwFlags |= PFD_DOUBLEBUFFER;
glXGetConfig(display, vis, GLX_STEREO, &value); if (value) ppfd->dwFlags |= PFD_STEREO;
/* Pixel type */
glXGetConfig(display, vis, GLX_RGBA, &value);
if (value)
ppfd->iPixelType = PFD_TYPE_RGBA;
else
ppfd->iPixelType = PFD_TYPE_COLORINDEX;
/* Color bits */
glXGetConfig(display, vis, GLX_BUFFER_SIZE, &value);
ppfd->cColorBits = value;
/* Red, green, blue and alpha bits / shifts */
if (ppfd->iPixelType == PFD_TYPE_RGBA) {
glXGetConfig(display, vis, GLX_RED_SIZE, &rb);
glXGetConfig(display, vis, GLX_GREEN_SIZE, &gb);
glXGetConfig(display, vis, GLX_BLUE_SIZE, &bb);
glXGetConfig(display, vis, GLX_ALPHA_SIZE, &ab);
ppfd->cRedBits = rb;
ppfd->cRedShift = gb + bb + ab;
ppfd->cBlueBits = bb;
ppfd->cBlueShift = ab;
ppfd->cGreenBits = gb;
ppfd->cGreenShift = bb + ab;
ppfd->cAlphaBits = ab;
ppfd->cAlphaShift = 0;
} else {
ppfd->cRedBits = 0;
ppfd->cRedShift = 0;
ppfd->cBlueBits = 0;
ppfd->cBlueShift = 0;
ppfd->cGreenBits = 0;
ppfd->cGreenShift = 0;
ppfd->cAlphaBits = 0;
ppfd->cAlphaShift = 0;
}
/* Accums : to do ... */
/* Depth bits */
glXGetConfig(display, vis, GLX_DEPTH_SIZE, &value);
ppfd->cDepthBits = value;
LEAVE_GL();
/* Aux, stencil : to do ... */
ppfd->iLayerType = PFD_MAIN_PLANE;
dump_PIXELFORMATDESCRIPTOR(ppfd);
return MAX_PIXELFORMATS;
}
/* X11DRV_GetPixelFormat
Get the pixel-format id used by this DC
*/
int X11DRV_GetPixelFormat(DC *dc) {
X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
TRACE("(%p): returns %d\n", dc, physDev->current_pf);
return physDev->current_pf;
}
/* X11DRV_SetPixelFormat
Set the pixel-format id used by this DC
*/
BOOL X11DRV_SetPixelFormat(DC *dc,
int iPixelFormat,
const PIXELFORMATDESCRIPTOR *ppfd) {
X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
TRACE("(%p,%d,%p)\n", dc, iPixelFormat, ppfd);
physDev->current_pf = iPixelFormat;
return TRUE;
}
/* X11DRV_SwapBuffers
Swap the buffers of this DC
*/
BOOL X11DRV_SwapBuffers(DC *dc) {
X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
TRACE("(%p)\n", dc);
ENTER_GL();
glXSwapBuffers(display, physDev->drawable);
LEAVE_GL();
return TRUE;
}
#else /* defined(HAVE_OPENGL) */
int X11DRV_ChoosePixelFormat(DC *dc,
const PIXELFORMATDESCRIPTOR *ppfd) {
ERR("No OpenGL support compiled in.\n");
return 0;
}
int X11DRV_DescribePixelFormat(DC *dc,
int iPixelFormat,
UINT nBytes,
PIXELFORMATDESCRIPTOR *ppfd) {
ERR("No OpenGL support compiled in.\n");
return 0;
}
int X11DRV_GetPixelFormat(DC *dc) {
ERR("No OpenGL support compiled in.\n");
return 0;
}
BOOL X11DRV_SetPixelFormat(DC *dc,
int iPixelFormat,
const PIXELFORMATDESCRIPTOR *ppfd) {
ERR("No OpenGL support compiled in.\n");
return FALSE;
}
BOOL X11DRV_SwapBuffers(DC *dc) {
ERR("No OpenGL support compiled in.\n");
return FALSE;
}
#endif /* defined(HAVE_OPENGL) */

View File

@ -96,8 +96,8 @@
/* Define if IPX includes are taken from Linux kernel */
#undef HAVE_IPX_LINUX
/* Define if Mesa is present on the system or not */
#undef HAVE_LIBMESAGL
/* Define if OpenGL is present on the system or not */
#undef HAVE_OPENGL
/* Define if the system has dynamic link library support with the dl* API */
#undef HAVE_DL_API
@ -110,3 +110,6 @@
/* Define if the OpenGL implementation supports the GL_EXT_paletted_texture extension */
#undef HAVE_GL_PALETTED_TEXTURE
/* Define if the OpenGL library supports the glXGetProcAddressARB call */
#undef HAVE_GLX_GETPROCADDRESS

View File

@ -128,8 +128,8 @@
/* Define if IPX includes are taken from Linux kernel */
#undef HAVE_IPX_LINUX
/* Define if Mesa is present on the system or not */
#undef HAVE_LIBMESAGL
/* Define if OpenGL is present on the system or not */
#undef HAVE_OPENGL
/* Define if the system has dynamic link library support with the dl* API */
#undef HAVE_DL_API
@ -143,6 +143,9 @@
/* Define if the OpenGL implementation supports the GL_EXT_paletted_texture extension */
#undef HAVE_GL_PALETTED_TEXTURE
/* Define if the OpenGL library supports the glXGetProcAddressARB call */
#undef HAVE_GLX_GETPROCADDRESS
/* The number of bytes in a long long. */
#undef SIZEOF_LONG_LONG
@ -242,6 +245,9 @@
/* Define if you have the <GL/gl.h> header file. */
#undef HAVE_GL_GL_H
/* Define if you have the <GL/glext.h> header file. */
#undef HAVE_GL_GLEXT_H
/* Define if you have the <GL/glx.h> header file. */
#undef HAVE_GL_GLX_H

View File

@ -104,6 +104,7 @@ char dbch_nonclient[] = "\003nonclient";
char dbch_ntdll[] = "\003ntdll";
char dbch_odbc[] = "\003odbc";
char dbch_ole[] = "\003ole";
char dbch_opengl[] = "\003opengl";
char dbch_pager[] = "\003pager";
char dbch_palette[] = "\003palette";
char dbch_pidl[] = "\003pidl";
@ -171,7 +172,7 @@ char dbch_wnet[] = "\003wnet";
char dbch_x11[] = "\003x11";
char dbch_x11drv[] = "\003x11drv";
#define DEBUG_CHANNEL_COUNT 164
#define DEBUG_CHANNEL_COUNT 165
static char * const debug_channels[DEBUG_CHANNEL_COUNT] = {
dbch_accel,
@ -272,6 +273,7 @@ static char * const debug_channels[DEBUG_CHANNEL_COUNT] = {
dbch_ntdll,
dbch_odbc,
dbch_ole,
dbch_opengl,
dbch_pager,
dbch_palette,
dbch_pidl,

View File

@ -176,6 +176,7 @@ typedef struct tagDC_FUNCS
BOOL (*pBeginPath)(DC*);
BOOL (*pBitBlt)(DC*,INT,INT,INT,INT,DC*,INT,INT,DWORD);
LONG (*pBitmapBits)(HBITMAP,void*,LONG,WORD);
INT (*pChoosePixelFormat)(DC*,const PIXELFORMATDESCRIPTOR *);
BOOL (*pChord)(DC*,INT,INT,INT,INT,INT,INT,INT,INT);
BOOL (*pCloseFigure)(DC*);
BOOL (*pCreateBitmap)(HBITMAP);
@ -186,6 +187,7 @@ typedef struct tagDC_FUNCS
DWORD,DWORD);
BOOL (*pDeleteDC)(DC*);
BOOL (*pDeleteObject)(HGDIOBJ);
INT (*pDescribePixelFormat)(DC *,INT,UINT,PIXELFORMATDESCRIPTOR *);
DWORD (*pDeviceCapabilities)(LPSTR,LPCSTR,LPCSTR,WORD,LPSTR,LPDEVMODEA);
BOOL (*pEllipse)(DC*,INT,INT,INT,INT);
INT (*pEndDoc)(DC*);
@ -206,6 +208,7 @@ typedef struct tagDC_FUNCS
BOOL (*pGetCharWidth)(DC*,UINT,UINT,LPINT);
BOOL (*pGetDCOrgEx)(DC*,LPPOINT);
COLORREF (*pGetPixel)(DC*,INT,INT);
INT (*pGetPixelFormat)(DC*);
BOOL (*pGetTextExtentPoint)(DC*,LPCWSTR,INT,LPSIZE);
BOOL (*pGetTextMetrics)(DC*,TEXTMETRICA*);
INT (*pIntersectClipRect)(DC*,INT,INT,INT,INT);
@ -246,6 +249,7 @@ typedef struct tagDC_FUNCS
INT (*pSetMapMode)(DC*,INT);
DWORD (*pSetMapperFlags)(DC*,DWORD);
COLORREF (*pSetPixel)(DC*,INT,INT,COLORREF);
BOOL (*pSetPixelFormat)(DC*,INT,const PIXELFORMATDESCRIPTOR *);
INT (*pSetPolyFillMode)(DC*,INT);
INT (*pSetROP2)(DC*,INT);
INT (*pSetRelAbs)(DC*,INT);
@ -265,6 +269,7 @@ typedef struct tagDC_FUNCS
const void *,const BITMAPINFO *,UINT,DWORD);
BOOL (*pStrokeAndFillPath)(DC*);
BOOL (*pStrokePath)(DC*);
BOOL (*pSwapBuffers)(DC*);
BOOL (*pWidenPath)(DC*);
} DC_FUNCTIONS;

View File

@ -9,9 +9,13 @@
#include "config.h"
#if defined(HAVE_LIBMESAGL) && defined(HAVE_GL_GLX_H)
#if defined(HAVE_OPENGL)
#define HAVE_MESAGL
#include "x11drv.h"
/* As GLX relies on X, this is needed */
#define ENTER_GL() EnterCriticalSection( &X11DRV_CritSection )
#define LEAVE_GL() LeaveCriticalSection( &X11DRV_CritSection )
#undef APIENTRY
#undef CALLBACK
@ -20,6 +24,7 @@
#define XMD_H /* This is to prevent the Xmd.h inclusion bug to happen :-/ */
#include <GL/gl.h>
#include <GL/glx.h>
#include <GL/glext.h>
#undef XMD_H
#undef APIENTRY
@ -31,10 +36,6 @@
#define WINAPI __stdcall
#define APIENTRY WINAPI
#else /* HAVE_LIBMESAGL */
#undef HAVE_MESAGL
#endif /* HAVE_LIBMESAGL */
#endif /* HAVE_OPENGL */
#endif /* __WINE_WINE_GL_H */

View File

@ -19,6 +19,7 @@
#include "winbase.h"
#include "windef.h"
#define MAX_PIXELFORMATS 8
struct tagBITMAPOBJ;
struct tagCLASS;
@ -67,6 +68,9 @@ typedef struct
X_PHYSBRUSH brush;
int backgroundPixel;
int textPixel;
XVisualInfo *visuals[MAX_PIXELFORMATS];
int used_visuals;
int current_pf;
} X11DRV_PDEVICE;
@ -153,6 +157,13 @@ extern INT X11DRV_DeviceBitmapBits( struct tagDC *dc, HBITMAP hbitmap,
LPBITMAPINFO info, UINT coloruse );
extern HANDLE X11DRV_LoadOEMResource( WORD id, WORD type );
/* OpenGL / X11 driver functions */
extern int X11DRV_ChoosePixelFormat(DC *dc, const PIXELFORMATDESCRIPTOR *pppfd) ;
extern int X11DRV_DescribePixelFormat(DC *dc, int iPixelFormat, UINT nBytes, PIXELFORMATDESCRIPTOR *ppfd) ;
extern int X11DRV_GetPixelFormat(DC *dc) ;
extern BOOL X11DRV_SetPixelFormat(DC *dc, int iPixelFormat, const PIXELFORMATDESCRIPTOR *ppfd) ;
extern BOOL X11DRV_SwapBuffers(DC *dc) ;
/* X11 driver internal functions */
extern BOOL X11DRV_BITMAP_Init(void);

View File

@ -59,6 +59,7 @@ static struct tagDllOverride {
/* we have to use libglide2x.so instead of glide2x.dll ... */
{"glide2x", "so,native"},
{"odbc32", "builtin"},
{"opengl32", "builtin,native"},
{NULL,NULL},
};
@ -482,6 +483,8 @@ module_loadorder_t *MODULE_GetLoadOrder(const char *path)
char *name;
int len;
TRACE("looking for %s\n", path);
assert(path != NULL);
/* Strip path information */