Flickering bug for World of Warcraft
the3dfxdude at gmail.com
Fri Nov 3 19:26:00 CST 2006
On 11/3/06, Bertrand Coconnier <bcoconni at club-internet.fr> wrote:
> After investigating a bit in the Wine code, it seems that the flickering
> bug of WoW in OpenGL mode is due to wglGetPbufferDCARB that returns a DC
> which type is OBJ_MEMDC while it should return a DC which type is
> OBJ_DC. And since in the current git tree, the DC type of a Pbuffer is
> OBJ_MEMDC then the code located in lines 1394-1395 of
> dlls/winex11.drv/opengl.c is executed : the Pbuffer is copied to the
> screen each time the GL context is made current to the Pbuffer hence the
> flickering (WoW bounds the GL context alternatively to the screen and to
> the Pbuffer). The expected behaviour is not to copy the Pbuffer content
> to the screen since WoW does it itself.
> The easiest workaround for this bug would be to make
> X11DRV_wglGetPbufferDCARB to return the Pbuffer's object->hdc (this
> fixes the flickering bug). However, I have made some tests with Windows
> XP and it appears that wglGetPbufferDCARB returns a HDC different from
> the HDC passed when wglCreatePbufferARB was called. So such a patch
> would be a dirty hack not a real fix.
"To create a device context for the pbuffer, call
HDC wglGetPbufferDCARB(HPBUFFERARB hPbuffer);
where <hPbuffer> is a handle returned from a previous call to
wglCreatePbufferARB. A device context is returned by
wglGetPbufferDCARB which can be used to associate a rendering
context with the pbuffer. Any rendering context created with
a wglCreateContext that is "compatible" with the <iPixelFormat> may
be used to render into the pbuffer."
So yes, it's supposed to return a new one.
So I can understand better, what are these set to when you run your
program on both windows and linux?
type1 = GetObjectType(hDC);
type2 = GetObjectType(pBufferHDC);
More information about the wine-devel