OpenGL documentation.
This commit is contained in:
parent
bd86d18f74
commit
aef4e15367
|
@ -0,0 +1,160 @@
|
||||||
|
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
|
Loading…
Reference in New Issue