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