mirror of
https://github.com/reactos/wine.git
synced 2024-11-25 04:39:45 +00:00
wined3d: Turn around the image in LockRect.
This commit is contained in:
parent
e18c89b3f4
commit
40d3cc5ee4
@ -588,12 +588,34 @@ HRESULT WINAPI IWineD3DSurfaceImpl_LockRect(IWineD3DSurface *iface, WINED3DLOCKE
|
||||
if ((This->lockedRect.left == 0 && This->lockedRect.top == 0 &&
|
||||
This->lockedRect.right == This->currentDesc.Width
|
||||
&& This->lockedRect.bottom == This->currentDesc.Height)) {
|
||||
char *row, *top, *bottom;
|
||||
int i;
|
||||
|
||||
glReadPixels(0, 0,
|
||||
This->currentDesc.Width,
|
||||
This->currentDesc.Height,
|
||||
This->glDescription.glFormat,
|
||||
This->glDescription.glType,
|
||||
(char *)pLockedRect->pBits);
|
||||
|
||||
/* glReadPixels returns the image upside down, and there is no way to prevent this.
|
||||
Flip the lines in software*/
|
||||
row = HeapAlloc(GetProcessHeap(), 0, pLockedRect->Pitch);
|
||||
if(!row) {
|
||||
ERR("Out of memory\n");
|
||||
return E_OUTOFMEMORY;
|
||||
}
|
||||
top = This->resource.allocatedMemory;
|
||||
bottom = ( (char *) This->resource.allocatedMemory) + pLockedRect->Pitch * ( This->currentDesc.Height - 1);
|
||||
for(i = 0; i < This->currentDesc.Height / 2; i++) {
|
||||
memcpy(row, top, pLockedRect->Pitch);
|
||||
memcpy(top, bottom, pLockedRect->Pitch);
|
||||
memcpy(bottom, row, pLockedRect->Pitch);
|
||||
top += pLockedRect->Pitch;
|
||||
bottom -= pLockedRect->Pitch;
|
||||
}
|
||||
HeapFree(GetProcessHeap(), 0, row);
|
||||
|
||||
} else if (This->lockedRect.left == 0 && This->lockedRect.right == This->currentDesc.Width) {
|
||||
glReadPixels(0,
|
||||
This->lockedRect.top,
|
||||
|
Loading…
Reference in New Issue
Block a user