DIB section problem
Stefan Dösinger
stefandoesinger at gmx.at
Thu Apr 20 12:35:54 CDT 2006
Hello,
While working on an implementation for IWineD3DSurface::GetDC and
IWineD3DSurface::ReleaseDC, I think I stubled accross a bug in the DIB code.
It appears to me that the memory of the DIB section isn't unprotected
correctly when the dib section is destroyed.
I have pasted my code here: http://wine.pastebin.com/671601
What I do is basically:
->Lock the surface
->Create a DIB section for the locked surface memory(Allocated with
VirtualAlloc)
->Get a DC for the dib section
->Setup the dc and return it to the app
In ReleaseDC, I do it the reverse way:
->Release the DC
->Delete the DIB section
->Unlock the surface
But all accesses to the surface's memory fail after deleting the dib section.
Therefore I unlock the surface before destroying the dib, and upload the
texture to opengl, to be able to free the memory.
For testing, I've inserted
VirtualProtect(This->resource.allocatedMemory, This->resource.size,
PAGE_READWRITE,&oldProtect);
after the DeleteObject, and then I can access the surface normally again. But
the image that the app wrote with GDI commands isn't there, it looks like the
image is left in the X server and dropped.
Can someone with more knowledge of the DIB code have a quick look at this?
Thanks,
Stefan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 191 bytes
Desc: not available
Url : http://www.winehq.org/pipermail/wine-devel/attachments/20060420/8ac60c35/attachment.pgp
More information about the wine-devel
mailing list