Roderick Colenbrander wrote:
Roderick Colenbrander wrote :
On 11/1/06, Bertrand Coconnier <[EMAIL PROTECTED]> wrote:
Hi,
The last release of Wine 0.9.24 contains an error in the code of
opengl32.dll.so
under X11 : Wine tries to get the address of "wglGetIntegerv" (line
608
of
dlls/opengl32/wgl.c) before the extensions of WGL have actually been
loaded
(i.e. before X11DRV_WineGL_LoadExtensions() is called). The reading of
the
wglGetIntegerv address fails and afterwards, whenever
internal_glGetIntegerv()
is called, wine_wgl.p_wglGetIntegerv is NULL and a Fatal Exception is
raised.
This is probably already fixed in the git tree. See the commit:
winex11.drv: Fixed the prototype of many OpenGL functions.
Jesse
Else if the problem still happens something strange is going as the
extensions are registered at x11drv startup.
Roderick
Yes, the problem still happens because the function process_attach() (line
582
of dlls/opengl32/wgl.c) is called before the x11drv startup. The comment
of
process_attach is very clear : "/* This is for brain-dead applications
that use
OpenGL functions before even creating a rendering context.... */". It is
clear
that process_attach is a workaround for *brain-dead* apps :) and among
other
things it gets the address of wglGetIntegerv. This operation used to
succeed as
long as GetProcAddress() was used but now since x11drv is needed to upload
the
wglGetIntegerv address there is some kind of race condition and the
operation
fails hence the bug.
Bertrand.
Compared to 0.9.23 I changed the way wglGetIntegerv is loaded before it was
directly loaded using GetProcAddress from winex11.drv now it is still loaded
from winex11.drv but then using wglGetProcAddress from gdi32. At wine startup
(I'm not sure at which stage but I believe directly when you use gdi stuff or
perhaps even earlier) winex11.drv is initialized and during this initialization
my opengl code is initialized aswell. I wonder what causes the race as I
haven't seen it happening for other users yet. I want to avoid a patch like
yours as I plan to do similar things for some other functions.
Perhaps something goes wrong in wglGetProcAddress itself. Try running wine using:
WINEDEBUG=+wgl,+opengl wine wow.exe -opengl &> log. If it is correct you'll see
some opengl information (gl version, loading of extensions) before stuff happens in
opengl32.dll.
Roderick
Hi Roderick, do you have a patch for this problem, since 0.23 a number
of wow users seem to be getting a crash at startup that didn't happen
before 0.23 or 0.22, can't remember which, only some users not all.
I just wondered if this is the fix for it, if we could try it out ?
Regards
Nick