Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
270c9fb1
Commit
270c9fb1
authored
May 14, 2000
by
Ove Kaaven
Committed by
Alexandre Julliard
May 14, 2000
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Improved DIBSection support for IDirectDrawSurface::GetDC.
parent
61e42835
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
118 additions
and
42 deletions
+118
-42
dga.c
dlls/ddraw/ddraw/dga.c
+2
-0
dga2.c
dlls/ddraw/ddraw/dga2.c
+3
-0
main.c
dlls/ddraw/ddraw/main.c
+5
-4
x11.c
dlls/ddraw/ddraw/x11.c
+13
-9
dga.c
dlls/ddraw/dga.c
+3
-0
dga2.c
dlls/ddraw/dga2.c
+3
-0
dga_private.h
dlls/ddraw/dga_private.h
+2
-0
dga.c
dlls/ddraw/dsurface/dga.c
+24
-2
dga2.c
dlls/ddraw/dsurface/dga2.c
+11
-1
main.c
dlls/ddraw/dsurface/main.c
+38
-23
x11.c
dlls/ddraw/dsurface/x11.c
+14
-3
No files found.
dlls/ddraw/ddraw/dga.c
View file @
270c9fb1
...
...
@@ -409,9 +409,11 @@ static HRESULT WINAPI DGA_IDirectDraw2Impl_RestoreDisplayMode(LPDIRECTDRAW2 ifac
static
ULONG
WINAPI
DGA_IDirectDraw2Impl_Release
(
LPDIRECTDRAW2
iface
)
{
ICOM_THIS
(
IDirectDraw2Impl
,
iface
);
DDPRIVATE
(
This
);
TRACE
(
"(%p)->() decrementing from %lu.
\n
"
,
This
,
This
->
ref
);
if
(
!--
(
This
->
ref
))
{
VirtualFree
(
ddpriv
->
fb_addr
,
0
,
MEM_RELEASE
);
TSXF86DGADirectVideo
(
display
,
DefaultScreen
(
display
),
0
);
if
(
This
->
d
.
window
&&
GetPropA
(
This
->
d
.
window
,
ddProp
))
DestroyWindow
(
This
->
d
.
window
);
...
...
dlls/ddraw/ddraw/dga2.c
View file @
270c9fb1
...
...
@@ -146,6 +146,7 @@ static HRESULT WINAPI DGA2_IDirectDrawImpl_SetDisplayMode(
}
else
{
TRACE
(
"Using mode number %d
\n
"
,
mode_to_use
);
VirtualFree
(
ddpriv
->
DGA
.
fb_addr
,
0
,
MEM_RELEASE
);
TSXDGACloseFramebuffer
(
display
,
DefaultScreen
(
display
));
if
(
!
TSXDGAOpenFramebuffer
(
display
,
DefaultScreen
(
display
)))
{
...
...
@@ -155,6 +156,7 @@ static HRESULT WINAPI DGA2_IDirectDrawImpl_SetDisplayMode(
/* Initialize the frame buffer */
_DGA2_Initialize_FrameBuffer
(
This
,
mode_to_use
);
VirtualAlloc
(
ddpriv
->
DGA
.
fb_addr
,
ddpriv
->
DGA
.
fb_memsize
,
MEM_RESERVE
|
MEM_SYSTEM
,
PAGE_READWRITE
);
/* Re-get (if necessary) the DGA events */
TSXDGASelectInput
(
display
,
DefaultScreen
(
display
),
...
...
@@ -226,6 +228,7 @@ static ULONG WINAPI DGA2_IDirectDraw2Impl_Release(LPDIRECTDRAW2 iface) {
if
(
!--
(
This
->
ref
))
{
TRACE
(
"Closing access to the FrameBuffer
\n
"
);
VirtualFree
(
ddpriv
->
DGA
.
fb_addr
,
0
,
MEM_RELEASE
);
TSXDGACloseFramebuffer
(
display
,
DefaultScreen
(
display
));
TRACE
(
"Going back to normal X mode of operation
\n
"
);
TSXDGASetMode
(
display
,
DefaultScreen
(
display
),
0
);
...
...
dlls/ddraw/ddraw/main.c
View file @
270c9fb1
...
...
@@ -547,10 +547,11 @@ HRESULT common_off_screen_CreateSurface(
ERR
(
"Creates a surface that is already allocated : assuming this is an application bug !
\n
"
);
lpdsf
->
s
.
surface_desc
.
dwFlags
|=
DDSD_PITCH
|
DDSD_LPSURFACE
;
lpdsf
->
s
.
surface_desc
.
u1
.
lpSurface
=
(
LPBYTE
)
HeapAlloc
(
GetProcessHeap
(),
0
,
lpdsf
->
s
.
surface_desc
.
dwWidth
*
lpdsf
->
s
.
surface_desc
.
dwHeight
*
bpp
lpdsf
->
s
.
surface_desc
.
u1
.
lpSurface
=
(
LPBYTE
)
VirtualAlloc
(
NULL
,
lpdsf
->
s
.
surface_desc
.
dwWidth
*
lpdsf
->
s
.
surface_desc
.
dwHeight
*
bpp
,
MEM_RESERVE
|
MEM_COMMIT
,
PAGE_READWRITE
);
lpdsf
->
s
.
surface_desc
.
lPitch
=
lpdsf
->
s
.
surface_desc
.
dwWidth
*
bpp
;
return
DD_OK
;
...
...
dlls/ddraw/ddraw/x11.c
View file @
270c9fb1
...
...
@@ -245,15 +245,18 @@ static XImage *create_xshmimage(
if
(
This
->
d
.
pixel_convert
!=
NULL
)
{
int
bpp
=
PFGET_BPP
(
This
->
d
.
directdraw_pixelformat
);
lpdsf
->
s
.
surface_desc
.
u1
.
lpSurface
=
HeapAlloc
(
GetProcessHeap
(),
HEAP_ZERO_MEMORY
,
lpdsf
->
s
.
surface_desc
.
u1
.
lpSurface
=
VirtualAlloc
(
NULL
,
lpdsf
->
s
.
surface_desc
.
dwWidth
*
lpdsf
->
s
.
surface_desc
.
dwHeight
*
bpp
bpp
,
MEM_RESERVE
|
MEM_COMMIT
,
PAGE_READWRITE
);
}
else
}
else
{
lpdsf
->
s
.
surface_desc
.
u1
.
lpSurface
=
img
->
data
;
VirtualAlloc
(
img
->
data
,
img
->
bytes_per_line
*
img
->
height
,
MEM_RESERVE
|
MEM_SYSTEM
,
PAGE_READWRITE
);
}
return
img
;
}
#endif
/* HAVE_LIBXXSHM */
...
...
@@ -271,12 +274,13 @@ static XImage *create_ximage(IDirectDraw2Impl* This, IDirectDrawSurface4Impl* lp
if
(
img
==
NULL
)
{
#endif
/* Allocate surface memory */
lpdsf
->
s
.
surface_desc
.
u1
.
lpSurface
=
HeapAlloc
(
GetProcessHeap
(),
HEAP_ZERO_MEMORY
,
lpdsf
->
s
.
surface_desc
.
u1
.
lpSurface
=
VirtualAlloc
(
NULL
,
lpdsf
->
s
.
surface_desc
.
dwWidth
*
lpdsf
->
s
.
surface_desc
.
dwHeight
*
bpp
bpp
,
MEM_RESERVE
|
MEM_COMMIT
,
PAGE_READWRITE
);
if
(
This
->
d
.
pixel_convert
!=
NULL
)
...
...
dlls/ddraw/dga.c
View file @
270c9fb1
...
...
@@ -155,6 +155,9 @@ DGA_Create( LPDIRECTDRAW *lplpDD ) {
dgpriv
->
fb_memsize
=
memsize
;
dgpriv
->
vpmask
=
0
;
/* Register frame buffer with the kernel, it is a potential DIB section */
VirtualAlloc
(
dgpriv
->
fb_addr
,
dgpriv
->
fb_memsize
,
MEM_RESERVE
|
MEM_SYSTEM
,
PAGE_READWRITE
);
/* The cast is because DGA2's install colormap does not return a value whereas
DGA1 version does */
dgpriv
->
InstallColormap
=
(
void
(
*
)(
Display
*
,
int
,
Colormap
))
TSXF86DGAInstallColormap
;
...
...
dlls/ddraw/dga2.c
View file @
270c9fb1
...
...
@@ -156,6 +156,9 @@ DGA2_Create( LPDIRECTDRAW *lplpDD ) {
/* Initialize the frame buffer */
_DGA2_Initialize_FrameBuffer
(
ddraw
,
mode_to_use
);
/* Register frame buffer with the kernel, it is as a potential DIB section */
VirtualAlloc
(
dgpriv
->
DGA
.
fb_addr
,
dgpriv
->
DGA
.
fb_memsize
,
MEM_RESERVE
|
MEM_SYSTEM
,
PAGE_READWRITE
);
/* Set the input handling for relative mouse movements */
X11DRV_EVENT_SetInputMethod
(
X11DRV_INPUT_RELATIVE
);
...
...
dlls/ddraw/dga_private.h
View file @
270c9fb1
...
...
@@ -33,6 +33,8 @@ typedef struct dga_ds_private {
/* For usage in DGA2 */
extern
ULONG
WINAPI
DGA_IDirectDrawSurface4Impl_Release
(
LPDIRECTDRAWSURFACE4
iface
)
;
extern
HRESULT
WINAPI
DGA_IDirectDrawSurface4Impl_SetPalette
(
LPDIRECTDRAWSURFACE4
iface
,
LPDIRECTDRAWPALETTE
pal
)
;
extern
HRESULT
WINAPI
DGA_IDirectDrawSurface4Impl_Unlock
(
LPDIRECTDRAWSURFACE4
iface
,
LPVOID
surface
)
;
extern
HRESULT
WINAPI
DGA_IDirectDraw2Impl_CreateSurface_no_VT
(
LPDIRECTDRAW2
iface
,
LPDDSURFACEDESC
lpddsd
,
LPDIRECTDRAWSURFACE
*
lpdsf
,
IUnknown
*
lpunk
)
;
...
...
dlls/ddraw/dsurface/dga.c
View file @
270c9fb1
...
...
@@ -22,6 +22,14 @@ DEFAULT_DEBUG_CHANNEL(ddraw);
#define DPPRIVATE(x) dga_dp_private *dppriv = ((dga_dp_private*)(x)->private)
#define DSPRIVATE(x) dga_ds_private *dspriv = ((dga_ds_private*)(x)->private)
static
BYTE
DGA_TouchSurface
(
LPDIRECTDRAWSURFACE4
iface
)
{
ICOM_THIS
(
IDirectDrawSurface4Impl
,
iface
);
/* if the DIB section is in GdiMod state, we must
* touch the surface to get any updates from the DIB */
return
*
(
BYTE
*
)(
This
->
s
.
surface_desc
.
u1
.
lpSurface
);
}
/******************************************************************************
* IDirectDrawSurface methods
*
...
...
@@ -41,6 +49,8 @@ HRESULT WINAPI DGA_IDirectDrawSurface4Impl_Flip(
LPBYTE
surf
;
TRACE
(
"(%p)->Flip(%p,%08lx)
\n
"
,
This
,
iflipto
,
dwFlags
);
DGA_TouchSurface
(
iface
);
iflipto
=
_common_find_flipto
(
This
,
iflipto
);
/* and flip! */
...
...
@@ -107,7 +117,7 @@ ULONG WINAPI DGA_IDirectDrawSurface4Impl_Release(LPDIRECTDRAWSURFACE4 iface) {
IDirectDraw2_Release
((
IDirectDraw2
*
)
This
->
s
.
ddraw
);
/* clear out of surface list */
if
(
ddpriv
->
fb_height
==
-
1
)
HeapFree
(
GetProcessHeap
(),
0
,
This
->
s
.
surface_desc
.
u1
.
lpSurface
);
VirtualFree
(
This
->
s
.
surface_desc
.
u1
.
lpSurface
,
0
,
MEM_RELEASE
);
else
ddpriv
->
vpmask
&=
~
(
1
<<
(
dspriv
->
fb_height
/
ddpriv
->
fb_height
));
...
...
@@ -124,6 +134,18 @@ ULONG WINAPI DGA_IDirectDrawSurface4Impl_Release(LPDIRECTDRAWSURFACE4 iface) {
return
S_OK
;
}
HRESULT
WINAPI
DGA_IDirectDrawSurface4Impl_Unlock
(
LPDIRECTDRAWSURFACE4
iface
,
LPVOID
surface
)
{
ICOM_THIS
(
IDirectDrawSurface4Impl
,
iface
);
TRACE
(
"(%p)->Unlock(%p)
\n
"
,
This
,
surface
);
/* in case this was called from ReleaseDC */
DGA_TouchSurface
(
iface
);
return
DD_OK
;
}
ICOM_VTABLE
(
IDirectDrawSurface4
)
dga_dds4vt
=
{
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
...
...
@@ -159,7 +181,7 @@ ICOM_VTABLE(IDirectDrawSurface4) dga_dds4vt =
IDirectDrawSurface4Impl_SetColorKey
,
IDirectDrawSurface4Impl_SetOverlayPosition
,
DGA_IDirectDrawSurface4Impl_SetPalette
,
IDirectDrawSurface4Impl_Unlock
,
DGA_
IDirectDrawSurface4Impl_Unlock
,
IDirectDrawSurface4Impl_UpdateOverlay
,
IDirectDrawSurface4Impl_UpdateOverlayDisplay
,
IDirectDrawSurface4Impl_UpdateOverlayZOrder
,
...
...
dlls/ddraw/dsurface/dga2.c
View file @
270c9fb1
...
...
@@ -21,6 +21,14 @@ DEFAULT_DEBUG_CHANNEL(ddraw);
#define DPPRIVATE(x) dga2_dp_private *dppriv = ((dga2_dp_private*)(x)->private)
#define DSPRIVATE(x) dga2_ds_private *dspriv = ((dga2_ds_private*)(x)->private)
static
BYTE
DGA2_TouchSurface
(
LPDIRECTDRAWSURFACE4
iface
)
{
ICOM_THIS
(
IDirectDrawSurface4Impl
,
iface
);
/* if the DIB section is in GdiMod state, we must
* touch the surface to get any updates from the DIB */
return
*
(
BYTE
*
)(
This
->
s
.
surface_desc
.
u1
.
lpSurface
);
}
HRESULT
WINAPI
DGA2_IDirectDrawSurface4Impl_Flip
(
LPDIRECTDRAWSURFACE4
iface
,
LPDIRECTDRAWSURFACE4
flipto
,
DWORD
dwFlags
)
{
...
...
@@ -32,6 +40,8 @@ HRESULT WINAPI DGA2_IDirectDrawSurface4Impl_Flip(
LPBYTE
surf
;
TRACE
(
"(%p)->Flip(%p,%08lx)
\n
"
,
This
,
iflipto
,
dwFlags
);
DGA2_TouchSurface
(
iface
);
iflipto
=
_common_find_flipto
(
This
,
iflipto
);
/* and flip! */
...
...
@@ -94,7 +104,7 @@ ICOM_VTABLE(IDirectDrawSurface4) dga2_dds4vt =
IDirectDrawSurface4Impl_SetColorKey
,
IDirectDrawSurface4Impl_SetOverlayPosition
,
DGA_IDirectDrawSurface4Impl_SetPalette
,
IDirectDrawSurface4Impl_Unlock
,
DGA_
IDirectDrawSurface4Impl_Unlock
,
IDirectDrawSurface4Impl_UpdateOverlay
,
IDirectDrawSurface4Impl_UpdateOverlayDisplay
,
IDirectDrawSurface4Impl_UpdateOverlayZOrder
,
...
...
dlls/ddraw/dsurface/main.c
View file @
270c9fb1
...
...
@@ -15,6 +15,7 @@
#include <stdio.h>
#include "debugtools.h"
#include "bitmap.h"
#include "ddraw_private.h"
DEFAULT_DEBUG_CHANNEL
(
ddraw
);
...
...
@@ -675,8 +676,9 @@ HRESULT WINAPI IDirectDrawSurface4Impl_GetDC(LPDIRECTDRAWSURFACE4 iface,HDC* lph
DDSURFACEDESC
desc
;
BITMAPINFO
*
b_info
;
UINT
usage
;
HDC
ddc
;
FIXM
E
(
"(%p)->GetDC(%p)
\n
"
,
This
,
lphdc
);
TRAC
E
(
"(%p)->GetDC(%p)
\n
"
,
This
,
lphdc
);
/* Creates a DIB Section of the same size / format as the surface */
IDirectDrawSurface4_Lock
(
iface
,
NULL
,
&
desc
,
0
,
0
);
...
...
@@ -702,7 +704,7 @@ HRESULT WINAPI IDirectDrawSurface4Impl_GetDC(LPDIRECTDRAWSURFACE4 iface,HDC* lph
b_info
->
bmiHeader
.
biSize
=
sizeof
(
BITMAPINFOHEADER
);
b_info
->
bmiHeader
.
biWidth
=
desc
.
dwWidth
;
b_info
->
bmiHeader
.
biHeight
=
desc
.
dwHeight
;
b_info
->
bmiHeader
.
biHeight
=
-
desc
.
dwHeight
;
b_info
->
bmiHeader
.
biPlanes
=
1
;
b_info
->
bmiHeader
.
biBitCount
=
desc
.
ddpfPixelFormat
.
u
.
dwRGBBitCount
;
#if 0
...
...
@@ -760,16 +762,19 @@ HRESULT WINAPI IDirectDrawSurface4Impl_GetDC(LPDIRECTDRAWSURFACE4 iface,HDC* lph
}
break
;
}
This
->
s
.
DIBsection
=
CreateDIBSection
(
BeginPaint
(
This
->
s
.
ddraw
->
d
.
mainWindow
,
&
This
->
s
.
ddraw
->
d
.
ps
),
ddc
=
CreateDCA
(
"DISPLAY"
,
NULL
,
NULL
,
NULL
);
This
->
s
.
DIBsection
=
ddc
?
DIB_CreateDIBSection
(
ddc
,
b_info
,
usage
,
&
(
This
->
s
.
bitmap_data
),
0
,
0
);
EndPaint
(
This
->
s
.
ddraw
->
d
.
mainWindow
,
&
This
->
s
.
ddraw
->
d
.
ps
)
;
(
DWORD
)
desc
.
u1
.
lpSurface
,
desc
.
lPitch
)
:
0
;
if
(
!
This
->
s
.
DIBsection
)
{
ERR
(
"CreateDIBSection failed!
\n
"
);
if
(
ddc
)
DeleteDC
(
ddc
);
HeapFree
(
GetProcessHeap
(),
0
,
b_info
);
return
E_FAIL
;
}
TRACE
(
"DIBSection at : %p
\n
"
,
This
->
s
.
bitmap_data
);
...
...
@@ -778,19 +783,26 @@ HRESULT WINAPI IDirectDrawSurface4Impl_GetDC(LPDIRECTDRAWSURFACE4 iface,HDC* lph
HeapFree
(
GetProcessHeap
(),
0
,
b_info
);
/* Create the DC */
This
->
s
.
hdc
=
CreateCompatibleDC
(
0
);
This
->
s
.
hdc
=
CreateCompatibleDC
(
ddc
);
This
->
s
.
holdbitmap
=
SelectObject
(
This
->
s
.
hdc
,
This
->
s
.
DIBsection
);
if
(
ddc
)
DeleteDC
(
ddc
);
}
/* Copy our surface in the DIB section */
if
((
GET_BPP
(
desc
)
*
desc
.
dwWidth
)
==
desc
.
lPitch
)
memcpy
(
This
->
s
.
bitmap_data
,
desc
.
u1
.
lpSurface
,
desc
.
lPitch
*
desc
.
dwHeight
);
else
/* TODO */
FIXME
(
"This case has to be done :/
\n
"
);
if
(
This
->
s
.
bitmap_data
!=
desc
.
u1
.
lpSurface
)
{
FIXME
(
"DIBSection not created for frame buffer, reverting to old code
\n
"
);
/* Copy our surface in the DIB section */
if
((
GET_BPP
(
desc
)
*
desc
.
dwWidth
)
==
desc
.
lPitch
)
memcpy
(
This
->
s
.
bitmap_data
,
desc
.
u1
.
lpSurface
,
desc
.
lPitch
*
desc
.
dwHeight
);
else
/* TODO */
FIXME
(
"This case has to be done :/
\n
"
);
}
TRACE
(
"HDC : %08lx
\n
"
,
(
DWORD
)
This
->
s
.
hdc
);
*
lphdc
=
This
->
s
.
hdc
;
if
(
lphdc
)
{
TRACE
(
"HDC : %08lx
\n
"
,
(
DWORD
)
This
->
s
.
hdc
);
*
lphdc
=
This
->
s
.
hdc
;
}
return
DD_OK
;
}
...
...
@@ -798,14 +810,17 @@ HRESULT WINAPI IDirectDrawSurface4Impl_GetDC(LPDIRECTDRAWSURFACE4 iface,HDC* lph
HRESULT
WINAPI
IDirectDrawSurface4Impl_ReleaseDC
(
LPDIRECTDRAWSURFACE4
iface
,
HDC
hdc
)
{
ICOM_THIS
(
IDirectDrawSurface4Impl
,
iface
);
FIXME
(
"(%p)->(0x%08lx),stub!
\n
"
,
This
,(
long
)
hdc
);
TRACE
(
"Copying DIBSection at : %p
\n
"
,
This
->
s
.
bitmap_data
);
/* Copy the DIB section to our surface */
if
((
GET_BPP
(
This
->
s
.
surface_desc
)
*
This
->
s
.
surface_desc
.
dwWidth
)
==
This
->
s
.
surface_desc
.
lPitch
)
{
memcpy
(
This
->
s
.
surface_desc
.
u1
.
lpSurface
,
This
->
s
.
bitmap_data
,
This
->
s
.
surface_desc
.
lPitch
*
This
->
s
.
surface_desc
.
dwHeight
);
}
else
{
/* TODO */
FIXME
(
"This case has to be done :/
\n
"
);
TRACE
(
"(%p)->(0x%08lx)
\n
"
,
This
,(
long
)
hdc
);
if
(
This
->
s
.
bitmap_data
!=
This
->
s
.
surface_desc
.
u1
.
lpSurface
)
{
TRACE
(
"Copying DIBSection at : %p
\n
"
,
This
->
s
.
bitmap_data
);
/* Copy the DIB section to our surface */
if
((
GET_BPP
(
This
->
s
.
surface_desc
)
*
This
->
s
.
surface_desc
.
dwWidth
)
==
This
->
s
.
surface_desc
.
lPitch
)
{
memcpy
(
This
->
s
.
surface_desc
.
u1
.
lpSurface
,
This
->
s
.
bitmap_data
,
This
->
s
.
surface_desc
.
lPitch
*
This
->
s
.
surface_desc
.
dwHeight
);
}
else
{
/* TODO */
FIXME
(
"This case has to be done :/
\n
"
);
}
}
/* Unlock the surface */
IDirectDrawSurface4_Unlock
(
iface
,
This
->
s
.
surface_desc
.
u1
.
lpSurface
);
...
...
dlls/ddraw/dsurface/x11.c
View file @
270c9fb1
...
...
@@ -30,6 +30,12 @@ DEFAULT_DEBUG_CHANNEL(ddraw);
#define DPPRIVATE(x) x11_dp_private *dppriv = ((x11_dp_private*)(x)->private)
#define DSPRIVATE(x) x11_ds_private *dspriv = ((x11_ds_private*)(x)->private)
static
BYTE
Xlib_TouchData
(
LPVOID
data
)
{
/* this is a function so it doesn't get optimized out */
return
*
(
BYTE
*
)
data
;
}
/******************************************************************************
* IDirectDrawSurface methods
*
...
...
@@ -126,6 +132,7 @@ HRESULT WINAPI Xlib_IDirectDrawSurface4Impl_Lock(
X11DRV_EVENT_WaitShmCompletions
(
ddpriv
->
drawable
);
}
#endif
return
DD_OK
;
}
...
...
@@ -140,6 +147,9 @@ static void Xlib_copy_surface_on_screen(IDirectDrawSurface4Impl* This) {
This
->
s
.
surface_desc
.
lPitch
,
This
->
s
.
palette
);
/* if the DIB section is in GdiMod state, we must
* touch the surface to get any updates from the DIB */
Xlib_TouchData
(
dspriv
->
image
->
data
);
#ifdef HAVE_LIBXXSHM
if
(
ddpriv
->
xshm_active
)
{
/*
...
...
@@ -321,7 +331,7 @@ ULONG WINAPI Xlib_IDirectDrawSurface4Impl_Release(LPDIRECTDRAWSURFACE4 iface) {
if
(
dspriv
->
image
!=
NULL
)
{
if
(
This
->
s
.
ddraw
->
d
.
pixel_convert
!=
NULL
)
{
/* In pixel conversion mode, there are 2 buffers to release. */
HeapFree
(
GetProcessHeap
(),
0
,
This
->
s
.
surface_desc
.
u1
.
lpSurface
);
VirtualFree
(
This
->
s
.
surface_desc
.
u1
.
lpSurface
,
0
,
MEM_RELEASE
);
#ifdef HAVE_LIBXXSHM
if
(
ddpriv
->
xshm_active
)
{
...
...
@@ -340,19 +350,20 @@ ULONG WINAPI Xlib_IDirectDrawSurface4Impl_Release(LPDIRECTDRAWSURFACE4 iface) {
#ifdef HAVE_LIBXXSHM
if
(
ddpriv
->
xshm_active
)
{
VirtualFree
(
dspriv
->
image
->
data
,
0
,
MEM_RELEASE
);
TSXShmDetach
(
display
,
&
(
dspriv
->
shminfo
));
TSXDestroyImage
(
dspriv
->
image
);
shmdt
(
dspriv
->
shminfo
.
shmaddr
);
}
else
#endif
{
HeapFree
(
GetProcessHeap
(),
0
,
This
->
s
.
surface_desc
.
u1
.
lpSurface
);
VirtualFree
(
This
->
s
.
surface_desc
.
u1
.
lpSurface
,
0
,
MEM_RELEASE
);
TSXDestroyImage
(
dspriv
->
image
);
}
}
dspriv
->
image
=
0
;
}
else
HeapFree
(
GetProcessHeap
(),
0
,
This
->
s
.
surface_desc
.
u1
.
lpSurface
);
VirtualFree
(
This
->
s
.
surface_desc
.
u1
.
lpSurface
,
0
,
MEM_RELEASE
);
if
(
This
->
s
.
palette
)
IDirectDrawPalette_Release
((
IDirectDrawPalette
*
)
This
->
s
.
palette
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment