I What is needed to have OpenGL support in Wine
===============================================

Basically, if you have a Linux OpenGL ABI compliant libGL
(http://oss.sgi.com/projects/ogl-sample/ABI/) installed on your
computer, you should everything that is needed.

To be more clear, I will detail one step after another what the
configure script checks.

If, after Wine compiles, OpenGL support is not compiled in, you can
always check 'config.log' to see which of the following points failed.

I.1 Header files
----------------

The needed header files to build OpenGL support in Wine are :

 - gl.h : the definition of all OpenGL core functions, types and
   enumerants

 - glx.h : how OpenGL integrates in the X Window environment

 - glext.h : the list of all registered OpenGL extensions

The latter file (glext.h) is, as of now, not necessary to build
Wine. But as this file can be easily obtained from SGI
(http://oss.sgi.com/projects/ogl-sample/ABI/glext.h), and that all
OpenGL should provide one, I decided to keep it here.


I.2 OpenGL library thread-safety
--------------------------------

After that, the script checks if the OpenGL library relies or not on
the pthread library to provide thread safety (most 'modern' OpenGL
libraries do).

If the OpenGL library explicitely links in libpthread (you can check
it with a 'ldd libGL.so'), you need to force OpenGL support by
starting configure with the '--enable-opengl' flag.

The reason to this is that Wine contains some hacks done by Ove to
cohabit with pthread that are known to work well in most of the cases
(glibc 2.1.x). On the other hand, we never got Wine to work with glibc
2.0.6. Thus, I deemed preferable to play it safe : by default, I
suppose that the hack won't work and that it's the user's
responsability to enable it.

Anyway, it should be pretty safe to build with '--enable-opengl'.


I.3 OpenGL library itself
-------------------------

To check for the presence of 'libGL' on the system, the script checks
if it defines the 'glXCreateContext' function. There should be no
problem here.


I.4 glXGetProcAddressARB function
---------------------------------

The core of Wine's OpenGL implementation (at least for all extensions)
is the glXGetProcAddressARB function. Your OpenGL library needs to
have this function defined for Wine to be able to support OpenGL.

If your library does not provide it, you are out of luck.

(Note: this is not completely true as one could rewrite a
       glXGetProcAddressARB replacement using 'dlopen' and friends,
       but well, telling people to upgrade is easier :-) ).



II How to configure
===================

Configuration is quite easy : once OpenGL support has been built in
Wine, this internal OpenGL driver will be used each time an
application tries to load 'opengl32.dll'.

Due to restrictions (that do not exist in Windows) on OpenGL contexts,
if you want to prevent the screen to flicker when using OpenGL
applications (all games are using double-buffered contexts), you need
to set the following option in your .winerc / wine.ini in the [x11drv]
section :

DesktopDoubleBuffered = Y

and to run Wine with the '--desktop' option.



III How it all works
====================

(to be done later)



IV  Known problems - shortcomings
=================================

IV.1 Missing GLU32.DLL
----------------------

GLU is a library that is layered upon OpenGL. There is a 100 %
corespondance between the libGLU.so that is used on Linux and
GLU32.DLL.

As for the moment, I did not create a set of thunks to support this
library natively in Wine (it would easy to do, but I am waiting for a
better solution than adding another autogenerated thunk file), you can
always download anywhere on the net (it's free) a GLU32.DLL file (by
browsing, for example, http://ftpsearch.lycos.com/).


IV.2 OpenGL not detected at configure time
------------------------------------------

See section (I) for a detailed explanation of the configure
requirements.


IV.3 When running an OpenGL application, the screen flickers
------------------------------------------------------------

See section (II) for how to create the context double-buffered and
thus preventing this flicker effect.


IV.4 Wine gives me the following error message : 
------------------------------------------------
    Extension defined in the OpenGL library but NOT in opengl_ext.c... Please report
    (lionel.ulmer@free.fr) !

This means that the extension requested by the application is found in
the libGL used by Linux (ie the call to glXGetProcAddressARB returns a
non NULL pointer) but that this string was NOT found in Wine's
extension registry.

This can come from two causes :

 - the opengl_ext.c file is too old and need to be generated again.

 - use of obsolete extensions that are not supported anymore by SGI or
   of 'private' extensions that are not registered. An example of the
   former are 'glMTexCoord2fSGIS' and 'glSelectTextureSGIS' as used by
   Quake 2 (and apparently also by old versions of Half Life). If
   documentation can be found on these functions, they can be added to
   Wine's extension set.

If you have this, run with --debugmsg +opengl and send me
(lionel.ulmer@free.fr) the TRACE.



           Lionel Ulmer (lionel.ulmer@free.fr)
           last modification : 2000/06/12
