From aef4e153674a99237a3e9ae12e36c7ae910ce210 Mon Sep 17 00:00:00 2001 From: Lionel Ulmer Date: Tue, 13 Jun 2000 03:36:54 +0000 Subject: [PATCH] OpenGL documentation. --- documentation/opengl | 160 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 documentation/opengl diff --git a/documentation/opengl b/documentation/opengl new file mode 100644 index 00000000000..647dde46942 --- /dev/null +++ b/documentation/opengl @@ -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 -- 2.11.4.GIT