Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
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-cw
Commits
6fb9ee0e
Commit
6fb9ee0e
authored
Jul 19, 2010
by
Henri Verbeet
Committed by
Alexandre Julliard
Jul 20, 2010
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ddraw: Merge the ddraw thunks into ddraw.c.
Note how both ddraw 1 and ddraw 7 used the same IDirectDrawImpl_XXX naming convention.
parent
2e977463
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
1355 additions
and
1457 deletions
+1355
-1457
Makefile.in
dlls/ddraw/Makefile.in
+0
-1
ddraw.c
dlls/ddraw/ddraw.c
+1348
-222
ddraw_private.h
dlls/ddraw/ddraw_private.h
+2
-23
ddraw_thunks.c
dlls/ddraw/ddraw_thunks.c
+0
-1201
device.c
dlls/ddraw/device.c
+2
-4
direct3d.c
dlls/ddraw/direct3d.c
+2
-3
surface.c
dlls/ddraw/surface.c
+1
-3
No files found.
dlls/ddraw/Makefile.in
View file @
6fb9ee0e
...
...
@@ -9,7 +9,6 @@ IMPORTS = dxguid uuid ole32 user32 gdi32 advapi32 kernel32 ntdll
C_SRCS
=
\
clipper.c
\
ddraw.c
\
ddraw_thunks.c
\
device.c
\
direct3d.c
\
executebuffer.c
\
...
...
dlls/ddraw/ddraw.c
View file @
6fb9ee0e
...
...
@@ -64,6 +64,26 @@ const struct wined3d_parent_ops ddraw_null_wined3d_parent_ops =
ddraw_null_wined3d_object_destroyed
,
};
static
inline
IDirectDrawImpl
*
ddraw_from_ddraw1
(
IDirectDraw
*
iface
)
{
return
(
IDirectDrawImpl
*
)((
char
*
)
iface
-
FIELD_OFFSET
(
IDirectDrawImpl
,
IDirectDraw_vtbl
));
}
static
inline
IDirectDrawImpl
*
ddraw_from_ddraw2
(
IDirectDraw2
*
iface
)
{
return
(
IDirectDrawImpl
*
)((
char
*
)
iface
-
FIELD_OFFSET
(
IDirectDrawImpl
,
IDirectDraw2_vtbl
));
}
static
inline
IDirectDrawImpl
*
ddraw_from_ddraw3
(
IDirectDraw3
*
iface
)
{
return
(
IDirectDrawImpl
*
)((
char
*
)
iface
-
FIELD_OFFSET
(
IDirectDrawImpl
,
IDirectDraw3_vtbl
));
}
static
inline
IDirectDrawImpl
*
ddraw_from_ddraw4
(
IDirectDraw4
*
iface
)
{
return
(
IDirectDrawImpl
*
)((
char
*
)
iface
-
FIELD_OFFSET
(
IDirectDrawImpl
,
IDirectDraw4_vtbl
));
}
/*****************************************************************************
* IUnknown Methods
*****************************************************************************/
...
...
@@ -88,10 +108,7 @@ const struct wined3d_parent_ops ddraw_null_wined3d_parent_ops =
* E_NOINTERFACE if the requested interface wasn't found
*
*****************************************************************************/
static
HRESULT
WINAPI
IDirectDrawImpl_QueryInterface
(
IDirectDraw7
*
iface
,
REFIID
refiid
,
void
**
obj
)
static
HRESULT
WINAPI
ddraw7_QueryInterface
(
IDirectDraw7
*
iface
,
REFIID
refiid
,
void
**
obj
)
{
IDirectDrawImpl
*
This
=
(
IDirectDrawImpl
*
)
iface
;
...
...
@@ -215,6 +232,34 @@ IDirectDrawImpl_QueryInterface(IDirectDraw7 *iface,
return
S_OK
;
}
static
HRESULT
WINAPI
ddraw4_QueryInterface
(
IDirectDraw4
*
iface
,
REFIID
riid
,
void
**
object
)
{
TRACE
(
"iface %p, riid %s, object %p.
\n
"
,
iface
,
debugstr_guid
(
riid
),
object
);
return
ddraw7_QueryInterface
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
iface
),
riid
,
object
);
}
static
HRESULT
WINAPI
ddraw3_QueryInterface
(
IDirectDraw3
*
iface
,
REFIID
riid
,
void
**
object
)
{
TRACE
(
"iface %p, riid %s, object %p.
\n
"
,
iface
,
debugstr_guid
(
riid
),
object
);
return
ddraw7_QueryInterface
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
iface
),
riid
,
object
);
}
static
HRESULT
WINAPI
ddraw2_QueryInterface
(
IDirectDraw2
*
iface
,
REFIID
riid
,
void
**
object
)
{
TRACE
(
"iface %p, riid %s, object %p.
\n
"
,
iface
,
debugstr_guid
(
riid
),
object
);
return
ddraw7_QueryInterface
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
iface
),
riid
,
object
);
}
static
HRESULT
WINAPI
ddraw1_QueryInterface
(
IDirectDraw
*
iface
,
REFIID
riid
,
void
**
object
)
{
TRACE
(
"iface %p, riid %s, object %p.
\n
"
,
iface
,
debugstr_guid
(
riid
),
object
);
return
ddraw7_QueryInterface
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
iface
),
riid
,
object
);
}
/*****************************************************************************
* IDirectDraw7::AddRef
*
...
...
@@ -233,8 +278,7 @@ IDirectDrawImpl_QueryInterface(IDirectDraw7 *iface,
* Returns: The new refcount
*
*****************************************************************************/
static
ULONG
WINAPI
IDirectDrawImpl_AddRef
(
IDirectDraw7
*
iface
)
static
ULONG
WINAPI
ddraw7_AddRef
(
IDirectDraw7
*
iface
)
{
IDirectDrawImpl
*
This
=
(
IDirectDrawImpl
*
)
iface
;
ULONG
ref
=
InterlockedIncrement
(
&
This
->
ref7
);
...
...
@@ -246,8 +290,56 @@ IDirectDrawImpl_AddRef(IDirectDraw7 *iface)
return
ref
;
}
static
ULONG
WINAPI
ddraw4_AddRef
(
IDirectDraw4
*
iface
)
{
IDirectDrawImpl
*
ddraw
=
ddraw_from_ddraw4
(
iface
);
ULONG
ref
=
InterlockedIncrement
(
&
ddraw
->
ref4
);
TRACE
(
"%p increasing refcount to %u.
\n
"
,
ddraw
,
ref
);
if
(
ref
==
1
)
InterlockedIncrement
(
&
ddraw
->
numIfaces
);
return
ref
;
}
static
ULONG
WINAPI
ddraw3_AddRef
(
IDirectDraw3
*
iface
)
{
IDirectDrawImpl
*
ddraw
=
ddraw_from_ddraw3
(
iface
);
ULONG
ref
=
InterlockedIncrement
(
&
ddraw
->
ref3
);
TRACE
(
"%p increasing refcount to %u.
\n
"
,
ddraw
,
ref
);
if
(
ref
==
1
)
InterlockedIncrement
(
&
ddraw
->
numIfaces
);
return
ref
;
}
static
ULONG
WINAPI
ddraw2_AddRef
(
IDirectDraw2
*
iface
)
{
IDirectDrawImpl
*
ddraw
=
ddraw_from_ddraw2
(
iface
);
ULONG
ref
=
InterlockedIncrement
(
&
ddraw
->
ref2
);
TRACE
(
"%p increasing refcount to %u.
\n
"
,
ddraw
,
ref
);
if
(
ref
==
1
)
InterlockedIncrement
(
&
ddraw
->
numIfaces
);
return
ref
;
}
static
ULONG
WINAPI
ddraw1_AddRef
(
IDirectDraw
*
iface
)
{
IDirectDrawImpl
*
ddraw
=
ddraw_from_ddraw1
(
iface
);
ULONG
ref
=
InterlockedIncrement
(
&
ddraw
->
ref1
);
TRACE
(
"%p increasing refcount to %u.
\n
"
,
ddraw
,
ref
);
if
(
ref
==
1
)
InterlockedIncrement
(
&
ddraw
->
numIfaces
);
return
ref
;
}
/*****************************************************************************
*
IDirectDrawImpl_D
estroy
*
ddraw_d
estroy
*
* Destroys a ddraw object if all refcounts are 0. This is to share code
* between the IDirectDrawX::Release functions
...
...
@@ -256,8 +348,7 @@ IDirectDrawImpl_AddRef(IDirectDraw7 *iface)
* This: DirectDraw object to destroy
*
*****************************************************************************/
void
IDirectDrawImpl_Destroy
(
IDirectDrawImpl
*
This
)
static
void
ddraw_destroy
(
IDirectDrawImpl
*
This
)
{
IDirectDraw7_SetCooperativeLevel
((
IDirectDraw7
*
)
This
,
NULL
,
DDSCL_NORMAL
);
IDirectDraw7_RestoreDisplayMode
((
IDirectDraw7
*
)
This
);
...
...
@@ -289,19 +380,67 @@ IDirectDrawImpl_Destroy(IDirectDrawImpl *This)
*
* Returns: The new refcount
*****************************************************************************/
static
ULONG
WINAPI
IDirectDrawImpl_Release
(
IDirectDraw7
*
iface
)
static
ULONG
WINAPI
ddraw7_Release
(
IDirectDraw7
*
iface
)
{
IDirectDrawImpl
*
This
=
(
IDirectDrawImpl
*
)
iface
;
ULONG
ref
=
InterlockedDecrement
(
&
This
->
ref7
);
TRACE
(
"(%p)->() decrementing IDirectDraw7 refcount from %u.
\n
"
,
This
,
ref
+
1
);
if
(
ref
==
0
)
{
ULONG
ifacecount
=
InterlockedDecrement
(
&
This
->
numIfaces
);
if
(
ifacecount
==
0
)
IDirectDrawImpl_Destroy
(
This
);
}
if
(
!
ref
&&
!
InterlockedDecrement
(
&
This
->
numIfaces
))
ddraw_destroy
(
This
);
return
ref
;
}
static
ULONG
WINAPI
ddraw4_Release
(
IDirectDraw4
*
iface
)
{
IDirectDrawImpl
*
ddraw
=
ddraw_from_ddraw4
(
iface
);
ULONG
ref
=
InterlockedDecrement
(
&
ddraw
->
ref4
);
TRACE
(
"%p decreasing refcount to %u.
\n
"
,
ddraw
,
ref
);
if
(
!
ref
&&
!
InterlockedDecrement
(
&
ddraw
->
numIfaces
))
ddraw_destroy
(
ddraw
);
return
ref
;
}
static
ULONG
WINAPI
ddraw3_Release
(
IDirectDraw3
*
iface
)
{
IDirectDrawImpl
*
ddraw
=
ddraw_from_ddraw3
(
iface
);
ULONG
ref
=
InterlockedDecrement
(
&
ddraw
->
ref3
);
TRACE
(
"%p decreasing refcount to %u.
\n
"
,
ddraw
,
ref
);
if
(
!
ref
&&
!
InterlockedDecrement
(
&
ddraw
->
numIfaces
))
ddraw_destroy
(
ddraw
);
return
ref
;
}
static
ULONG
WINAPI
ddraw2_Release
(
IDirectDraw2
*
iface
)
{
IDirectDrawImpl
*
ddraw
=
ddraw_from_ddraw2
(
iface
);
ULONG
ref
=
InterlockedDecrement
(
&
ddraw
->
ref2
);
TRACE
(
"%p decreasing refcount to %u.
\n
"
,
ddraw
,
ref
);
if
(
!
ref
&&
!
InterlockedDecrement
(
&
ddraw
->
numIfaces
))
ddraw_destroy
(
ddraw
);
return
ref
;
}
static
ULONG
WINAPI
ddraw1_Release
(
IDirectDraw
*
iface
)
{
IDirectDrawImpl
*
ddraw
=
ddraw_from_ddraw1
(
iface
);
ULONG
ref
=
InterlockedDecrement
(
&
ddraw
->
ref1
);
TRACE
(
"%p decreasing refcount to %u.
\n
"
,
ddraw
,
ref
);
if
(
!
ref
&&
!
InterlockedDecrement
(
&
ddraw
->
numIfaces
))
ddraw_destroy
(
ddraw
);
return
ref
;
}
...
...
@@ -354,10 +493,7 @@ IDirectDrawImpl_Release(IDirectDraw7 *iface)
* (Probably others too, have to investigate)
*
*****************************************************************************/
static
HRESULT
WINAPI
IDirectDrawImpl_SetCooperativeLevel
(
IDirectDraw7
*
iface
,
HWND
hwnd
,
DWORD
cooplevel
)
static
HRESULT
WINAPI
ddraw7_SetCooperativeLevel
(
IDirectDraw7
*
iface
,
HWND
hwnd
,
DWORD
cooplevel
)
{
IDirectDrawImpl
*
This
=
(
IDirectDrawImpl
*
)
iface
;
HWND
window
;
...
...
@@ -535,25 +671,48 @@ IDirectDrawImpl_SetCooperativeLevel(IDirectDraw7 *iface,
return
DD_OK
;
}
static
HRESULT
WINAPI
ddraw4_SetCooperativeLevel
(
IDirectDraw4
*
iface
,
HWND
window
,
DWORD
flags
)
{
TRACE
(
"iface %p, window %p, flags %#x.
\n
"
,
iface
,
window
,
flags
);
return
ddraw7_SetCooperativeLevel
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
iface
),
window
,
flags
);
}
static
HRESULT
WINAPI
ddraw3_SetCooperativeLevel
(
IDirectDraw3
*
iface
,
HWND
window
,
DWORD
flags
)
{
TRACE
(
"iface %p, window %p, flags %#x.
\n
"
,
iface
,
window
,
flags
);
return
ddraw7_SetCooperativeLevel
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
iface
),
window
,
flags
);
}
static
HRESULT
WINAPI
ddraw2_SetCooperativeLevel
(
IDirectDraw2
*
iface
,
HWND
window
,
DWORD
flags
)
{
TRACE
(
"iface %p, window %p, flags %#x.
\n
"
,
iface
,
window
,
flags
);
return
ddraw7_SetCooperativeLevel
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
iface
),
window
,
flags
);
}
static
HRESULT
WINAPI
ddraw1_SetCooperativeLevel
(
IDirectDraw
*
iface
,
HWND
window
,
DWORD
flags
)
{
TRACE
(
"iface %p, window %p, flags %#x.
\n
"
,
iface
,
window
,
flags
);
return
ddraw7_SetCooperativeLevel
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
iface
),
window
,
flags
);
}
/*****************************************************************************
*
* Helper function for SetDisplayMode and RestoreDisplayMode
*
* Implements DirectDraw's SetDisplayMode, but ignores the value of
* ForceRefreshRate, since it is already handled by
*
IDirectDrawImpl
_SetDisplayMode. RestoreDisplayMode can use this function
*
ddraw7
_SetDisplayMode. RestoreDisplayMode can use this function
* without worrying that ForceRefreshRate will override the refresh rate. For
* argument and return value documentation, see
*
IDirectDrawImpl
_SetDisplayMode.
*
ddraw7
_SetDisplayMode.
*
*****************************************************************************/
static
HRESULT
IDirectDrawImpl_SetDisplayModeNoOverride
(
IDirectDraw7
*
iface
,
DWORD
Width
,
DWORD
Height
,
DWORD
BPP
,
DWORD
RefreshRate
,
DWORD
Flags
)
static
HRESULT
ddraw_set_display_mode
(
IDirectDraw7
*
iface
,
DWORD
Width
,
DWORD
Height
,
DWORD
BPP
,
DWORD
RefreshRate
,
DWORD
Flags
)
{
IDirectDrawImpl
*
This
=
(
IDirectDrawImpl
*
)
iface
;
WINED3DDISPLAYMODE
Mode
;
...
...
@@ -629,13 +788,8 @@ IDirectDrawImpl_SetDisplayModeNoOverride(IDirectDraw7 *iface,
* DD_OK on success
*
*****************************************************************************/
static
HRESULT
WINAPI
IDirectDrawImpl_SetDisplayMode
(
IDirectDraw7
*
iface
,
DWORD
Width
,
DWORD
Height
,
DWORD
BPP
,
DWORD
RefreshRate
,
DWORD
Flags
)
static
HRESULT
WINAPI
ddraw7_SetDisplayMode
(
IDirectDraw7
*
iface
,
DWORD
Width
,
DWORD
Height
,
DWORD
BPP
,
DWORD
RefreshRate
,
DWORD
Flags
)
{
if
(
force_refresh_rate
!=
0
)
{
...
...
@@ -643,8 +797,44 @@ IDirectDrawImpl_SetDisplayMode(IDirectDraw7 *iface,
RefreshRate
=
force_refresh_rate
;
}
return
IDirectDrawImpl_SetDisplayModeNoOverride
(
iface
,
Width
,
Height
,
BPP
,
RefreshRate
,
Flags
);
return
ddraw_set_display_mode
(
iface
,
Width
,
Height
,
BPP
,
RefreshRate
,
Flags
);
}
static
HRESULT
WINAPI
ddraw4_SetDisplayMode
(
IDirectDraw4
*
iface
,
DWORD
width
,
DWORD
height
,
DWORD
bpp
,
DWORD
refresh_rate
,
DWORD
flags
)
{
TRACE
(
"iface %p, width %u, height %u, bpp %u, refresh_rate %u, flags %#x.
\n
"
,
iface
,
width
,
height
,
bpp
,
refresh_rate
,
flags
);
return
ddraw7_SetDisplayMode
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
iface
),
width
,
height
,
bpp
,
refresh_rate
,
flags
);
}
static
HRESULT
WINAPI
ddraw3_SetDisplayMode
(
IDirectDraw3
*
iface
,
DWORD
width
,
DWORD
height
,
DWORD
bpp
,
DWORD
refresh_rate
,
DWORD
flags
)
{
TRACE
(
"iface %p, width %u, height %u, bpp %u, refresh_rate %u, flags %#x.
\n
"
,
iface
,
width
,
height
,
bpp
,
refresh_rate
,
flags
);
return
ddraw7_SetDisplayMode
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
iface
),
width
,
height
,
bpp
,
refresh_rate
,
flags
);
}
static
HRESULT
WINAPI
ddraw2_SetDisplayMode
(
IDirectDraw2
*
iface
,
DWORD
width
,
DWORD
height
,
DWORD
bpp
,
DWORD
refresh_rate
,
DWORD
flags
)
{
TRACE
(
"iface %p, width %u, height %u, bpp %u, refresh_rate %u, flags %#x.
\n
"
,
iface
,
width
,
height
,
bpp
,
refresh_rate
,
flags
);
return
ddraw7_SetDisplayMode
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
iface
),
width
,
height
,
bpp
,
refresh_rate
,
flags
);
}
static
HRESULT
WINAPI
ddraw1_SetDisplayMode
(
IDirectDraw
*
iface
,
DWORD
width
,
DWORD
height
,
DWORD
bpp
)
{
TRACE
(
"iface %p, width %u, height %u, bpp %u.
\n
"
,
iface
,
width
,
height
,
bpp
);
return
ddraw7_SetDisplayMode
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
iface
),
width
,
height
,
bpp
,
0
,
0
);
}
/*****************************************************************************
...
...
@@ -668,14 +858,40 @@ IDirectDrawImpl_SetDisplayMode(IDirectDraw7 *iface,
* DDERR_NOEXCLUSIVE mode if the device isn't in fullscreen mode
*
*****************************************************************************/
static
HRESULT
WINAPI
IDirectDrawImpl_RestoreDisplayMode
(
IDirectDraw7
*
iface
)
static
HRESULT
WINAPI
ddraw7_RestoreDisplayMode
(
IDirectDraw7
*
iface
)
{
IDirectDrawImpl
*
This
=
(
IDirectDrawImpl
*
)
iface
;
TRACE
(
"(%p)
\n
"
,
This
);
return
IDirectDrawImpl_SetDisplayModeNoOverride
(
iface
,
This
->
orig_width
,
This
->
orig_height
,
This
->
orig_bpp
,
0
,
0
);
return
ddraw_set_display_mode
(
iface
,
This
->
orig_width
,
This
->
orig_height
,
This
->
orig_bpp
,
0
,
0
);
}
static
HRESULT
WINAPI
ddraw4_RestoreDisplayMode
(
IDirectDraw4
*
iface
)
{
TRACE
(
"iface %p.
\n
"
,
iface
);
return
ddraw7_RestoreDisplayMode
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
iface
));
}
static
HRESULT
WINAPI
ddraw3_RestoreDisplayMode
(
IDirectDraw3
*
iface
)
{
TRACE
(
"iface %p.
\n
"
,
iface
);
return
ddraw7_RestoreDisplayMode
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
iface
));
}
static
HRESULT
WINAPI
ddraw2_RestoreDisplayMode
(
IDirectDraw2
*
iface
)
{
TRACE
(
"iface %p.
\n
"
,
iface
);
return
ddraw7_RestoreDisplayMode
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
iface
));
}
static
HRESULT
WINAPI
ddraw1_RestoreDisplayMode
(
IDirectDraw
*
iface
)
{
TRACE
(
"iface %p.
\n
"
,
iface
);
return
ddraw7_RestoreDisplayMode
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
iface
));
}
/*****************************************************************************
...
...
@@ -693,10 +909,7 @@ IDirectDrawImpl_RestoreDisplayMode(IDirectDraw7 *iface)
* This implementation returns DD_OK only
*
*****************************************************************************/
static
HRESULT
WINAPI
IDirectDrawImpl_GetCaps
(
IDirectDraw7
*
iface
,
DDCAPS
*
DriverCaps
,
DDCAPS
*
HELCaps
)
static
HRESULT
WINAPI
ddraw7_GetCaps
(
IDirectDraw7
*
iface
,
DDCAPS
*
DriverCaps
,
DDCAPS
*
HELCaps
)
{
IDirectDrawImpl
*
This
=
(
IDirectDrawImpl
*
)
iface
;
DDCAPS
caps
;
...
...
@@ -708,7 +921,7 @@ IDirectDrawImpl_GetCaps(IDirectDraw7 *iface,
/* One structure must be != NULL */
if
(
(
!
DriverCaps
)
&&
(
!
HELCaps
)
)
{
ERR
(
"(%p) Invalid params to
IDirectDrawImpl
_GetCaps
\n
"
,
This
);
ERR
(
"(%p) Invalid params to
ddraw7
_GetCaps
\n
"
,
This
);
return
DDERR_INVALIDPARAMS
;
}
...
...
@@ -781,6 +994,34 @@ IDirectDrawImpl_GetCaps(IDirectDraw7 *iface,
return
DD_OK
;
}
static
HRESULT
WINAPI
ddraw4_GetCaps
(
IDirectDraw4
*
iface
,
DDCAPS
*
driver_caps
,
DDCAPS
*
hel_caps
)
{
TRACE
(
"iface %p, driver_caps %p, hel_caps %p.
\n
"
,
iface
,
driver_caps
,
hel_caps
);
return
ddraw7_GetCaps
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
iface
),
driver_caps
,
hel_caps
);
}
static
HRESULT
WINAPI
ddraw3_GetCaps
(
IDirectDraw3
*
iface
,
DDCAPS
*
driver_caps
,
DDCAPS
*
hel_caps
)
{
TRACE
(
"iface %p, driver_caps %p, hel_caps %p.
\n
"
,
iface
,
driver_caps
,
hel_caps
);
return
ddraw7_GetCaps
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
iface
),
driver_caps
,
hel_caps
);
}
static
HRESULT
WINAPI
ddraw2_GetCaps
(
IDirectDraw2
*
iface
,
DDCAPS
*
driver_caps
,
DDCAPS
*
hel_caps
)
{
TRACE
(
"iface %p, driver_caps %p, hel_caps %p.
\n
"
,
iface
,
driver_caps
,
hel_caps
);
return
ddraw7_GetCaps
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
iface
),
driver_caps
,
hel_caps
);
}
static
HRESULT
WINAPI
ddraw1_GetCaps
(
IDirectDraw
*
iface
,
DDCAPS
*
driver_caps
,
DDCAPS
*
hel_caps
)
{
TRACE
(
"iface %p, driver_caps %p, hel_caps %p.
\n
"
,
iface
,
driver_caps
,
hel_caps
);
return
ddraw7_GetCaps
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
iface
),
driver_caps
,
hel_caps
);
}
/*****************************************************************************
* IDirectDraw7::Compact
*
...
...
@@ -790,8 +1031,7 @@ IDirectDrawImpl_GetCaps(IDirectDraw7 *iface,
* DD_OK, but this is unchecked
*
*****************************************************************************/
static
HRESULT
WINAPI
IDirectDrawImpl_Compact
(
IDirectDraw7
*
iface
)
static
HRESULT
WINAPI
ddraw7_Compact
(
IDirectDraw7
*
iface
)
{
IDirectDrawImpl
*
This
=
(
IDirectDrawImpl
*
)
iface
;
TRACE
(
"(%p)
\n
"
,
This
);
...
...
@@ -799,6 +1039,34 @@ IDirectDrawImpl_Compact(IDirectDraw7 *iface)
return
DD_OK
;
}
static
HRESULT
WINAPI
ddraw4_Compact
(
IDirectDraw4
*
iface
)
{
TRACE
(
"iface %p.
\n
"
,
iface
);
return
ddraw7_Compact
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
iface
));
}
static
HRESULT
WINAPI
ddraw3_Compact
(
IDirectDraw3
*
iface
)
{
TRACE
(
"iface %p.
\n
"
,
iface
);
return
ddraw7_Compact
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
iface
));
}
static
HRESULT
WINAPI
ddraw2_Compact
(
IDirectDraw2
*
iface
)
{
TRACE
(
"iface %p.
\n
"
,
iface
);
return
ddraw7_Compact
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
iface
));
}
static
HRESULT
WINAPI
ddraw1_Compact
(
IDirectDraw
*
iface
)
{
TRACE
(
"iface %p.
\n
"
,
iface
);
return
ddraw7_Compact
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
iface
));
}
/*****************************************************************************
* IDirectDraw7::GetDisplayMode
*
...
...
@@ -813,9 +1081,7 @@ IDirectDrawImpl_Compact(IDirectDraw7 *iface)
* DD_OK
*
*****************************************************************************/
static
HRESULT
WINAPI
IDirectDrawImpl_GetDisplayMode
(
IDirectDraw7
*
iface
,
DDSURFACEDESC2
*
DDSD
)
static
HRESULT
WINAPI
ddraw7_GetDisplayMode
(
IDirectDraw7
*
iface
,
DDSURFACEDESC2
*
DDSD
)
{
IDirectDrawImpl
*
This
=
(
IDirectDrawImpl
*
)
iface
;
HRESULT
hr
;
...
...
@@ -867,6 +1133,34 @@ IDirectDrawImpl_GetDisplayMode(IDirectDraw7 *iface,
return
DD_OK
;
}
static
HRESULT
WINAPI
ddraw4_GetDisplayMode
(
IDirectDraw4
*
iface
,
DDSURFACEDESC2
*
surface_desc
)
{
TRACE
(
"iface %p, surface_desc %p.
\n
"
,
iface
,
surface_desc
);
return
ddraw7_GetDisplayMode
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
iface
),
surface_desc
);
}
static
HRESULT
WINAPI
ddraw3_GetDisplayMode
(
IDirectDraw3
*
iface
,
DDSURFACEDESC
*
surface_desc
)
{
TRACE
(
"iface %p, surface_desc %p.
\n
"
,
iface
,
surface_desc
);
return
ddraw7_GetDisplayMode
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
iface
),
(
DDSURFACEDESC2
*
)
surface_desc
);
}
static
HRESULT
WINAPI
ddraw2_GetDisplayMode
(
IDirectDraw2
*
iface
,
DDSURFACEDESC
*
surface_desc
)
{
TRACE
(
"iface %p, surface_desc %p.
\n
"
,
iface
,
surface_desc
);
return
ddraw7_GetDisplayMode
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
iface
),
(
DDSURFACEDESC2
*
)
surface_desc
);
}
static
HRESULT
WINAPI
ddraw1_GetDisplayMode
(
IDirectDraw
*
iface
,
DDSURFACEDESC
*
surface_desc
)
{
TRACE
(
"iface %p, surface_desc %p.
\n
"
,
iface
,
surface_desc
);
return
ddraw7_GetDisplayMode
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
iface
),
(
DDSURFACEDESC2
*
)
surface_desc
);
}
/*****************************************************************************
* IDirectDraw7::GetFourCCCodes
*
...
...
@@ -884,9 +1178,7 @@ IDirectDrawImpl_GetDisplayMode(IDirectDraw7 *iface,
* Always returns DD_OK, as it's a stub for now
*
*****************************************************************************/
static
HRESULT
WINAPI
IDirectDrawImpl_GetFourCCCodes
(
IDirectDraw7
*
iface
,
DWORD
*
NumCodes
,
DWORD
*
Codes
)
static
HRESULT
WINAPI
ddraw7_GetFourCCCodes
(
IDirectDraw7
*
iface
,
DWORD
*
NumCodes
,
DWORD
*
Codes
)
{
IDirectDrawImpl
*
This
=
(
IDirectDrawImpl
*
)
iface
;
WINED3DFORMAT
formats
[]
=
{
...
...
@@ -932,6 +1224,34 @@ IDirectDrawImpl_GetFourCCCodes(IDirectDraw7 *iface,
return
DD_OK
;
}
static
HRESULT
WINAPI
ddraw4_GetFourCCCodes
(
IDirectDraw4
*
iface
,
DWORD
*
codes_count
,
DWORD
*
codes
)
{
TRACE
(
"iface %p, codes_count %p, codes %p.
\n
"
,
iface
,
codes_count
,
codes
);
return
ddraw7_GetFourCCCodes
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
iface
),
codes_count
,
codes
);
}
static
HRESULT
WINAPI
ddraw3_GetFourCCCodes
(
IDirectDraw3
*
iface
,
DWORD
*
codes_count
,
DWORD
*
codes
)
{
TRACE
(
"iface %p, codes_count %p, codes %p.
\n
"
,
iface
,
codes_count
,
codes
);
return
ddraw7_GetFourCCCodes
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
iface
),
codes_count
,
codes
);
}
static
HRESULT
WINAPI
ddraw2_GetFourCCCodes
(
IDirectDraw2
*
iface
,
DWORD
*
codes_count
,
DWORD
*
codes
)
{
TRACE
(
"iface %p, codes_count %p, codes %p.
\n
"
,
iface
,
codes_count
,
codes
);
return
ddraw7_GetFourCCCodes
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
iface
),
codes_count
,
codes
);
}
static
HRESULT
WINAPI
ddraw1_GetFourCCCodes
(
IDirectDraw
*
iface
,
DWORD
*
codes_count
,
DWORD
*
codes
)
{
TRACE
(
"iface %p, codes_count %p, codes %p.
\n
"
,
iface
,
codes_count
,
codes
);
return
ddraw7_GetFourCCCodes
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
iface
),
codes_count
,
codes
);
}
/*****************************************************************************
* IDirectDraw7::GetMonitorFrequency
*
...
...
@@ -946,9 +1266,7 @@ IDirectDrawImpl_GetFourCCCodes(IDirectDraw7 *iface,
* Always returns DD_OK
*
*****************************************************************************/
static
HRESULT
WINAPI
IDirectDrawImpl_GetMonitorFrequency
(
IDirectDraw7
*
iface
,
DWORD
*
Freq
)
static
HRESULT
WINAPI
ddraw7_GetMonitorFrequency
(
IDirectDraw7
*
iface
,
DWORD
*
Freq
)
{
IDirectDrawImpl
*
This
=
(
IDirectDrawImpl
*
)
iface
;
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
Freq
);
...
...
@@ -960,6 +1278,34 @@ IDirectDrawImpl_GetMonitorFrequency(IDirectDraw7 *iface,
return
DD_OK
;
}
static
HRESULT
WINAPI
ddraw4_GetMonitorFrequency
(
IDirectDraw4
*
iface
,
DWORD
*
frequency
)
{
TRACE
(
"iface %p, frequency %p.
\n
"
,
iface
,
frequency
);
return
ddraw7_GetMonitorFrequency
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
iface
),
frequency
);
}
static
HRESULT
WINAPI
ddraw3_GetMonitorFrequency
(
IDirectDraw3
*
iface
,
DWORD
*
frequency
)
{
TRACE
(
"iface %p, frequency %p.
\n
"
,
iface
,
frequency
);
return
ddraw7_GetMonitorFrequency
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
iface
),
frequency
);
}
static
HRESULT
WINAPI
ddraw2_GetMonitorFrequency
(
IDirectDraw2
*
iface
,
DWORD
*
frequency
)
{
TRACE
(
"iface %p, frequency %p.
\n
"
,
iface
,
frequency
);
return
ddraw7_GetMonitorFrequency
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
iface
),
frequency
);
}
static
HRESULT
WINAPI
ddraw1_GetMonitorFrequency
(
IDirectDraw
*
iface
,
DWORD
*
frequency
)
{
TRACE
(
"iface %p, frequency %p.
\n
"
,
iface
,
frequency
);
return
ddraw7_GetMonitorFrequency
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
iface
),
frequency
);
}
/*****************************************************************************
* IDirectDraw7::GetVerticalBlankStatus
*
...
...
@@ -974,9 +1320,7 @@ IDirectDrawImpl_GetMonitorFrequency(IDirectDraw7 *iface,
* DDERR_INVALIDPARAMS if status is NULL
*
*****************************************************************************/
static
HRESULT
WINAPI
IDirectDrawImpl_GetVerticalBlankStatus
(
IDirectDraw7
*
iface
,
BOOL
*
status
)
static
HRESULT
WINAPI
ddraw7_GetVerticalBlankStatus
(
IDirectDraw7
*
iface
,
BOOL
*
status
)
{
IDirectDrawImpl
*
This
=
(
IDirectDrawImpl
*
)
iface
;
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
status
);
...
...
@@ -995,6 +1339,34 @@ IDirectDrawImpl_GetVerticalBlankStatus(IDirectDraw7 *iface,
return
DD_OK
;
}
static
HRESULT
WINAPI
ddraw4_GetVerticalBlankStatus
(
IDirectDraw4
*
iface
,
BOOL
*
status
)
{
TRACE
(
"iface %p, status %p.
\n
"
,
iface
,
status
);
return
ddraw7_GetVerticalBlankStatus
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
iface
),
status
);
}
static
HRESULT
WINAPI
ddraw3_GetVerticalBlankStatus
(
IDirectDraw3
*
iface
,
BOOL
*
status
)
{
TRACE
(
"iface %p, status %p.
\n
"
,
iface
,
status
);
return
ddraw7_GetVerticalBlankStatus
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
iface
),
status
);
}
static
HRESULT
WINAPI
ddraw2_GetVerticalBlankStatus
(
IDirectDraw2
*
iface
,
BOOL
*
status
)
{
TRACE
(
"iface %p, status %p.
\n
"
,
iface
,
status
);
return
ddraw7_GetVerticalBlankStatus
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
iface
),
status
);
}
static
HRESULT
WINAPI
ddraw1_GetVerticalBlankStatus
(
IDirectDraw
*
iface
,
BOOL
*
status
)
{
TRACE
(
"iface %p, status %p.
\n
"
,
iface
,
status
);
return
ddraw7_GetVerticalBlankStatus
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
iface
),
status
);
}
/*****************************************************************************
* IDirectDraw7::GetAvailableVidMem
*
...
...
@@ -1010,8 +1382,7 @@ IDirectDrawImpl_GetVerticalBlankStatus(IDirectDraw7 *iface,
* DDERR_INVALIDPARAMS of free and total are NULL
*
*****************************************************************************/
static
HRESULT
WINAPI
IDirectDrawImpl_GetAvailableVidMem
(
IDirectDraw7
*
iface
,
DDSCAPS2
*
Caps
,
DWORD
*
total
,
DWORD
*
free
)
static
HRESULT
WINAPI
ddraw7_GetAvailableVidMem
(
IDirectDraw7
*
iface
,
DDSCAPS2
*
Caps
,
DWORD
*
total
,
DWORD
*
free
)
{
IDirectDrawImpl
*
This
=
(
IDirectDrawImpl
*
)
iface
;
TRACE
(
"(%p)->(%p, %p, %p)
\n
"
,
This
,
Caps
,
total
,
free
);
...
...
@@ -1041,6 +1412,36 @@ IDirectDrawImpl_GetAvailableVidMem(IDirectDraw7 *iface, DDSCAPS2 *Caps, DWORD *t
return
DD_OK
;
}
static
HRESULT
WINAPI
ddraw4_GetAvailableVidMem
(
IDirectDraw4
*
iface
,
DDSCAPS2
*
caps
,
DWORD
*
total
,
DWORD
*
free
)
{
TRACE
(
"iface %p, caps %p, total %p, free %p.
\n
"
,
iface
,
caps
,
total
,
free
);
return
ddraw7_GetAvailableVidMem
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
iface
),
caps
,
total
,
free
);
}
static
HRESULT
WINAPI
ddraw3_GetAvailableVidMem
(
IDirectDraw3
*
iface
,
DDSCAPS
*
caps
,
DWORD
*
total
,
DWORD
*
free
)
{
DDSCAPS2
caps2
;
TRACE
(
"iface %p, caps %p, total %p, free %p.
\n
"
,
iface
,
caps
,
total
,
free
);
DDRAW_Convert_DDSCAPS_1_To_2
(
caps
,
&
caps2
);
return
ddraw7_GetAvailableVidMem
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
iface
),
&
caps2
,
total
,
free
);
}
static
HRESULT
WINAPI
ddraw2_GetAvailableVidMem
(
IDirectDraw2
*
iface
,
DDSCAPS
*
caps
,
DWORD
*
total
,
DWORD
*
free
)
{
DDSCAPS2
caps2
;
TRACE
(
"iface %p, caps %p, total %p, free %p.
\n
"
,
iface
,
caps
,
total
,
free
);
DDRAW_Convert_DDSCAPS_1_To_2
(
caps
,
&
caps2
);
return
ddraw7_GetAvailableVidMem
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
iface
),
&
caps2
,
total
,
free
);
}
/*****************************************************************************
* IDirectDraw7::Initialize
*
...
...
@@ -1055,9 +1456,7 @@ IDirectDrawImpl_GetAvailableVidMem(IDirectDraw7 *iface, DDSCAPS2 *Caps, DWORD *t
* DDERR_ALREADYINITIALIZED on repeated calls
*
*****************************************************************************/
static
HRESULT
WINAPI
IDirectDrawImpl_Initialize
(
IDirectDraw7
*
iface
,
GUID
*
Guid
)
static
HRESULT
WINAPI
ddraw7_Initialize
(
IDirectDraw7
*
iface
,
GUID
*
Guid
)
{
IDirectDrawImpl
*
This
=
(
IDirectDrawImpl
*
)
iface
;
TRACE
(
"(%p)->(%s): No-op
\n
"
,
This
,
debugstr_guid
(
Guid
));
...
...
@@ -1072,6 +1471,34 @@ IDirectDrawImpl_Initialize(IDirectDraw7 *iface,
}
}
static
HRESULT
WINAPI
ddraw4_Initialize
(
IDirectDraw4
*
iface
,
GUID
*
guid
)
{
TRACE
(
"iface %p, guid %s.
\n
"
,
iface
,
debugstr_guid
(
guid
));
return
ddraw7_Initialize
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
iface
),
guid
);
}
static
HRESULT
WINAPI
ddraw3_Initialize
(
IDirectDraw3
*
iface
,
GUID
*
guid
)
{
TRACE
(
"iface %p, guid %s.
\n
"
,
iface
,
debugstr_guid
(
guid
));
return
ddraw7_Initialize
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
iface
),
guid
);
}
static
HRESULT
WINAPI
ddraw2_Initialize
(
IDirectDraw2
*
iface
,
GUID
*
guid
)
{
TRACE
(
"iface %p, guid %s.
\n
"
,
iface
,
debugstr_guid
(
guid
));
return
ddraw7_Initialize
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
iface
),
guid
);
}
static
HRESULT
WINAPI
ddraw1_Initialize
(
IDirectDraw
*
iface
,
GUID
*
guid
)
{
TRACE
(
"iface %p, guid %s.
\n
"
,
iface
,
debugstr_guid
(
guid
));
return
ddraw7_Initialize
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
iface
),
guid
);
}
/*****************************************************************************
* IDirectDraw7::FlipToGDISurface
*
...
...
@@ -1085,8 +1512,7 @@ IDirectDrawImpl_Initialize(IDirectDraw7 *iface,
* Always returns DD_OK
*
*****************************************************************************/
static
HRESULT
WINAPI
IDirectDrawImpl_FlipToGDISurface
(
IDirectDraw7
*
iface
)
static
HRESULT
WINAPI
ddraw7_FlipToGDISurface
(
IDirectDraw7
*
iface
)
{
IDirectDrawImpl
*
This
=
(
IDirectDrawImpl
*
)
iface
;
TRACE
(
"(%p)
\n
"
,
This
);
...
...
@@ -1094,6 +1520,34 @@ IDirectDrawImpl_FlipToGDISurface(IDirectDraw7 *iface)
return
DD_OK
;
}
static
HRESULT
WINAPI
ddraw4_FlipToGDISurface
(
IDirectDraw4
*
iface
)
{
TRACE
(
"iface %p.
\n
"
,
iface
);
return
ddraw7_FlipToGDISurface
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
iface
));
}
static
HRESULT
WINAPI
ddraw3_FlipToGDISurface
(
IDirectDraw3
*
iface
)
{
TRACE
(
"iface %p.
\n
"
,
iface
);
return
ddraw7_FlipToGDISurface
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
iface
));
}
static
HRESULT
WINAPI
ddraw2_FlipToGDISurface
(
IDirectDraw2
*
iface
)
{
TRACE
(
"iface %p.
\n
"
,
iface
);
return
ddraw7_FlipToGDISurface
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
iface
));
}
static
HRESULT
WINAPI
ddraw1_FlipToGDISurface
(
IDirectDraw
*
iface
)
{
TRACE
(
"iface %p.
\n
"
,
iface
);
return
ddraw7_FlipToGDISurface
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
iface
));
}
/*****************************************************************************
* IDirectDraw7::WaitForVerticalBlank
*
...
...
@@ -1111,10 +1565,7 @@ IDirectDrawImpl_FlipToGDISurface(IDirectDraw7 *iface)
* Always returns DD_OK
*
*****************************************************************************/
static
HRESULT
WINAPI
IDirectDrawImpl_WaitForVerticalBlank
(
IDirectDraw7
*
iface
,
DWORD
Flags
,
HANDLE
h
)
static
HRESULT
WINAPI
ddraw7_WaitForVerticalBlank
(
IDirectDraw7
*
iface
,
DWORD
Flags
,
HANDLE
h
)
{
IDirectDrawImpl
*
This
=
(
IDirectDrawImpl
*
)
iface
;
static
BOOL
hide
=
FALSE
;
...
...
@@ -1133,6 +1584,34 @@ IDirectDrawImpl_WaitForVerticalBlank(IDirectDraw7 *iface,
return
DD_OK
;
}
static
HRESULT
WINAPI
ddraw4_WaitForVerticalBlank
(
IDirectDraw4
*
iface
,
DWORD
flags
,
HANDLE
event
)
{
TRACE
(
"iface %p, flags %#x, event %p.
\n
"
,
iface
,
flags
,
event
);
return
ddraw7_WaitForVerticalBlank
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
iface
),
flags
,
event
);
}
static
HRESULT
WINAPI
ddraw3_WaitForVerticalBlank
(
IDirectDraw3
*
iface
,
DWORD
flags
,
HANDLE
event
)
{
TRACE
(
"iface %p, flags %#x, event %p.
\n
"
,
iface
,
flags
,
event
);
return
ddraw7_WaitForVerticalBlank
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
iface
),
flags
,
event
);
}
static
HRESULT
WINAPI
ddraw2_WaitForVerticalBlank
(
IDirectDraw2
*
iface
,
DWORD
flags
,
HANDLE
event
)
{
TRACE
(
"iface %p, flags %#x, event %p.
\n
"
,
iface
,
flags
,
event
);
return
ddraw7_WaitForVerticalBlank
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
iface
),
flags
,
event
);
}
static
HRESULT
WINAPI
ddraw1_WaitForVerticalBlank
(
IDirectDraw
*
iface
,
DWORD
flags
,
HANDLE
event
)
{
TRACE
(
"iface %p, flags %#x, event %p.
\n
"
,
iface
,
flags
,
event
);
return
ddraw7_WaitForVerticalBlank
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
iface
),
flags
,
event
);
}
/*****************************************************************************
* IDirectDraw7::GetScanLine
*
...
...
@@ -1145,7 +1624,7 @@ IDirectDrawImpl_WaitForVerticalBlank(IDirectDraw7 *iface,
* Always returns DD_OK
*
*****************************************************************************/
static
HRESULT
WINAPI
IDirectDrawImpl
_GetScanLine
(
IDirectDraw7
*
iface
,
DWORD
*
Scanline
)
static
HRESULT
WINAPI
ddraw7
_GetScanLine
(
IDirectDraw7
*
iface
,
DWORD
*
Scanline
)
{
IDirectDrawImpl
*
This
=
(
IDirectDrawImpl
*
)
iface
;
static
BOOL
hide
=
FALSE
;
...
...
@@ -1174,6 +1653,34 @@ static HRESULT WINAPI IDirectDrawImpl_GetScanLine(IDirectDraw7 *iface, DWORD *Sc
return
DD_OK
;
}
static
HRESULT
WINAPI
ddraw4_GetScanLine
(
IDirectDraw4
*
iface
,
DWORD
*
line
)
{
TRACE
(
"iface %p, line %p.
\n
"
,
iface
,
line
);
return
ddraw7_GetScanLine
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
iface
),
line
);
}
static
HRESULT
WINAPI
ddraw3_GetScanLine
(
IDirectDraw3
*
iface
,
DWORD
*
line
)
{
TRACE
(
"iface %p, line %p.
\n
"
,
iface
,
line
);
return
ddraw7_GetScanLine
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
iface
),
line
);
}
static
HRESULT
WINAPI
ddraw2_GetScanLine
(
IDirectDraw2
*
iface
,
DWORD
*
line
)
{
TRACE
(
"iface %p, line %p.
\n
"
,
iface
,
line
);
return
ddraw7_GetScanLine
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
iface
),
line
);
}
static
HRESULT
WINAPI
ddraw1_GetScanLine
(
IDirectDraw
*
iface
,
DWORD
*
line
)
{
TRACE
(
"iface %p, line %p.
\n
"
,
iface
,
line
);
return
ddraw7_GetScanLine
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
iface
),
line
);
}
/*****************************************************************************
* IDirectDraw7::TestCooperativeLevel
*
...
...
@@ -1186,14 +1693,20 @@ static HRESULT WINAPI IDirectDrawImpl_GetScanLine(IDirectDraw7 *iface, DWORD *Sc
* if the state is not correct(See below)
*
*****************************************************************************/
static
HRESULT
WINAPI
IDirectDrawImpl_TestCooperativeLevel
(
IDirectDraw7
*
iface
)
static
HRESULT
WINAPI
ddraw7_TestCooperativeLevel
(
IDirectDraw7
*
iface
)
{
TRACE
(
"iface %p.
\n
"
,
iface
);
return
DD_OK
;
}
static
HRESULT
WINAPI
ddraw4_TestCooperativeLevel
(
IDirectDraw4
*
iface
)
{
TRACE
(
"iface %p.
\n
"
,
iface
);
return
ddraw7_TestCooperativeLevel
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
iface
));
}
/*****************************************************************************
* IDirectDraw7::GetGDISurface
*
...
...
@@ -1208,9 +1721,7 @@ IDirectDrawImpl_TestCooperativeLevel(IDirectDraw7 *iface)
* DDERR_NOTFOUND if the GDI surface wasn't found
*
*****************************************************************************/
static
HRESULT
WINAPI
IDirectDrawImpl_GetGDISurface
(
IDirectDraw7
*
iface
,
IDirectDrawSurface7
**
GDISurface
)
static
HRESULT
WINAPI
ddraw7_GetGDISurface
(
IDirectDraw7
*
iface
,
IDirectDrawSurface7
**
GDISurface
)
{
IDirectDrawImpl
*
This
=
(
IDirectDrawImpl
*
)
iface
;
IWineD3DSurface
*
Surf
;
...
...
@@ -1240,23 +1751,86 @@ IDirectDrawImpl_GetGDISurface(IDirectDraw7 *iface,
/* GetBackBuffer AddRef()ed the surface, release it */
IWineD3DSurface_Release
(
Surf
);
IWineD3DSurface_GetParent
(
Surf
,
(
IUnknown
**
)
&
ddsurf
);
IDirectDrawSurface7_Release
(
ddsurf
);
/* For the GetParent */
IWineD3DSurface_GetParent
(
Surf
,
(
IUnknown
**
)
&
ddsurf
);
IDirectDrawSurface7_Release
(
ddsurf
);
/* For the GetParent */
/* Find the front buffer */
ddsCaps
.
dwCaps
=
DDSCAPS_FRONTBUFFER
;
hr
=
IDirectDrawSurface7_GetAttachedSurface
(
ddsurf
,
&
ddsCaps
,
GDISurface
);
if
(
hr
!=
DD_OK
)
{
ERR
(
"IDirectDrawSurface7::GetAttachedSurface failed, hr = %x
\n
"
,
hr
);
}
/* The AddRef is OK this time */
LeaveCriticalSection
(
&
ddraw_cs
);
return
hr
;
}
static
HRESULT
WINAPI
ddraw4_GetGDISurface
(
IDirectDraw4
*
iface
,
IDirectDrawSurface4
**
surface
)
{
TRACE
(
"iface %p, surface %p.
\n
"
,
iface
,
surface
);
return
ddraw7_GetGDISurface
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
iface
),
(
IDirectDrawSurface7
**
)
surface
);
}
static
HRESULT
WINAPI
ddraw3_GetGDISurface
(
IDirectDraw3
*
iface
,
IDirectDrawSurface
**
surface
)
{
IDirectDrawSurface7
*
surface7
;
HRESULT
hr
;
TRACE
(
"iface %p, surface %p.
\n
"
,
iface
,
surface
);
hr
=
ddraw7_GetGDISurface
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
iface
),
&
surface7
);
*
surface
=
surface7
?
(
IDirectDrawSurface
*
)
&
((
IDirectDrawSurfaceImpl
*
)
surface7
)
->
IDirectDrawSurface3_vtbl
:
NULL
;
return
hr
;
}
static
HRESULT
WINAPI
ddraw2_GetGDISurface
(
IDirectDraw2
*
iface
,
IDirectDrawSurface
**
surface
)
{
IDirectDrawSurface7
*
surface7
;
HRESULT
hr
;
TRACE
(
"iface %p, surface %p.
\n
"
,
iface
,
surface
);
hr
=
ddraw7_GetGDISurface
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
iface
),
&
surface7
);
*
surface
=
surface7
?
(
IDirectDrawSurface
*
)
&
((
IDirectDrawSurfaceImpl
*
)
surface7
)
->
IDirectDrawSurface3_vtbl
:
NULL
;
return
hr
;
}
static
HRESULT
WINAPI
ddraw1_GetGDISurface
(
IDirectDraw
*
iface
,
IDirectDrawSurface
**
surface
)
{
IDirectDrawSurface7
*
surface7
;
HRESULT
hr
;
TRACE
(
"iface %p, surface %p.
\n
"
,
iface
,
surface
);
hr
=
ddraw7_GetGDISurface
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
iface
),
&
surface7
);
*
surface
=
surface7
?
(
IDirectDrawSurface
*
)
&
((
IDirectDrawSurfaceImpl
*
)
surface7
)
->
IDirectDrawSurface3_vtbl
:
NULL
;
return
hr
;
}
struct
displaymodescallback_context
{
LPDDENUMMODESCALLBACK
func
;
void
*
context
;
};
static
HRESULT
CALLBACK
EnumDisplayModesCallbackThunk
(
DDSURFACEDESC2
*
surface_desc
,
void
*
context
)
{
struct
displaymodescallback_context
*
cbcontext
=
context
;
DDSURFACEDESC
desc
;
/* Find the front buffer */
ddsCaps
.
dwCaps
=
DDSCAPS_FRONTBUFFER
;
hr
=
IDirectDrawSurface7_GetAttachedSurface
(
ddsurf
,
&
ddsCaps
,
GDISurface
);
if
(
hr
!=
DD_OK
)
{
ERR
(
"IDirectDrawSurface7::GetAttachedSurface failed, hr = %x
\n
"
,
hr
);
}
memcpy
(
&
desc
,
surface_desc
,
sizeof
(
desc
));
desc
.
dwSize
=
sizeof
(
desc
);
/* The AddRef is OK this time */
LeaveCriticalSection
(
&
ddraw_cs
);
return
hr
;
return
cbcontext
->
func
(
&
desc
,
cbcontext
->
context
);
}
/*****************************************************************************
...
...
@@ -1276,12 +1850,8 @@ IDirectDrawImpl_GetGDISurface(IDirectDraw7 *iface,
* DDERR_INVALIDPARAMS if the callback wasn't set
*
*****************************************************************************/
static
HRESULT
WINAPI
IDirectDrawImpl_EnumDisplayModes
(
IDirectDraw7
*
iface
,
DWORD
Flags
,
DDSURFACEDESC2
*
DDSD
,
void
*
Context
,
LPDDENUMMODESCALLBACK2
cb
)
static
HRESULT
WINAPI
ddraw7_EnumDisplayModes
(
IDirectDraw7
*
iface
,
DWORD
Flags
,
DDSURFACEDESC2
*
DDSD
,
void
*
Context
,
LPDDENUMMODESCALLBACK2
cb
)
{
IDirectDrawImpl
*
This
=
(
IDirectDrawImpl
*
)
iface
;
unsigned
int
modenum
,
fmt
;
...
...
@@ -1430,6 +2000,61 @@ IDirectDrawImpl_EnumDisplayModes(IDirectDraw7 *iface,
return
DD_OK
;
}
static
HRESULT
WINAPI
ddraw4_EnumDisplayModes
(
IDirectDraw4
*
iface
,
DWORD
flags
,
DDSURFACEDESC2
*
surface_desc
,
void
*
context
,
LPDDENUMMODESCALLBACK2
callback
)
{
TRACE
(
"iface %p, flags %#x, surface_desc %p, context %p, callback %p.
\n
"
,
iface
,
flags
,
surface_desc
,
context
,
callback
);
return
ddraw7_EnumDisplayModes
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
iface
),
flags
,
surface_desc
,
context
,
callback
);
}
static
HRESULT
WINAPI
ddraw3_EnumDisplayModes
(
IDirectDraw3
*
iface
,
DWORD
flags
,
DDSURFACEDESC
*
surface_desc
,
void
*
context
,
LPDDENUMMODESCALLBACK
callback
)
{
struct
displaymodescallback_context
cbcontext
;
TRACE
(
"iface %p, flags %#x, surface_desc %p, context %p, callback %p.
\n
"
,
iface
,
flags
,
surface_desc
,
context
,
callback
);
cbcontext
.
func
=
callback
;
cbcontext
.
context
=
context
;
return
ddraw7_EnumDisplayModes
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
iface
),
flags
,
(
DDSURFACEDESC2
*
)
surface_desc
,
&
cbcontext
,
EnumDisplayModesCallbackThunk
);
}
static
HRESULT
WINAPI
ddraw2_EnumDisplayModes
(
IDirectDraw2
*
iface
,
DWORD
flags
,
DDSURFACEDESC
*
surface_desc
,
void
*
context
,
LPDDENUMMODESCALLBACK
callback
)
{
struct
displaymodescallback_context
cbcontext
;
TRACE
(
"iface %p, flags %#x, surface_desc %p, context %p, callback %p.
\n
"
,
iface
,
flags
,
surface_desc
,
context
,
callback
);
cbcontext
.
func
=
callback
;
cbcontext
.
context
=
context
;
return
ddraw7_EnumDisplayModes
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
iface
),
flags
,
(
DDSURFACEDESC2
*
)
surface_desc
,
&
cbcontext
,
EnumDisplayModesCallbackThunk
);
}
static
HRESULT
WINAPI
ddraw1_EnumDisplayModes
(
IDirectDraw
*
iface
,
DWORD
flags
,
DDSURFACEDESC
*
surface_desc
,
void
*
context
,
LPDDENUMMODESCALLBACK
callback
)
{
struct
displaymodescallback_context
cbcontext
;
TRACE
(
"iface %p, flags %#x, surface_desc %p, context %p, callback %p.
\n
"
,
iface
,
flags
,
surface_desc
,
context
,
callback
);
cbcontext
.
func
=
callback
;
cbcontext
.
context
=
context
;
return
ddraw7_EnumDisplayModes
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
iface
),
flags
,
(
DDSURFACEDESC2
*
)
surface_desc
,
&
cbcontext
,
EnumDisplayModesCallbackThunk
);
}
/*****************************************************************************
* IDirectDraw7::EvaluateMode
*
...
...
@@ -1446,10 +2071,7 @@ IDirectDrawImpl_EnumDisplayModes(IDirectDraw7 *iface,
* This implementation always DD_OK, because it's a stub
*
*****************************************************************************/
static
HRESULT
WINAPI
IDirectDrawImpl_EvaluateMode
(
IDirectDraw7
*
iface
,
DWORD
Flags
,
DWORD
*
Timeout
)
static
HRESULT
WINAPI
ddraw7_EvaluateMode
(
IDirectDraw7
*
iface
,
DWORD
Flags
,
DWORD
*
Timeout
)
{
IDirectDrawImpl
*
This
=
(
IDirectDrawImpl
*
)
iface
;
FIXME
(
"(%p)->(%d,%p): Stub!
\n
"
,
This
,
Flags
,
Timeout
);
...
...
@@ -1474,10 +2096,8 @@ IDirectDrawImpl_EvaluateMode(IDirectDraw7 *iface,
* DDERR_INVALIDPARAMS if DDDI is NULL
*
*****************************************************************************/
static
HRESULT
WINAPI
IDirectDrawImpl_GetDeviceIdentifier
(
IDirectDraw7
*
iface
,
DDDEVICEIDENTIFIER2
*
DDDI
,
DWORD
Flags
)
static
HRESULT
WINAPI
ddraw7_GetDeviceIdentifier
(
IDirectDraw7
*
iface
,
DDDEVICEIDENTIFIER2
*
DDDI
,
DWORD
Flags
)
{
IDirectDrawImpl
*
This
=
(
IDirectDrawImpl
*
)
iface
;
TRACE
(
"(%p)->(%p,%08x)
\n
"
,
This
,
DDDI
,
Flags
);
...
...
@@ -1496,6 +2116,20 @@ IDirectDrawImpl_GetDeviceIdentifier(IDirectDraw7 *iface,
return
DD_OK
;
}
static
HRESULT
WINAPI
ddraw4_GetDeviceIdentifier
(
IDirectDraw4
*
iface
,
DDDEVICEIDENTIFIER
*
identifier
,
DWORD
flags
)
{
DDDEVICEIDENTIFIER2
identifier2
;
HRESULT
hr
;
TRACE
(
"iface %p, identifier %p, flags %#x.
\n
"
,
iface
,
identifier
,
flags
);
hr
=
ddraw7_GetDeviceIdentifier
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
iface
),
&
identifier2
,
flags
);
DDRAW_Convert_DDDEVICEIDENTIFIER_2_To_1
(
&
identifier2
,
identifier
);
return
hr
;
}
/*****************************************************************************
* IDirectDraw7::GetSurfaceFromDC
*
...
...
@@ -1510,10 +2144,7 @@ IDirectDrawImpl_GetDeviceIdentifier(IDirectDraw7 *iface,
* Always returns DD_OK because it's a stub
*
*****************************************************************************/
static
HRESULT
WINAPI
IDirectDrawImpl_GetSurfaceFromDC
(
IDirectDraw7
*
iface
,
HDC
hdc
,
IDirectDrawSurface7
**
Surface
)
static
HRESULT
WINAPI
ddraw7_GetSurfaceFromDC
(
IDirectDraw7
*
iface
,
HDC
hdc
,
IDirectDrawSurface7
**
Surface
)
{
IDirectDrawImpl
*
This
=
(
IDirectDrawImpl
*
)
iface
;
IWineD3DSurface
*
wined3d_surface
;
...
...
@@ -1536,6 +2167,29 @@ IDirectDrawImpl_GetSurfaceFromDC(IDirectDraw7 *iface,
return
DD_OK
;
}
static
HRESULT
WINAPI
ddraw4_GetSurfaceFromDC
(
IDirectDraw4
*
iface
,
HDC
dc
,
IDirectDrawSurface4
**
surface
)
{
IDirectDrawSurface7
*
surface7
;
HRESULT
hr
;
TRACE
(
"iface %p, dc %p, surface %p.
\n
"
,
iface
,
dc
,
surface
);
if
(
!
surface
)
return
E_INVALIDARG
;
hr
=
ddraw7_GetSurfaceFromDC
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
iface
),
dc
,
&
surface7
);
*
surface
=
surface7
?
(
IDirectDrawSurface4
*
)
&
((
IDirectDrawSurfaceImpl
*
)
surface7
)
->
IDirectDrawSurface3_vtbl
:
NULL
;
return
hr
;
}
static
HRESULT
WINAPI
ddraw3_GetSurfaceFromDC
(
IDirectDraw3
*
iface
,
HDC
dc
,
IDirectDrawSurface
**
surface
)
{
TRACE
(
"iface %p, dc %p, surface %p.
\n
"
,
iface
,
dc
,
surface
);
return
ddraw7_GetSurfaceFromDC
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
iface
),
dc
,
(
IDirectDrawSurface7
**
)
surface
);
}
/*****************************************************************************
* IDirectDraw7::RestoreAllSurfaces
*
...
...
@@ -1547,8 +2201,7 @@ IDirectDrawImpl_GetSurfaceFromDC(IDirectDraw7 *iface,
* Always returns DD_OK because it's a stub
*
*****************************************************************************/
static
HRESULT
WINAPI
IDirectDrawImpl_RestoreAllSurfaces
(
IDirectDraw7
*
iface
)
static
HRESULT
WINAPI
ddraw7_RestoreAllSurfaces
(
IDirectDraw7
*
iface
)
{
IDirectDrawImpl
*
This
=
(
IDirectDrawImpl
*
)
iface
;
FIXME
(
"(%p): Stub
\n
"
,
This
);
...
...
@@ -1561,6 +2214,13 @@ IDirectDrawImpl_RestoreAllSurfaces(IDirectDraw7 *iface)
return
DD_OK
;
}
static
HRESULT
WINAPI
ddraw4_RestoreAllSurfaces
(
IDirectDraw4
*
iface
)
{
TRACE
(
"iface %p.
\n
"
,
iface
);
return
ddraw7_RestoreAllSurfaces
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
iface
));
}
/*****************************************************************************
* IDirectDraw7::StartModeTest
*
...
...
@@ -1583,11 +2243,7 @@ IDirectDrawImpl_RestoreAllSurfaces(IDirectDraw7 *iface)
* otherwise DD_OK
*
*****************************************************************************/
static
HRESULT
WINAPI
IDirectDrawImpl_StartModeTest
(
IDirectDraw7
*
iface
,
SIZE
*
Modes
,
DWORD
NumModes
,
DWORD
Flags
)
static
HRESULT
WINAPI
ddraw7_StartModeTest
(
IDirectDraw7
*
iface
,
SIZE
*
Modes
,
DWORD
NumModes
,
DWORD
Flags
)
{
IDirectDrawImpl
*
This
=
(
IDirectDrawImpl
*
)
iface
;
WARN
(
"(%p)->(%p, %d, %x): Semi-Stub, most likely harmless
\n
"
,
This
,
Modes
,
NumModes
,
Flags
);
...
...
@@ -1607,16 +2263,13 @@ IDirectDrawImpl_StartModeTest(IDirectDraw7 *iface,
}
/*****************************************************************************
*
IDirectDrawImpl_RecreateSurfacesCallback
*
ddraw_recreate_surfaces_cb
*
* Enumeration callback for
IDirectDrawImpl_RecreateAllSurfaces
.
* Enumeration callback for
ddraw_recreate_surface
.
* It re-recreates the WineD3DSurface. It's pretty straightforward
*
*****************************************************************************/
HRESULT
WINAPI
IDirectDrawImpl_RecreateSurfacesCallback
(
IDirectDrawSurface7
*
surf
,
DDSURFACEDESC2
*
desc
,
void
*
Context
)
HRESULT
WINAPI
ddraw_recreate_surfaces_cb
(
IDirectDrawSurface7
*
surf
,
DDSURFACEDESC2
*
desc
,
void
*
Context
)
{
IDirectDrawSurfaceImpl
*
surfImpl
=
(
IDirectDrawSurfaceImpl
*
)
surf
;
IDirectDrawImpl
*
This
=
surfImpl
->
ddraw
;
...
...
@@ -1708,15 +2361,14 @@ IDirectDrawImpl_RecreateSurfacesCallback(IDirectDrawSurface7 *surf,
}
/*****************************************************************************
*
IDirectDrawImpl_RecreateAllS
urfaces
*
ddraw_recreate_s
urfaces
*
* A function, that converts all wineD3DSurfaces to the new implementation type
* It enumerates all surfaces with IWineD3DDevice::EnumSurfaces, creates a
* new WineD3DSurface, copies the content and releases the old surface
*
*****************************************************************************/
static
HRESULT
IDirectDrawImpl_RecreateAllSurfaces
(
IDirectDrawImpl
*
This
)
static
HRESULT
ddraw_recreate_surfaces
(
IDirectDrawImpl
*
This
)
{
DDSURFACEDESC2
desc
;
TRACE
(
"(%p): Switch to implementation %d
\n
"
,
This
,
This
->
ImplType
);
...
...
@@ -1733,7 +2385,7 @@ IDirectDrawImpl_RecreateAllSurfaces(IDirectDrawImpl *This)
memset
(
&
desc
,
0
,
sizeof
(
desc
));
desc
.
dwSize
=
sizeof
(
desc
);
return
IDirectDraw7_EnumSurfaces
((
IDirectDraw7
*
)
This
,
0
,
&
desc
,
This
,
IDirectDrawImpl_RecreateSurfacesCallback
);
return
IDirectDraw7_EnumSurfaces
((
IDirectDraw7
*
)
This
,
0
,
&
desc
,
This
,
ddraw_recreate_surfaces_cb
);
}
ULONG
WINAPI
D3D7CB_DestroySwapChain
(
IWineD3DSwapChain
*
pSwapChain
)
{
...
...
@@ -1746,7 +2398,7 @@ ULONG WINAPI D3D7CB_DestroySwapChain(IWineD3DSwapChain *pSwapChain) {
}
/*****************************************************************************
*
IDirectDrawImpl_CreateNewS
urface
*
ddraw_create_s
urface
*
* A helper function for IDirectDraw7::CreateSurface. It creates a new surface
* with the passed parameters.
...
...
@@ -1759,11 +2411,8 @@ ULONG WINAPI D3D7CB_DestroySwapChain(IWineD3DSwapChain *pSwapChain) {
* DD_OK on success
*
*****************************************************************************/
static
HRESULT
IDirectDrawImpl_CreateNewSurface
(
IDirectDrawImpl
*
This
,
DDSURFACEDESC2
*
pDDSD
,
IDirectDrawSurfaceImpl
**
ppSurf
,
UINT
level
)
static
HRESULT
ddraw_create_surface
(
IDirectDrawImpl
*
This
,
DDSURFACEDESC2
*
pDDSD
,
IDirectDrawSurfaceImpl
**
ppSurf
,
UINT
level
)
{
HRESULT
hr
;
UINT
Width
,
Height
;
...
...
@@ -1824,7 +2473,7 @@ IDirectDrawImpl_CreateNewSurface(IDirectDrawImpl *This,
ImplType
=
SURFACE_OPENGL
;
This
->
ImplType
=
ImplType
;
TRACE
(
"(%p) Re-creating all surfaces
\n
"
,
This
);
IDirectDrawImpl_RecreateAllS
urfaces
(
This
);
ddraw_recreate_s
urfaces
(
This
);
TRACE
(
"(%p) Done recreating all surfaces
\n
"
,
This
);
}
else
if
(
This
->
ImplType
!=
SURFACE_OPENGL
&&
pDDSD
->
ddsCaps
.
dwCaps
&
DDSCAPS_3DDEVICE
)
...
...
@@ -2070,10 +2719,7 @@ CreateAdditionalSurfaces(IDirectDrawImpl *This,
}
CubeFaceRoot
=
FALSE
;
hr
=
IDirectDrawImpl_CreateNewSurface
(
This
,
&
DDSD
,
&
object2
,
level
);
hr
=
ddraw_create_surface
(
This
,
&
DDSD
,
&
object2
,
level
);
if
(
hr
!=
DD_OK
)
{
return
hr
;
...
...
@@ -2097,8 +2743,27 @@ CreateAdditionalSurfaces(IDirectDrawImpl *This,
return
DD_OK
;
}
/* Must set all attached surfaces (e.g. mipmaps) versions as well */
static
void
ddraw_set_surface_version
(
IDirectDrawSurfaceImpl
*
surface
,
UINT
version
)
{
unsigned
int
i
;
TRACE
(
"surface %p, version %u -> %u.
\n
"
,
surface
,
surface
->
version
,
version
);
surface
->
version
=
version
;
for
(
i
=
0
;
i
<
MAX_COMPLEX_ATTACHED
;
++
i
)
{
if
(
!
surface
->
complex_array
[
i
])
break
;
ddraw_set_surface_version
(
surface
->
complex_array
[
i
],
version
);
}
while
((
surface
=
surface
->
next_attached
))
{
ddraw_set_surface_version
(
surface
,
version
);
}
}
/*****************************************************************************
*
IDirectDrawImpl_AttachD3DD
evice
*
ddraw_attach_d3d_d
evice
*
* Initializes the D3D capabilities of WineD3D
*
...
...
@@ -2110,7 +2775,7 @@ CreateAdditionalSurfaces(IDirectDrawImpl *This,
* DDERR_* otherwise
*
*****************************************************************************/
static
HRESULT
IDirectDrawImpl_AttachD3DD
evice
(
IDirectDrawImpl
*
ddraw
,
IDirectDrawSurfaceImpl
*
primary
)
static
HRESULT
ddraw_attach_d3d_d
evice
(
IDirectDrawImpl
*
ddraw
,
IDirectDrawSurfaceImpl
*
primary
)
{
WINED3DPRESENT_PARAMETERS
localParameters
;
HWND
window
=
ddraw
->
dest_window
;
...
...
@@ -2185,7 +2850,7 @@ static HRESULT IDirectDrawImpl_AttachD3DDevice(IDirectDrawImpl *ddraw, IDirectDr
return
DD_OK
;
}
static
HRESULT
IDirectDrawImpl_CreateGDISwapC
hain
(
IDirectDrawImpl
*
ddraw
,
IDirectDrawSurfaceImpl
*
primary
)
static
HRESULT
ddraw_create_gdi_swapc
hain
(
IDirectDrawImpl
*
ddraw
,
IDirectDrawSurfaceImpl
*
primary
)
{
WINED3DPRESENT_PARAMETERS
presentation_parameters
;
HWND
window
;
...
...
@@ -2302,11 +2967,8 @@ static HRESULT IDirectDrawImpl_CreateGDISwapChain(IDirectDrawImpl *ddraw, IDirec
* DDERR_* if an error occurs
*
*****************************************************************************/
static
HRESULT
WINAPI
IDirectDrawImpl_CreateSurface
(
IDirectDraw7
*
iface
,
DDSURFACEDESC2
*
DDSD
,
IDirectDrawSurface7
**
Surf
,
IUnknown
*
UnkOuter
)
static
HRESULT
WINAPI
ddraw7_CreateSurface
(
IDirectDraw7
*
iface
,
DDSURFACEDESC2
*
DDSD
,
IDirectDrawSurface7
**
Surf
,
IUnknown
*
UnkOuter
)
{
IDirectDrawImpl
*
This
=
(
IDirectDrawImpl
*
)
iface
;
IDirectDrawSurfaceImpl
*
object
=
NULL
;
...
...
@@ -2560,10 +3222,10 @@ IDirectDrawImpl_CreateSurface(IDirectDraw7 *iface,
}
/* Create the first surface */
hr
=
IDirectDrawImpl_CreateNewS
urface
(
This
,
&
desc2
,
&
object
,
0
);
hr
=
ddraw_create_s
urface
(
This
,
&
desc2
,
&
object
,
0
);
if
(
hr
!=
DD_OK
)
{
ERR
(
"
IDirectDrawImpl_CreateNewSurface failed with %08x
\n
"
,
hr
);
ERR
(
"
ddraw_create_surface failed, hr %#x.
\n
"
,
hr
);
LeaveCriticalSection
(
&
ddraw_cs
);
return
hr
;
}
...
...
@@ -2644,11 +3306,11 @@ IDirectDrawImpl_CreateSurface(IDirectDraw7 *iface,
}
TRACE
(
"(%p) Attaching a D3DDevice, rendertarget = %p
\n
"
,
This
,
target
);
hr
=
IDirectDrawImpl_AttachD3DD
evice
(
This
,
target
);
if
(
hr
!=
D3D_OK
)
hr
=
ddraw_attach_d3d_d
evice
(
This
,
target
);
if
(
hr
!=
D3D_OK
)
{
IDirectDrawSurfaceImpl
*
release_surf
;
ERR
(
"
IDirectDrawImpl_AttachD3DDevice failed, hr = %
x
\n
"
,
hr
);
ERR
(
"
ddraw_attach_d3d_device failed, hr %#
x
\n
"
,
hr
);
*
Surf
=
NULL
;
/* The before created surface structures are in an incomplete state here.
...
...
@@ -2667,8 +3329,10 @@ IDirectDrawImpl_CreateSurface(IDirectDraw7 *iface,
LeaveCriticalSection
(
&
ddraw_cs
);
return
hr
;
}
}
else
if
(
!
(
This
->
d3d_initialized
)
&&
desc2
.
ddsCaps
.
dwCaps
&
DDSCAPS_PRIMARYSURFACE
)
{
IDirectDrawImpl_CreateGDISwapChain
(
This
,
object
);
}
else
if
(
!
(
This
->
d3d_initialized
)
&&
desc2
.
ddsCaps
.
dwCaps
&
DDSCAPS_PRIMARYSURFACE
)
{
ddraw_create_gdi_swapchain
(
This
,
object
);
}
/* Addref the ddraw interface to keep an reference for each surface */
...
...
@@ -2727,6 +3391,114 @@ IDirectDrawImpl_CreateSurface(IDirectDraw7 *iface,
return
hr
;
}
static
HRESULT
WINAPI
ddraw4_CreateSurface
(
IDirectDraw4
*
iface
,
DDSURFACEDESC2
*
surface_desc
,
IDirectDrawSurface4
**
surface
,
IUnknown
*
outer_unknown
)
{
IDirectDrawImpl
*
ddraw
=
ddraw_from_ddraw4
(
iface
);
IDirectDrawSurfaceImpl
*
impl
;
HRESULT
hr
;
TRACE
(
"iface %p, surface_desc %p, surface %p, outer_unknown %p.
\n
"
,
iface
,
surface_desc
,
surface
,
outer_unknown
);
hr
=
ddraw7_CreateSurface
((
IDirectDraw7
*
)
ddraw
,
surface_desc
,
(
IDirectDrawSurface7
**
)
surface
,
outer_unknown
);
impl
=
(
IDirectDrawSurfaceImpl
*
)
*
surface
;
if
(
SUCCEEDED
(
hr
)
&&
impl
)
{
ddraw_set_surface_version
(
impl
,
4
);
IDirectDraw7_Release
((
IDirectDraw7
*
)
ddraw
);
IDirectDraw4_AddRef
(
iface
);
impl
->
ifaceToRelease
=
(
IUnknown
*
)
iface
;
}
return
hr
;
}
static
HRESULT
WINAPI
ddraw3_CreateSurface
(
IDirectDraw3
*
iface
,
DDSURFACEDESC
*
surface_desc
,
IDirectDrawSurface
**
surface
,
IUnknown
*
outer_unknown
)
{
IDirectDrawImpl
*
ddraw
=
ddraw_from_ddraw3
(
iface
);
IDirectDrawSurface7
*
surface7
;
IDirectDrawSurfaceImpl
*
impl
;
HRESULT
hr
;
TRACE
(
"iface %p, surface_desc %p, surface %p, outer_unknown %p.
\n
"
,
iface
,
surface_desc
,
surface
,
outer_unknown
);
hr
=
ddraw7_CreateSurface
((
IDirectDraw7
*
)
ddraw
,
(
DDSURFACEDESC2
*
)
surface_desc
,
&
surface7
,
outer_unknown
);
if
(
FAILED
(
hr
))
{
*
surface
=
NULL
;
return
hr
;
}
impl
=
(
IDirectDrawSurfaceImpl
*
)
surface7
;
*
surface
=
(
IDirectDrawSurface
*
)
&
impl
->
IDirectDrawSurface3_vtbl
;
ddraw_set_surface_version
(
impl
,
3
);
IDirectDraw7_Release
((
IDirectDraw7
*
)
ddraw
);
IDirectDraw3_AddRef
(
iface
);
impl
->
ifaceToRelease
=
(
IUnknown
*
)
iface
;
return
hr
;
}
static
HRESULT
WINAPI
ddraw2_CreateSurface
(
IDirectDraw2
*
iface
,
DDSURFACEDESC
*
surface_desc
,
IDirectDrawSurface
**
surface
,
IUnknown
*
outer_unknown
)
{
IDirectDrawImpl
*
ddraw
=
ddraw_from_ddraw2
(
iface
);
IDirectDrawSurface7
*
surface7
;
IDirectDrawSurfaceImpl
*
impl
;
HRESULT
hr
;
TRACE
(
"iface %p, surface_desc %p, surface %p, outer_unknown %p.
\n
"
,
iface
,
surface_desc
,
surface
,
outer_unknown
);
hr
=
ddraw7_CreateSurface
((
IDirectDraw7
*
)
ddraw
,
(
DDSURFACEDESC2
*
)
surface_desc
,
&
surface7
,
outer_unknown
);
if
(
FAILED
(
hr
))
{
*
surface
=
NULL
;
return
hr
;
}
impl
=
(
IDirectDrawSurfaceImpl
*
)
surface7
;
*
surface
=
(
IDirectDrawSurface
*
)
&
impl
->
IDirectDrawSurface3_vtbl
;
ddraw_set_surface_version
(
impl
,
2
);
IDirectDraw7_Release
((
IDirectDraw7
*
)
ddraw
);
impl
->
ifaceToRelease
=
NULL
;
return
hr
;
}
static
HRESULT
WINAPI
ddraw1_CreateSurface
(
IDirectDraw
*
iface
,
DDSURFACEDESC
*
surface_desc
,
IDirectDrawSurface
**
surface
,
IUnknown
*
outer_unknown
)
{
IDirectDrawImpl
*
ddraw
=
ddraw_from_ddraw1
(
iface
);
IDirectDrawSurface7
*
surface7
;
IDirectDrawSurfaceImpl
*
impl
;
HRESULT
hr
;
TRACE
(
"iface %p, surface_desc %p, surface %p, outer_unknown %p.
\n
"
,
iface
,
surface_desc
,
surface
,
outer_unknown
);
/* Remove front buffer flag, this causes failure in v7, and its added to normal
* primaries anyway. */
surface_desc
->
ddsCaps
.
dwCaps
&=
~
DDSCAPS_FRONTBUFFER
;
hr
=
ddraw7_CreateSurface
((
IDirectDraw7
*
)
ddraw
,
(
DDSURFACEDESC2
*
)
surface_desc
,
&
surface7
,
outer_unknown
);
if
(
FAILED
(
hr
))
{
*
surface
=
NULL
;
return
hr
;
}
impl
=
(
IDirectDrawSurfaceImpl
*
)
surface7
;
*
surface
=
(
IDirectDrawSurface
*
)
&
impl
->
IDirectDrawSurface3_vtbl
;
ddraw_set_surface_version
(
impl
,
1
);
IDirectDraw7_Release
((
IDirectDraw7
*
)
ddraw
);
impl
->
ifaceToRelease
=
NULL
;
return
hr
;
}
#define DDENUMSURFACES_SEARCHTYPE (DDENUMSURFACES_CANBECREATED|DDENUMSURFACES_DOESEXIST)
#define DDENUMSURFACES_MATCHTYPE (DDENUMSURFACES_ALL|DDENUMSURFACES_MATCH|DDENUMSURFACES_NOMATCH)
...
...
@@ -2776,9 +3548,7 @@ Main_DirectDraw_DDPIXELFORMAT_Match(const DDPIXELFORMAT *requested,
return
TRUE
;
}
static
BOOL
IDirectDrawImpl_DDSD_Match
(
const
DDSURFACEDESC2
*
requested
,
const
DDSURFACEDESC2
*
provided
)
static
BOOL
ddraw_match_surface_desc
(
const
DDSURFACEDESC2
*
requested
,
const
DDSURFACEDESC2
*
provided
)
{
struct
compare_info
{
...
...
@@ -2841,6 +3611,21 @@ IDirectDrawImpl_DDSD_Match(const DDSURFACEDESC2* requested,
#undef DDENUMSURFACES_SEARCHTYPE
#undef DDENUMSURFACES_MATCHTYPE
struct
surfacescallback_context
{
LPDDENUMSURFACESCALLBACK
func
;
void
*
context
;
};
static
HRESULT
CALLBACK
EnumSurfacesCallbackThunk
(
IDirectDrawSurface7
*
surface
,
DDSURFACEDESC2
*
surface_desc
,
void
*
context
)
{
struct
surfacescallback_context
*
cbcontext
=
context
;
return
cbcontext
->
func
((
IDirectDrawSurface
*
)
&
((
IDirectDrawSurfaceImpl
*
)
surface
)
->
IDirectDrawSurface3_vtbl
,
(
DDSURFACEDESC
*
)
surface_desc
,
cbcontext
->
context
);
}
/*****************************************************************************
* IDirectDraw7::EnumSurfaces
*
...
...
@@ -2860,12 +3645,8 @@ IDirectDrawImpl_DDSD_Match(const DDSURFACEDESC2* requested,
* DD_OK on success
*
*****************************************************************************/
static
HRESULT
WINAPI
IDirectDrawImpl_EnumSurfaces
(
IDirectDraw7
*
iface
,
DWORD
Flags
,
DDSURFACEDESC2
*
DDSD
,
void
*
Context
,
LPDDENUMSURFACESCALLBACK7
Callback
)
static
HRESULT
WINAPI
ddraw7_EnumSurfaces
(
IDirectDraw7
*
iface
,
DWORD
Flags
,
DDSURFACEDESC2
*
DDSD
,
void
*
Context
,
LPDDENUMSURFACESCALLBACK7
Callback
)
{
/* The surface enumeration is handled by WineDDraw,
* because it keeps track of all surfaces attached to
...
...
@@ -2895,7 +3676,7 @@ IDirectDrawImpl_EnumSurfaces(IDirectDraw7 *iface,
LIST_FOR_EACH_SAFE
(
entry
,
entry2
,
&
This
->
surface_list
)
{
surf
=
LIST_ENTRY
(
entry
,
IDirectDrawSurfaceImpl
,
surface_list_entry
);
if
(
all
||
(
nomatch
!=
IDirectDrawImpl_DDSD_Match
(
DDSD
,
&
surf
->
surface_desc
)))
if
(
all
||
(
nomatch
!=
ddraw_match_surface_desc
(
DDSD
,
&
surf
->
surface_desc
)))
{
desc
=
surf
->
surface_desc
;
IDirectDrawSurface7_AddRef
((
IDirectDrawSurface7
*
)
surf
);
...
...
@@ -2910,6 +3691,61 @@ IDirectDrawImpl_EnumSurfaces(IDirectDraw7 *iface,
return
DD_OK
;
}
static
HRESULT
WINAPI
ddraw4_EnumSurfaces
(
IDirectDraw4
*
iface
,
DWORD
flags
,
DDSURFACEDESC2
*
surface_desc
,
void
*
context
,
LPDDENUMSURFACESCALLBACK2
callback
)
{
TRACE
(
"iface %p, flags %#x, surface_desc %p, context %p, callback %p.
\n
"
,
iface
,
flags
,
surface_desc
,
context
,
callback
);
return
ddraw7_EnumSurfaces
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
iface
),
flags
,
surface_desc
,
context
,
(
LPDDENUMSURFACESCALLBACK7
)
callback
);
}
static
HRESULT
WINAPI
ddraw3_EnumSurfaces
(
IDirectDraw3
*
iface
,
DWORD
flags
,
DDSURFACEDESC
*
surface_desc
,
void
*
context
,
LPDDENUMSURFACESCALLBACK
callback
)
{
struct
surfacescallback_context
cbcontext
;
TRACE
(
"iface %p, flags %#x, surface_desc %p, context %p, callback %p.
\n
"
,
iface
,
flags
,
surface_desc
,
context
,
callback
);
cbcontext
.
func
=
callback
;
cbcontext
.
context
=
context
;
return
ddraw7_EnumSurfaces
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
iface
),
flags
,
(
DDSURFACEDESC2
*
)
surface_desc
,
&
cbcontext
,
EnumSurfacesCallbackThunk
);
}
static
HRESULT
WINAPI
ddraw2_EnumSurfaces
(
IDirectDraw2
*
iface
,
DWORD
flags
,
DDSURFACEDESC
*
surface_desc
,
void
*
context
,
LPDDENUMSURFACESCALLBACK
callback
)
{
struct
surfacescallback_context
cbcontext
;
TRACE
(
"iface %p, flags %#x, surface_desc %p, context %p, callback %p.
\n
"
,
iface
,
flags
,
surface_desc
,
context
,
callback
);
cbcontext
.
func
=
callback
;
cbcontext
.
context
=
context
;
return
ddraw7_EnumSurfaces
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
iface
),
flags
,
(
DDSURFACEDESC2
*
)
surface_desc
,
&
cbcontext
,
EnumSurfacesCallbackThunk
);
}
static
HRESULT
WINAPI
ddraw1_EnumSurfaces
(
IDirectDraw
*
iface
,
DWORD
flags
,
DDSURFACEDESC
*
surface_desc
,
void
*
context
,
LPDDENUMSURFACESCALLBACK
callback
)
{
struct
surfacescallback_context
cbcontext
;
TRACE
(
"iface %p, flags %#x, surface_desc %p, context %p, callback %p.
\n
"
,
iface
,
flags
,
surface_desc
,
context
,
callback
);
cbcontext
.
func
=
callback
;
cbcontext
.
context
=
context
;
return
ddraw7_EnumSurfaces
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
iface
),
flags
,
(
DDSURFACEDESC2
*
)
surface_desc
,
&
cbcontext
,
EnumSurfacesCallbackThunk
);
}
/*****************************************************************************
* DirectDrawCreateClipper (DDRAW.@)
*
...
...
@@ -2975,17 +3811,50 @@ DirectDrawCreateClipper(DWORD Flags,
* Creates a DDraw clipper. See DirectDrawCreateClipper for details
*
*****************************************************************************/
static
HRESULT
WINAPI
IDirectDrawImpl_CreateClipper
(
IDirectDraw7
*
iface
,
DWORD
Flags
,
IDirectDrawClipper
**
Clipper
,
IUnknown
*
UnkOuter
)
static
HRESULT
WINAPI
ddraw7_CreateClipper
(
IDirectDraw7
*
iface
,
DWORD
Flags
,
IDirectDrawClipper
**
Clipper
,
IUnknown
*
UnkOuter
)
{
IDirectDrawImpl
*
This
=
(
IDirectDrawImpl
*
)
iface
;
TRACE
(
"(%p)->(%x,%p,%p)
\n
"
,
This
,
Flags
,
Clipper
,
UnkOuter
);
return
DirectDrawCreateClipper
(
Flags
,
Clipper
,
UnkOuter
);
}
static
HRESULT
WINAPI
ddraw4_CreateClipper
(
IDirectDraw4
*
iface
,
DWORD
flags
,
IDirectDrawClipper
**
clipper
,
IUnknown
*
outer_unknown
)
{
TRACE
(
"iface %p, flags %#x, clipper %p, outer_unknown %p.
\n
"
,
iface
,
flags
,
clipper
,
outer_unknown
);
return
ddraw7_CreateClipper
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
iface
),
flags
,
clipper
,
outer_unknown
);
}
static
HRESULT
WINAPI
ddraw3_CreateClipper
(
IDirectDraw3
*
iface
,
DWORD
flags
,
IDirectDrawClipper
**
clipper
,
IUnknown
*
outer_unknown
)
{
TRACE
(
"iface %p, flags %#x, clipper %p, outer_unknown %p.
\n
"
,
iface
,
flags
,
clipper
,
outer_unknown
);
return
ddraw7_CreateClipper
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
iface
),
flags
,
clipper
,
outer_unknown
);
}
static
HRESULT
WINAPI
ddraw2_CreateClipper
(
IDirectDraw2
*
iface
,
DWORD
flags
,
IDirectDrawClipper
**
clipper
,
IUnknown
*
outer_unknown
)
{
TRACE
(
"iface %p, flags %#x, clipper %p, outer_unknown %p.
\n
"
,
iface
,
flags
,
clipper
,
outer_unknown
);
return
ddraw7_CreateClipper
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
iface
),
flags
,
clipper
,
outer_unknown
);
}
static
HRESULT
WINAPI
ddraw1_CreateClipper
(
IDirectDraw
*
iface
,
DWORD
flags
,
IDirectDrawClipper
**
clipper
,
IUnknown
*
outer_unknown
)
{
TRACE
(
"iface %p, flags %#x, clipper %p, outer_unknown %p.
\n
"
,
iface
,
flags
,
clipper
,
outer_unknown
);
return
ddraw7_CreateClipper
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
iface
),
flags
,
clipper
,
outer_unknown
);
}
/*****************************************************************************
* IDirectDraw7::CreatePalette
*
...
...
@@ -3003,12 +3872,8 @@ IDirectDrawImpl_CreateClipper(IDirectDraw7 *iface,
* E_OUTOFMEMORY if allocating the object failed
*
*****************************************************************************/
static
HRESULT
WINAPI
IDirectDrawImpl_CreatePalette
(
IDirectDraw7
*
iface
,
DWORD
Flags
,
PALETTEENTRY
*
ColorTable
,
IDirectDrawPalette
**
Palette
,
IUnknown
*
pUnkOuter
)
static
HRESULT
WINAPI
ddraw7_CreatePalette
(
IDirectDraw7
*
iface
,
DWORD
Flags
,
PALETTEENTRY
*
ColorTable
,
IDirectDrawPalette
**
Palette
,
IUnknown
*
pUnkOuter
)
{
IDirectDrawImpl
*
This
=
(
IDirectDrawImpl
*
)
iface
;
IDirectDrawPaletteImpl
*
object
;
...
...
@@ -3058,6 +3923,87 @@ IDirectDrawImpl_CreatePalette(IDirectDraw7 *iface,
return
DD_OK
;
}
static
HRESULT
WINAPI
ddraw4_CreatePalette
(
IDirectDraw4
*
iface
,
DWORD
flags
,
PALETTEENTRY
*
entries
,
IDirectDrawPalette
**
palette
,
IUnknown
*
outer_unknown
)
{
IDirectDrawImpl
*
ddraw
=
ddraw_from_ddraw4
(
iface
);
HRESULT
hr
;
TRACE
(
"iface %p, flags %#x, entries %p, palette %p, outer_unknown %p.
\n
"
,
iface
,
flags
,
entries
,
palette
,
outer_unknown
);
hr
=
ddraw7_CreatePalette
((
IDirectDraw7
*
)
ddraw
,
flags
,
entries
,
palette
,
outer_unknown
);
if
(
SUCCEEDED
(
hr
)
&&
*
palette
)
{
IDirectDrawPaletteImpl
*
impl
=
(
IDirectDrawPaletteImpl
*
)
*
palette
;
IDirectDraw7_Release
((
IDirectDraw7
*
)
ddraw
);
IDirectDraw4_AddRef
(
iface
);
impl
->
ifaceToRelease
=
(
IUnknown
*
)
iface
;
}
return
hr
;
}
static
HRESULT
WINAPI
ddraw3_CreatePalette
(
IDirectDraw3
*
iface
,
DWORD
flags
,
PALETTEENTRY
*
entries
,
IDirectDrawPalette
**
palette
,
IUnknown
*
outer_unknown
)
{
IDirectDrawImpl
*
ddraw
=
ddraw_from_ddraw3
(
iface
);
HRESULT
hr
;
TRACE
(
"iface %p, flags %#x, entries %p, palette %p, outer_unknown %p.
\n
"
,
iface
,
flags
,
entries
,
palette
,
outer_unknown
);
hr
=
ddraw7_CreatePalette
((
IDirectDraw7
*
)
ddraw
,
flags
,
entries
,
palette
,
outer_unknown
);
if
(
SUCCEEDED
(
hr
)
&&
*
palette
)
{
IDirectDrawPaletteImpl
*
impl
=
(
IDirectDrawPaletteImpl
*
)
*
palette
;
IDirectDraw7_Release
((
IDirectDraw7
*
)
ddraw
);
IDirectDraw4_AddRef
(
iface
);
impl
->
ifaceToRelease
=
(
IUnknown
*
)
iface
;
}
return
hr
;
}
static
HRESULT
WINAPI
ddraw2_CreatePalette
(
IDirectDraw2
*
iface
,
DWORD
flags
,
PALETTEENTRY
*
entries
,
IDirectDrawPalette
**
palette
,
IUnknown
*
outer_unknown
)
{
IDirectDrawImpl
*
ddraw
=
ddraw_from_ddraw2
(
iface
);
HRESULT
hr
;
TRACE
(
"iface %p, flags %#x, entries %p, palette %p, outer_unknown %p.
\n
"
,
iface
,
flags
,
entries
,
palette
,
outer_unknown
);
hr
=
ddraw7_CreatePalette
((
IDirectDraw7
*
)
ddraw
,
flags
,
entries
,
palette
,
outer_unknown
);
if
(
SUCCEEDED
(
hr
)
&&
*
palette
)
{
IDirectDrawPaletteImpl
*
impl
=
(
IDirectDrawPaletteImpl
*
)
*
palette
;
IDirectDraw7_Release
((
IDirectDraw7
*
)
ddraw
);
impl
->
ifaceToRelease
=
NULL
;
}
return
hr
;
}
static
HRESULT
WINAPI
ddraw1_CreatePalette
(
IDirectDraw
*
iface
,
DWORD
flags
,
PALETTEENTRY
*
entries
,
IDirectDrawPalette
**
palette
,
IUnknown
*
outer_unknown
)
{
IDirectDrawImpl
*
ddraw
=
ddraw_from_ddraw1
(
iface
);
HRESULT
hr
;
TRACE
(
"iface %p, flags %#x, entries %p, palette %p, outer_unknown %p.
\n
"
,
iface
,
flags
,
entries
,
palette
,
outer_unknown
);
hr
=
ddraw7_CreatePalette
((
IDirectDraw7
*
)
ddraw
,
flags
,
entries
,
palette
,
outer_unknown
);
if
(
SUCCEEDED
(
hr
)
&&
*
palette
)
{
IDirectDrawPaletteImpl
*
impl
=
(
IDirectDrawPaletteImpl
*
)
*
palette
;
IDirectDraw7_Release
((
IDirectDraw7
*
)
ddraw
);
impl
->
ifaceToRelease
=
NULL
;
}
return
hr
;
}
/*****************************************************************************
* IDirectDraw7::DuplicateSurface
*
...
...
@@ -3075,10 +4021,8 @@ IDirectDrawImpl_CreatePalette(IDirectDraw7 *iface,
* See IDirectDraw7::CreateSurface
*
*****************************************************************************/
static
HRESULT
WINAPI
IDirectDrawImpl_DuplicateSurface
(
IDirectDraw7
*
iface
,
IDirectDrawSurface7
*
Src
,
IDirectDrawSurface7
**
Dest
)
static
HRESULT
WINAPI
ddraw7_DuplicateSurface
(
IDirectDraw7
*
iface
,
IDirectDrawSurface7
*
Src
,
IDirectDrawSurface7
**
Dest
)
{
IDirectDrawImpl
*
This
=
(
IDirectDrawImpl
*
)
iface
;
IDirectDrawSurfaceImpl
*
Surf
=
(
IDirectDrawSurfaceImpl
*
)
Src
;
...
...
@@ -3092,51 +4036,235 @@ IDirectDrawImpl_DuplicateSurface(IDirectDraw7 *iface,
NULL
);
}
static
HRESULT
WINAPI
ddraw4_DuplicateSurface
(
IDirectDraw4
*
iface
,
IDirectDrawSurface4
*
src
,
IDirectDrawSurface4
**
dst
)
{
TRACE
(
"iface %p, src %p, dst %p.
\n
"
,
iface
,
src
,
dst
);
return
ddraw7_DuplicateSurface
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
iface
),
(
IDirectDrawSurface7
*
)
src
,
(
IDirectDrawSurface7
**
)
dst
);
}
static
HRESULT
WINAPI
ddraw3_DuplicateSurface
(
IDirectDraw3
*
iface
,
IDirectDrawSurface
*
src
,
IDirectDrawSurface
**
dst
)
{
IDirectDrawSurface7
*
src7
,
*
dst7
;
HRESULT
hr
;
TRACE
(
"iface %p, src %p, dst %p.
\n
"
,
iface
,
src
,
dst
);
src7
=
src
?
(
IDirectDrawSurface7
*
)
surface_from_surface3
((
IDirectDrawSurface3
*
)
src
)
:
NULL
;
hr
=
ddraw7_DuplicateSurface
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
iface
),
src7
,
&
dst7
);
*
dst
=
dst7
?
(
IDirectDrawSurface
*
)
&
((
IDirectDrawSurfaceImpl
*
)
dst7
)
->
IDirectDrawSurface3_vtbl
:
NULL
;
return
hr
;
}
static
HRESULT
WINAPI
ddraw2_DuplicateSurface
(
IDirectDraw2
*
iface
,
IDirectDrawSurface
*
src
,
IDirectDrawSurface
**
dst
)
{
IDirectDrawSurface7
*
src7
,
*
dst7
;
HRESULT
hr
;
TRACE
(
"iface %p, src %p, dst %p.
\n
"
,
iface
,
src
,
dst
);
src7
=
src
?
(
IDirectDrawSurface7
*
)
surface_from_surface3
((
IDirectDrawSurface3
*
)
src
)
:
NULL
;
hr
=
ddraw7_DuplicateSurface
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
iface
),
src7
,
&
dst7
);
*
dst
=
dst7
?
(
IDirectDrawSurface
*
)
&
((
IDirectDrawSurfaceImpl
*
)
dst7
)
->
IDirectDrawSurface3_vtbl
:
NULL
;
return
hr
;
}
static
HRESULT
WINAPI
ddraw1_DuplicateSurface
(
IDirectDraw
*
iface
,
IDirectDrawSurface
*
src
,
IDirectDrawSurface
**
dst
)
{
IDirectDrawSurface7
*
src7
,
*
dst7
;
HRESULT
hr
;
TRACE
(
"iface %p, src %p, dst %p.
\n
"
,
iface
,
src
,
dst
);
src7
=
src
?
(
IDirectDrawSurface7
*
)
surface_from_surface3
((
IDirectDrawSurface3
*
)
src
)
:
NULL
;
hr
=
ddraw7_DuplicateSurface
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
iface
),
src7
,
&
dst7
);
*
dst
=
dst7
?
(
IDirectDrawSurface
*
)
&
((
IDirectDrawSurfaceImpl
*
)
dst7
)
->
IDirectDrawSurface3_vtbl
:
NULL
;
return
hr
;
}
/*****************************************************************************
* IDirectDraw7 VTable
*****************************************************************************/
const
IDirectDraw7Vtbl
IDirectDraw7_Vtbl
=
{
/*** IUnknown ***/
IDirectDrawImpl_QueryInterface
,
IDirectDrawImpl_AddRef
,
IDirectDrawImpl_Release
,
/*** IDirectDraw ***/
IDirectDrawImpl_Compact
,
IDirectDrawImpl_CreateClipper
,
IDirectDrawImpl_CreatePalette
,
IDirectDrawImpl_CreateSurface
,
IDirectDrawImpl_DuplicateSurface
,
IDirectDrawImpl_EnumDisplayModes
,
IDirectDrawImpl_EnumSurfaces
,
IDirectDrawImpl_FlipToGDISurface
,
IDirectDrawImpl_GetCaps
,
IDirectDrawImpl_GetDisplayMode
,
IDirectDrawImpl_GetFourCCCodes
,
IDirectDrawImpl_GetGDISurface
,
IDirectDrawImpl_GetMonitorFrequency
,
IDirectDrawImpl_GetScanLine
,
IDirectDrawImpl_GetVerticalBlankStatus
,
IDirectDrawImpl_Initialize
,
IDirectDrawImpl_RestoreDisplayMode
,
IDirectDrawImpl_SetCooperativeLevel
,
IDirectDrawImpl_SetDisplayMode
,
IDirectDrawImpl_WaitForVerticalBlank
,
/*** IDirectDraw2 ***/
IDirectDrawImpl_GetAvailableVidMem
,
/*** IDirectDraw3 ***/
IDirectDrawImpl_GetSurfaceFromDC
,
/*** IDirectDraw4 ***/
IDirectDrawImpl_RestoreAllSurfaces
,
IDirectDrawImpl_TestCooperativeLevel
,
IDirectDrawImpl_GetDeviceIdentifier
,
/*** IDirectDraw7 ***/
IDirectDrawImpl_StartModeTest
,
IDirectDrawImpl_EvaluateMode
/* IUnknown */
ddraw7_QueryInterface
,
ddraw7_AddRef
,
ddraw7_Release
,
/* IDirectDraw */
ddraw7_Compact
,
ddraw7_CreateClipper
,
ddraw7_CreatePalette
,
ddraw7_CreateSurface
,
ddraw7_DuplicateSurface
,
ddraw7_EnumDisplayModes
,
ddraw7_EnumSurfaces
,
ddraw7_FlipToGDISurface
,
ddraw7_GetCaps
,
ddraw7_GetDisplayMode
,
ddraw7_GetFourCCCodes
,
ddraw7_GetGDISurface
,
ddraw7_GetMonitorFrequency
,
ddraw7_GetScanLine
,
ddraw7_GetVerticalBlankStatus
,
ddraw7_Initialize
,
ddraw7_RestoreDisplayMode
,
ddraw7_SetCooperativeLevel
,
ddraw7_SetDisplayMode
,
ddraw7_WaitForVerticalBlank
,
/* IDirectDraw2 */
ddraw7_GetAvailableVidMem
,
/* IDirectDraw3 */
ddraw7_GetSurfaceFromDC
,
/* IDirectDraw4 */
ddraw7_RestoreAllSurfaces
,
ddraw7_TestCooperativeLevel
,
ddraw7_GetDeviceIdentifier
,
/* IDirectDraw7 */
ddraw7_StartModeTest
,
ddraw7_EvaluateMode
};
const
struct
IDirectDraw4Vtbl
IDirectDraw4_Vtbl
=
{
/* IUnknown */
ddraw4_QueryInterface
,
ddraw4_AddRef
,
ddraw4_Release
,
/* IDirectDraw */
ddraw4_Compact
,
ddraw4_CreateClipper
,
ddraw4_CreatePalette
,
ddraw4_CreateSurface
,
ddraw4_DuplicateSurface
,
ddraw4_EnumDisplayModes
,
ddraw4_EnumSurfaces
,
ddraw4_FlipToGDISurface
,
ddraw4_GetCaps
,
ddraw4_GetDisplayMode
,
ddraw4_GetFourCCCodes
,
ddraw4_GetGDISurface
,
ddraw4_GetMonitorFrequency
,
ddraw4_GetScanLine
,
ddraw4_GetVerticalBlankStatus
,
ddraw4_Initialize
,
ddraw4_RestoreDisplayMode
,
ddraw4_SetCooperativeLevel
,
ddraw4_SetDisplayMode
,
ddraw4_WaitForVerticalBlank
,
/* IDirectDraw2 */
ddraw4_GetAvailableVidMem
,
/* IDirectDraw3 */
ddraw4_GetSurfaceFromDC
,
/* IDirectDraw4 */
ddraw4_RestoreAllSurfaces
,
ddraw4_TestCooperativeLevel
,
ddraw4_GetDeviceIdentifier
,
};
const
struct
IDirectDraw3Vtbl
IDirectDraw3_Vtbl
=
{
/* IUnknown */
ddraw3_QueryInterface
,
ddraw3_AddRef
,
ddraw3_Release
,
/* IDirectDraw */
ddraw3_Compact
,
ddraw3_CreateClipper
,
ddraw3_CreatePalette
,
ddraw3_CreateSurface
,
ddraw3_DuplicateSurface
,
ddraw3_EnumDisplayModes
,
ddraw3_EnumSurfaces
,
ddraw3_FlipToGDISurface
,
ddraw3_GetCaps
,
ddraw3_GetDisplayMode
,
ddraw3_GetFourCCCodes
,
ddraw3_GetGDISurface
,
ddraw3_GetMonitorFrequency
,
ddraw3_GetScanLine
,
ddraw3_GetVerticalBlankStatus
,
ddraw3_Initialize
,
ddraw3_RestoreDisplayMode
,
ddraw3_SetCooperativeLevel
,
ddraw3_SetDisplayMode
,
ddraw3_WaitForVerticalBlank
,
/* IDirectDraw2 */
ddraw3_GetAvailableVidMem
,
/* IDirectDraw3 */
ddraw3_GetSurfaceFromDC
,
};
const
struct
IDirectDraw2Vtbl
IDirectDraw2_Vtbl
=
{
/* IUnknown */
ddraw2_QueryInterface
,
ddraw2_AddRef
,
ddraw2_Release
,
/* IDirectDraw */
ddraw2_Compact
,
ddraw2_CreateClipper
,
ddraw2_CreatePalette
,
ddraw2_CreateSurface
,
ddraw2_DuplicateSurface
,
ddraw2_EnumDisplayModes
,
ddraw2_EnumSurfaces
,
ddraw2_FlipToGDISurface
,
ddraw2_GetCaps
,
ddraw2_GetDisplayMode
,
ddraw2_GetFourCCCodes
,
ddraw2_GetGDISurface
,
ddraw2_GetMonitorFrequency
,
ddraw2_GetScanLine
,
ddraw2_GetVerticalBlankStatus
,
ddraw2_Initialize
,
ddraw2_RestoreDisplayMode
,
ddraw2_SetCooperativeLevel
,
ddraw2_SetDisplayMode
,
ddraw2_WaitForVerticalBlank
,
/* IDirectDraw2 */
ddraw2_GetAvailableVidMem
,
};
const
struct
IDirectDrawVtbl
IDirectDraw1_Vtbl
=
{
/* IUnknown */
ddraw1_QueryInterface
,
ddraw1_AddRef
,
ddraw1_Release
,
/* IDirectDraw */
ddraw1_Compact
,
ddraw1_CreateClipper
,
ddraw1_CreatePalette
,
ddraw1_CreateSurface
,
ddraw1_DuplicateSurface
,
ddraw1_EnumDisplayModes
,
ddraw1_EnumSurfaces
,
ddraw1_FlipToGDISurface
,
ddraw1_GetCaps
,
ddraw1_GetDisplayMode
,
ddraw1_GetFourCCCodes
,
ddraw1_GetGDISurface
,
ddraw1_GetMonitorFrequency
,
ddraw1_GetScanLine
,
ddraw1_GetVerticalBlankStatus
,
ddraw1_Initialize
,
ddraw1_RestoreDisplayMode
,
ddraw1_SetCooperativeLevel
,
ddraw1_SetDisplayMode
,
ddraw1_WaitForVerticalBlank
,
};
/*****************************************************************************
*
IDirectDrawImpl_FindD
ecl
*
ddraw_find_d
ecl
*
* Finds the WineD3D vertex declaration for a specific fvf, and creates one
* if none was found.
...
...
@@ -3155,9 +4283,7 @@ const IDirectDraw7Vtbl IDirectDraw7_Vtbl =
* fvf otherwise.
*
*****************************************************************************/
IWineD3DVertexDeclaration
*
IDirectDrawImpl_FindDecl
(
IDirectDrawImpl
*
This
,
DWORD
fvf
)
IWineD3DVertexDeclaration
*
ddraw_find_decl
(
IDirectDrawImpl
*
This
,
DWORD
fvf
)
{
HRESULT
hr
;
IWineD3DVertexDeclaration
*
pDecl
=
NULL
;
...
...
@@ -3218,19 +4344,19 @@ static inline struct IDirectDrawImpl *ddraw_from_device_parent(IWineD3DDevicePar
static
HRESULT
STDMETHODCALLTYPE
device_parent_QueryInterface
(
IWineD3DDeviceParent
*
iface
,
REFIID
riid
,
void
**
object
)
{
struct
IDirectDrawImpl
*
This
=
ddraw_from_device_parent
(
iface
);
return
IDirectDrawImpl
_QueryInterface
((
IDirectDraw7
*
)
This
,
riid
,
object
);
return
ddraw7
_QueryInterface
((
IDirectDraw7
*
)
This
,
riid
,
object
);
}
static
ULONG
STDMETHODCALLTYPE
device_parent_AddRef
(
IWineD3DDeviceParent
*
iface
)
{
struct
IDirectDrawImpl
*
This
=
ddraw_from_device_parent
(
iface
);
return
IDirectDrawImpl
_AddRef
((
IDirectDraw7
*
)
This
);
return
ddraw7
_AddRef
((
IDirectDraw7
*
)
This
);
}
static
ULONG
STDMETHODCALLTYPE
device_parent_Release
(
IWineD3DDeviceParent
*
iface
)
{
struct
IDirectDrawImpl
*
This
=
ddraw_from_device_parent
(
iface
);
return
IDirectDrawImpl
_Release
((
IDirectDraw7
*
)
This
);
return
ddraw7
_Release
((
IDirectDraw7
*
)
This
);
}
/* IWineD3DDeviceParent methods */
...
...
dlls/ddraw/ddraw_private.h
View file @
6fb9ee0e
...
...
@@ -188,10 +188,9 @@ typedef struct EnumSurfacesCBS
/* Utility functions */
void
DDRAW_Convert_DDSCAPS_1_To_2
(
const
DDSCAPS
*
pIn
,
DDSCAPS2
*
pOut
)
DECLSPEC_HIDDEN
;
void
DDRAW_Convert_DDDEVICEIDENTIFIER_2_To_1
(
const
DDDEVICEIDENTIFIER2
*
pIn
,
DDDEVICEIDENTIFIER
*
pOut
)
DECLSPEC_HIDDEN
;
void
IDirectDrawImpl_Destroy
(
IDirectDrawImpl
*
This
)
DECLSPEC_HIDDEN
;
HRESULT
WINAPI
IDirectDrawImpl_RecreateSurfacesCallback
(
IDirectDrawSurface7
*
surf
,
HRESULT
WINAPI
ddraw_recreate_surfaces_cb
(
IDirectDrawSurface7
*
surf
,
DDSURFACEDESC2
*
desc
,
void
*
Context
)
DECLSPEC_HIDDEN
;
IWineD3DVertexDeclaration
*
IDirectDrawImpl_FindD
ecl
(
IDirectDrawImpl
*
This
,
DWORD
fvf
)
DECLSPEC_HIDDEN
;
IWineD3DVertexDeclaration
*
ddraw_find_d
ecl
(
IDirectDrawImpl
*
This
,
DWORD
fvf
)
DECLSPEC_HIDDEN
;
static
inline
IDirectDrawImpl
*
ddraw_from_d3d1
(
IDirect3D
*
iface
)
{
...
...
@@ -213,26 +212,6 @@ static inline IDirectDrawImpl *ddraw_from_d3d7(IDirect3D7 *iface)
return
(
IDirectDrawImpl
*
)((
char
*
)
iface
-
FIELD_OFFSET
(
IDirectDrawImpl
,
IDirect3D7_vtbl
));
}
static
inline
IDirectDrawImpl
*
ddraw_from_ddraw1
(
IDirectDraw
*
iface
)
{
return
(
IDirectDrawImpl
*
)((
char
*
)
iface
-
FIELD_OFFSET
(
IDirectDrawImpl
,
IDirectDraw_vtbl
));
}
static
inline
IDirectDrawImpl
*
ddraw_from_ddraw2
(
IDirectDraw2
*
iface
)
{
return
(
IDirectDrawImpl
*
)((
char
*
)
iface
-
FIELD_OFFSET
(
IDirectDrawImpl
,
IDirectDraw2_vtbl
));
}
static
inline
IDirectDrawImpl
*
ddraw_from_ddraw3
(
IDirectDraw3
*
iface
)
{
return
(
IDirectDrawImpl
*
)((
char
*
)
iface
-
FIELD_OFFSET
(
IDirectDrawImpl
,
IDirectDraw3_vtbl
));
}
static
inline
IDirectDrawImpl
*
ddraw_from_ddraw4
(
IDirectDraw4
*
iface
)
{
return
(
IDirectDrawImpl
*
)((
char
*
)
iface
-
FIELD_OFFSET
(
IDirectDrawImpl
,
IDirectDraw4_vtbl
));
}
/* The default surface type */
extern
WINED3DSURFTYPE
DefaultSurfaceType
DECLSPEC_HIDDEN
;
...
...
dlls/ddraw/ddraw_thunks.c
deleted
100644 → 0
View file @
2e977463
/* Direct Draw Thunks and old vtables
* Copyright 2000 TransGaming Technologies Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
#include "wine/port.h"
#include <assert.h>
#include <stdarg.h>
#include <string.h>
#include <stdlib.h>
#define COBJMACROS
#define NONAMELESSUNION
#include "windef.h"
#include "winbase.h"
#include "winerror.h"
#include "wingdi.h"
#include "wine/exception.h"
#include "ddraw.h"
#include "d3d.h"
#include "ddraw_private.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL
(
ddraw_thunk
);
WINE_DECLARE_DEBUG_CHANNEL
(
ddraw
);
static
HRESULT
WINAPI
IDirectDrawImpl_QueryInterface
(
LPDIRECTDRAW
This
,
REFIID
iid
,
LPVOID
*
ppObj
)
{
return
IDirectDraw7_QueryInterface
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
This
),
iid
,
ppObj
);
}
static
HRESULT
WINAPI
IDirectDraw2Impl_QueryInterface
(
LPDIRECTDRAW2
This
,
REFIID
iid
,
LPVOID
*
ppObj
)
{
return
IDirectDraw7_QueryInterface
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
This
),
iid
,
ppObj
);
}
static
HRESULT
WINAPI
IDirectDraw3Impl_QueryInterface
(
LPDIRECTDRAW3
This
,
REFIID
iid
,
LPVOID
*
ppObj
)
{
return
IDirectDraw7_QueryInterface
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
This
),
iid
,
ppObj
);
}
static
HRESULT
WINAPI
IDirectDraw4Impl_QueryInterface
(
LPDIRECTDRAW4
This
,
REFIID
iid
,
LPVOID
*
ppObj
)
{
return
IDirectDraw7_QueryInterface
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
This
),
iid
,
ppObj
);
}
static
ULONG
WINAPI
IDirectDrawImpl_AddRef
(
LPDIRECTDRAW
iface
)
{
IDirectDrawImpl
*
This
=
ddraw_from_ddraw1
(
iface
);
ULONG
ref
=
InterlockedIncrement
(
&
This
->
ref1
);
TRACE
(
"(%p) : incrementing IDirectDraw refcount from %u.
\n
"
,
This
,
ref
-
1
);
if
(
ref
==
1
)
InterlockedIncrement
(
&
This
->
numIfaces
);
return
ref
;
}
static
ULONG
WINAPI
IDirectDraw2Impl_AddRef
(
LPDIRECTDRAW2
iface
)
{
IDirectDrawImpl
*
This
=
ddraw_from_ddraw2
(
iface
);
ULONG
ref
=
InterlockedIncrement
(
&
This
->
ref2
);
TRACE
(
"(%p) : incrementing IDirectDraw2 refcount from %u.
\n
"
,
This
,
ref
-
1
);
if
(
ref
==
1
)
InterlockedIncrement
(
&
This
->
numIfaces
);
return
ref
;
}
static
ULONG
WINAPI
IDirectDraw3Impl_AddRef
(
LPDIRECTDRAW3
iface
)
{
IDirectDrawImpl
*
This
=
ddraw_from_ddraw3
(
iface
);
ULONG
ref
=
InterlockedIncrement
(
&
This
->
ref3
);
TRACE
(
"(%p) : incrementing IDirectDraw3 refcount from %u.
\n
"
,
This
,
ref
-
1
);
if
(
ref
==
1
)
InterlockedIncrement
(
&
This
->
numIfaces
);
return
ref
;
}
static
ULONG
WINAPI
IDirectDraw4Impl_AddRef
(
LPDIRECTDRAW4
iface
)
{
IDirectDrawImpl
*
This
=
ddraw_from_ddraw4
(
iface
);
ULONG
ref
=
InterlockedIncrement
(
&
This
->
ref4
);
TRACE
(
"(%p) : incrementing IDirectDraw4 refcount from %u.
\n
"
,
This
,
ref
-
1
);
if
(
ref
==
1
)
InterlockedIncrement
(
&
This
->
numIfaces
);
return
ref
;
}
static
ULONG
WINAPI
IDirectDrawImpl_Release
(
LPDIRECTDRAW
iface
)
{
IDirectDrawImpl
*
This
=
ddraw_from_ddraw1
(
iface
);
ULONG
ref
=
InterlockedDecrement
(
&
This
->
ref1
);
TRACE_
(
ddraw
)(
"(%p)->() decrementing IDirectDraw refcount from %u.
\n
"
,
This
,
ref
+
1
);
if
(
ref
==
0
)
{
ULONG
ifacecount
=
InterlockedDecrement
(
&
This
->
numIfaces
);
if
(
ifacecount
==
0
)
IDirectDrawImpl_Destroy
(
This
);
}
return
ref
;
}
static
ULONG
WINAPI
IDirectDraw2Impl_Release
(
LPDIRECTDRAW2
iface
)
{
IDirectDrawImpl
*
This
=
ddraw_from_ddraw2
(
iface
);
ULONG
ref
=
InterlockedDecrement
(
&
This
->
ref2
);
TRACE_
(
ddraw
)(
"(%p)->() decrementing IDirectDraw2 refcount from %u.
\n
"
,
This
,
ref
+
1
);
if
(
ref
==
0
)
{
ULONG
ifacecount
=
InterlockedDecrement
(
&
This
->
numIfaces
);
if
(
ifacecount
==
0
)
IDirectDrawImpl_Destroy
(
This
);
}
return
ref
;
}
static
ULONG
WINAPI
IDirectDraw3Impl_Release
(
LPDIRECTDRAW3
iface
)
{
IDirectDrawImpl
*
This
=
ddraw_from_ddraw3
(
iface
);
ULONG
ref
=
InterlockedDecrement
(
&
This
->
ref3
);
TRACE_
(
ddraw
)(
"(%p)->() decrementing IDirectDraw3 refcount from %u.
\n
"
,
This
,
ref
+
1
);
if
(
ref
==
0
)
{
ULONG
ifacecount
=
InterlockedDecrement
(
&
This
->
numIfaces
);
if
(
ifacecount
==
0
)
IDirectDrawImpl_Destroy
(
This
);
}
return
ref
;
}
static
ULONG
WINAPI
IDirectDraw4Impl_Release
(
LPDIRECTDRAW4
iface
)
{
IDirectDrawImpl
*
This
=
ddraw_from_ddraw4
(
iface
);
ULONG
ref
=
InterlockedDecrement
(
&
This
->
ref4
);
TRACE_
(
ddraw
)(
"(%p)->() decrementing IDirectDraw4 refcount from %u.
\n
"
,
This
,
ref
+
1
);
if
(
ref
==
0
)
{
ULONG
ifacecount
=
InterlockedDecrement
(
&
This
->
numIfaces
);
if
(
ifacecount
==
0
)
IDirectDrawImpl_Destroy
(
This
);
}
return
ref
;
}
static
HRESULT
WINAPI
IDirectDrawImpl_Compact
(
LPDIRECTDRAW
This
)
{
return
IDirectDraw7_Compact
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
This
));
}
static
HRESULT
WINAPI
IDirectDraw2Impl_Compact
(
LPDIRECTDRAW2
This
)
{
return
IDirectDraw7_Compact
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
This
));
}
static
HRESULT
WINAPI
IDirectDraw3Impl_Compact
(
LPDIRECTDRAW3
This
)
{
return
IDirectDraw7_Compact
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
This
));
}
static
HRESULT
WINAPI
IDirectDraw4Impl_Compact
(
LPDIRECTDRAW4
This
)
{
return
IDirectDraw7_Compact
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
This
));
}
static
HRESULT
WINAPI
IDirectDrawImpl_CreateClipper
(
LPDIRECTDRAW
This
,
DWORD
dwFlags
,
LPDIRECTDRAWCLIPPER
*
ppClipper
,
IUnknown
*
pUnkOuter
)
{
return
IDirectDraw7_CreateClipper
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
This
),
dwFlags
,
ppClipper
,
pUnkOuter
);
}
static
HRESULT
WINAPI
IDirectDraw2Impl_CreateClipper
(
LPDIRECTDRAW2
This
,
DWORD
dwFlags
,
LPDIRECTDRAWCLIPPER
*
ppClipper
,
IUnknown
*
pUnkOuter
)
{
return
IDirectDraw7_CreateClipper
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
This
),
dwFlags
,
ppClipper
,
pUnkOuter
);
}
static
HRESULT
WINAPI
IDirectDraw3Impl_CreateClipper
(
LPDIRECTDRAW3
This
,
DWORD
dwFlags
,
LPDIRECTDRAWCLIPPER
*
ppClipper
,
IUnknown
*
pUnkOuter
)
{
return
IDirectDraw7_CreateClipper
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
This
),
dwFlags
,
ppClipper
,
pUnkOuter
);
}
static
HRESULT
WINAPI
IDirectDraw4Impl_CreateClipper
(
LPDIRECTDRAW4
This
,
DWORD
dwFlags
,
LPDIRECTDRAWCLIPPER
*
ppClipper
,
IUnknown
*
pUnkOuter
)
{
return
IDirectDraw7_CreateClipper
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
This
),
dwFlags
,
ppClipper
,
pUnkOuter
);
}
static
HRESULT
WINAPI
IDirectDrawImpl_CreatePalette
(
LPDIRECTDRAW
This
,
DWORD
dwFlags
,
LPPALETTEENTRY
pEntries
,
LPDIRECTDRAWPALETTE
*
ppPalette
,
IUnknown
*
pUnkOuter
)
{
HRESULT
hr
;
hr
=
IDirectDraw7_CreatePalette
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
This
),
dwFlags
,
pEntries
,
ppPalette
,
pUnkOuter
);
if
(
SUCCEEDED
(
hr
)
&&
*
ppPalette
)
{
IDirectDrawPaletteImpl
*
impl
=
(
IDirectDrawPaletteImpl
*
)
*
ppPalette
;
IDirectDraw7_Release
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
This
));
impl
->
ifaceToRelease
=
NULL
;
}
return
hr
;
}
static
HRESULT
WINAPI
IDirectDraw2Impl_CreatePalette
(
LPDIRECTDRAW2
This
,
DWORD
dwFlags
,
LPPALETTEENTRY
pEntries
,
LPDIRECTDRAWPALETTE
*
ppPalette
,
IUnknown
*
pUnkOuter
)
{
HRESULT
hr
;
hr
=
IDirectDraw7_CreatePalette
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
This
),
dwFlags
,
pEntries
,
ppPalette
,
pUnkOuter
);
if
(
SUCCEEDED
(
hr
)
&&
*
ppPalette
)
{
IDirectDrawPaletteImpl
*
impl
=
(
IDirectDrawPaletteImpl
*
)
*
ppPalette
;
IDirectDraw7_Release
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
This
));
impl
->
ifaceToRelease
=
NULL
;
}
return
hr
;
}
static
HRESULT
WINAPI
IDirectDraw3Impl_CreatePalette
(
LPDIRECTDRAW3
This
,
DWORD
dwFlags
,
LPPALETTEENTRY
pEntries
,
LPDIRECTDRAWPALETTE
*
ppPalette
,
IUnknown
*
pUnkOuter
)
{
HRESULT
hr
;
hr
=
IDirectDraw7_CreatePalette
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
This
),
dwFlags
,
pEntries
,
ppPalette
,
pUnkOuter
);
if
(
SUCCEEDED
(
hr
)
&&
*
ppPalette
)
{
IDirectDrawPaletteImpl
*
impl
=
(
IDirectDrawPaletteImpl
*
)
*
ppPalette
;
IDirectDraw7_Release
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
This
));
IDirectDraw4_AddRef
(
This
);
impl
->
ifaceToRelease
=
(
IUnknown
*
)
This
;
}
return
hr
;
}
static
HRESULT
WINAPI
IDirectDraw4Impl_CreatePalette
(
LPDIRECTDRAW4
This
,
DWORD
dwFlags
,
LPPALETTEENTRY
pEntries
,
LPDIRECTDRAWPALETTE
*
ppPalette
,
IUnknown
*
pUnkOuter
)
{
HRESULT
hr
;
hr
=
IDirectDraw7_CreatePalette
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
This
),
dwFlags
,
pEntries
,
ppPalette
,
pUnkOuter
);
if
(
SUCCEEDED
(
hr
)
&&
*
ppPalette
)
{
IDirectDrawPaletteImpl
*
impl
=
(
IDirectDrawPaletteImpl
*
)
*
ppPalette
;
IDirectDraw7_Release
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
This
));
IDirectDraw4_AddRef
(
This
);
impl
->
ifaceToRelease
=
(
IUnknown
*
)
This
;
}
return
hr
;
}
/* Must set all attached surfaces (e.g. mipmaps) versions as well */
static
void
set_surf_version
(
IDirectDrawSurfaceImpl
*
surf
,
int
version
)
{
int
i
;
TRACE
(
"%p->version(%d) = %d
\n
"
,
surf
,
surf
->
version
,
version
);
surf
->
version
=
version
;
for
(
i
=
0
;
i
<
MAX_COMPLEX_ATTACHED
;
i
++
)
{
if
(
!
surf
->
complex_array
[
i
])
break
;
set_surf_version
(
surf
->
complex_array
[
i
],
version
);
}
while
(
(
surf
=
surf
->
next_attached
)
)
{
set_surf_version
(
surf
,
version
);
}
}
static
HRESULT
WINAPI
IDirectDrawImpl_CreateSurface
(
LPDIRECTDRAW
This
,
LPDDSURFACEDESC
pSDesc
,
LPDIRECTDRAWSURFACE
*
ppSurface
,
IUnknown
*
pUnkOuter
)
{
LPDIRECTDRAWSURFACE7
pSurface7
;
IDirectDrawSurfaceImpl
*
impl
;
HRESULT
hr
;
/* Remove front buffer flag, this causes failure in v7, and its added to normal
* primaries anyway
*/
pSDesc
->
ddsCaps
.
dwCaps
&=
~
DDSCAPS_FRONTBUFFER
;
/* the LPDDSURFACEDESC -> LPDDSURFACEDESC2 conversion should be ok,
* since the data layout is the same */
hr
=
IDirectDraw7_CreateSurface
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
This
),
(
LPDDSURFACEDESC2
)
pSDesc
,
&
pSurface7
,
pUnkOuter
);
if
(
FAILED
(
hr
))
{
*
ppSurface
=
NULL
;
return
hr
;
}
impl
=
(
IDirectDrawSurfaceImpl
*
)
pSurface7
;
*
ppSurface
=
(
IDirectDrawSurface
*
)
&
impl
->
IDirectDrawSurface3_vtbl
;
set_surf_version
(
impl
,
1
);
IDirectDraw7_Release
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
This
));
impl
->
ifaceToRelease
=
NULL
;
return
hr
;
}
static
HRESULT
WINAPI
IDirectDraw2Impl_CreateSurface
(
LPDIRECTDRAW2
This
,
LPDDSURFACEDESC
pSDesc
,
LPDIRECTDRAWSURFACE
*
ppSurface
,
IUnknown
*
pUnkOuter
)
{
LPDIRECTDRAWSURFACE7
pSurface7
;
IDirectDrawSurfaceImpl
*
impl
;
HRESULT
hr
;
hr
=
IDirectDraw7_CreateSurface
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
This
),
(
LPDDSURFACEDESC2
)
pSDesc
,
&
pSurface7
,
pUnkOuter
);
if
(
FAILED
(
hr
))
{
*
ppSurface
=
NULL
;
return
hr
;
}
impl
=
(
IDirectDrawSurfaceImpl
*
)
pSurface7
;
*
ppSurface
=
(
IDirectDrawSurface
*
)
&
impl
->
IDirectDrawSurface3_vtbl
;
set_surf_version
(
impl
,
2
);
IDirectDraw7_Release
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
This
));
impl
->
ifaceToRelease
=
NULL
;
return
hr
;
}
static
HRESULT
WINAPI
IDirectDraw3Impl_CreateSurface
(
LPDIRECTDRAW3
This
,
LPDDSURFACEDESC
pSDesc
,
LPDIRECTDRAWSURFACE
*
ppSurface
,
IUnknown
*
pUnkOuter
)
{
LPDIRECTDRAWSURFACE7
pSurface7
;
IDirectDrawSurfaceImpl
*
impl
;
HRESULT
hr
;
hr
=
IDirectDraw7_CreateSurface
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
This
),
(
LPDDSURFACEDESC2
)
pSDesc
,
&
pSurface7
,
pUnkOuter
);
if
(
FAILED
(
hr
))
{
*
ppSurface
=
NULL
;
return
hr
;
}
impl
=
(
IDirectDrawSurfaceImpl
*
)
pSurface7
;
*
ppSurface
=
(
IDirectDrawSurface
*
)
&
impl
->
IDirectDrawSurface3_vtbl
;
set_surf_version
(
impl
,
3
);
IDirectDraw7_Release
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
This
));
IDirectDraw3_AddRef
(
This
);
impl
->
ifaceToRelease
=
(
IUnknown
*
)
This
;
return
hr
;
}
static
HRESULT
WINAPI
IDirectDraw4Impl_CreateSurface
(
LPDIRECTDRAW4
This
,
LPDDSURFACEDESC2
pSDesc
,
LPDIRECTDRAWSURFACE4
*
ppSurface
,
IUnknown
*
pUnkOuter
)
{
HRESULT
hr
;
IDirectDrawSurfaceImpl
*
impl
;
hr
=
IDirectDraw7_CreateSurface
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
This
),
pSDesc
,
(
LPDIRECTDRAWSURFACE7
*
)
ppSurface
,
pUnkOuter
);
impl
=
(
IDirectDrawSurfaceImpl
*
)
*
ppSurface
;
if
(
SUCCEEDED
(
hr
)
&&
impl
)
{
set_surf_version
(
impl
,
4
);
IDirectDraw7_Release
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
This
));
IDirectDraw4_AddRef
(
This
);
impl
->
ifaceToRelease
=
(
IUnknown
*
)
This
;
}
return
hr
;
}
static
HRESULT
WINAPI
IDirectDrawImpl_DuplicateSurface
(
LPDIRECTDRAW
This
,
LPDIRECTDRAWSURFACE
pSrc
,
LPDIRECTDRAWSURFACE
*
ppDst
)
{
LPDIRECTDRAWSURFACE7
pDst7
;
HRESULT
hr
;
hr
=
IDirectDraw7_DuplicateSurface
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
This
),
pSrc
?
(
IDirectDrawSurface7
*
)
surface_from_surface3
((
IDirectDrawSurface3
*
)
pSrc
)
:
NULL
,
&
pDst7
);
/* This coercion is safe, since the IDirectDrawSurface3 vtable has the
* IDirectDrawSurface vtable layout at the beginning */
*
ppDst
=
pDst7
?
(
IDirectDrawSurface
*
)
&
((
IDirectDrawSurfaceImpl
*
)
pDst7
)
->
IDirectDrawSurface3_vtbl
:
NULL
;
return
hr
;
}
static
HRESULT
WINAPI
IDirectDraw2Impl_DuplicateSurface
(
LPDIRECTDRAW2
This
,
LPDIRECTDRAWSURFACE
pSrc
,
LPDIRECTDRAWSURFACE
*
ppDst
)
{
LPDIRECTDRAWSURFACE7
pDst7
;
HRESULT
hr
;
hr
=
IDirectDraw7_DuplicateSurface
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
This
),
pSrc
?
(
IDirectDrawSurface7
*
)
surface_from_surface3
((
IDirectDrawSurface3
*
)
pSrc
)
:
NULL
,
&
pDst7
);
/* This coercion is safe, since the IDirectDrawSurface3 vtable has the
* IDirectDrawSurface vtable layout at the beginning */
*
ppDst
=
pDst7
?
(
IDirectDrawSurface
*
)
&
((
IDirectDrawSurfaceImpl
*
)
pDst7
)
->
IDirectDrawSurface3_vtbl
:
NULL
;
return
hr
;
}
static
HRESULT
WINAPI
IDirectDraw3Impl_DuplicateSurface
(
LPDIRECTDRAW3
This
,
LPDIRECTDRAWSURFACE
pSrc
,
LPDIRECTDRAWSURFACE
*
ppDst
)
{
LPDIRECTDRAWSURFACE7
pDst7
;
HRESULT
hr
;
hr
=
IDirectDraw7_DuplicateSurface
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
This
),
pSrc
?
(
IDirectDrawSurface7
*
)
surface_from_surface3
((
IDirectDrawSurface3
*
)
pSrc
)
:
NULL
,
&
pDst7
);
/* This coercion is safe, since the IDirectDrawSurface3 vtable has the
* IDirectDrawSurface vtable layout at the beginning */
*
ppDst
=
pDst7
?
(
IDirectDrawSurface
*
)
&
((
IDirectDrawSurfaceImpl
*
)
pDst7
)
->
IDirectDrawSurface3_vtbl
:
NULL
;
return
hr
;
}
static
HRESULT
WINAPI
IDirectDraw4Impl_DuplicateSurface
(
LPDIRECTDRAW4
This
,
LPDIRECTDRAWSURFACE4
pSrc
,
LPDIRECTDRAWSURFACE4
*
ppDst
)
{
return
IDirectDraw7_DuplicateSurface
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
This
),
(
LPDIRECTDRAWSURFACE7
)
pSrc
,
(
LPDIRECTDRAWSURFACE7
*
)
ppDst
);
}
struct
displaymodescallback_context
{
LPDDENUMMODESCALLBACK
func
;
LPVOID
context
;
};
static
HRESULT
CALLBACK
EnumDisplayModesCallbackThunk
(
LPDDSURFACEDESC2
pDDSD2
,
LPVOID
context
)
{
DDSURFACEDESC
DDSD
;
struct
displaymodescallback_context
*
cbcontext
=
context
;
memcpy
(
&
DDSD
,
pDDSD2
,
sizeof
(
DDSD
));
DDSD
.
dwSize
=
sizeof
(
DDSD
);
return
cbcontext
->
func
(
&
DDSD
,
cbcontext
->
context
);
}
static
HRESULT
WINAPI
IDirectDrawImpl_EnumDisplayModes
(
LPDIRECTDRAW
This
,
DWORD
dwFlags
,
LPDDSURFACEDESC
pDDSD
,
LPVOID
context
,
LPDDENUMMODESCALLBACK
cb
)
{
struct
displaymodescallback_context
cbcontext
;
cbcontext
.
func
=
cb
;
cbcontext
.
context
=
context
;
return
IDirectDraw7_EnumDisplayModes
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
This
),
dwFlags
,
(
LPDDSURFACEDESC2
)
pDDSD
,
&
cbcontext
,
EnumDisplayModesCallbackThunk
);
}
static
HRESULT
WINAPI
IDirectDraw2Impl_EnumDisplayModes
(
LPDIRECTDRAW2
This
,
DWORD
dwFlags
,
LPDDSURFACEDESC
pDDSD
,
LPVOID
context
,
LPDDENUMMODESCALLBACK
cb
)
{
struct
displaymodescallback_context
cbcontext
;
cbcontext
.
func
=
cb
;
cbcontext
.
context
=
context
;
return
IDirectDraw7_EnumDisplayModes
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
This
),
dwFlags
,
(
LPDDSURFACEDESC2
)
pDDSD
,
&
cbcontext
,
EnumDisplayModesCallbackThunk
);
}
static
HRESULT
WINAPI
IDirectDraw3Impl_EnumDisplayModes
(
LPDIRECTDRAW3
This
,
DWORD
dwFlags
,
LPDDSURFACEDESC
pDDSD
,
LPVOID
context
,
LPDDENUMMODESCALLBACK
cb
)
{
struct
displaymodescallback_context
cbcontext
;
cbcontext
.
func
=
cb
;
cbcontext
.
context
=
context
;
return
IDirectDraw7_EnumDisplayModes
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
This
),
dwFlags
,
(
LPDDSURFACEDESC2
)
pDDSD
,
&
cbcontext
,
EnumDisplayModesCallbackThunk
);
}
static
HRESULT
WINAPI
IDirectDraw4Impl_EnumDisplayModes
(
LPDIRECTDRAW4
This
,
DWORD
dwFlags
,
LPDDSURFACEDESC2
pDDSD
,
LPVOID
context
,
LPDDENUMMODESCALLBACK2
cb
)
{
return
IDirectDraw7_EnumDisplayModes
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
This
),
dwFlags
,
pDDSD
,
context
,
cb
);
}
struct
surfacescallback_context
{
LPDDENUMSURFACESCALLBACK
func
;
LPVOID
context
;
};
static
HRESULT
CALLBACK
EnumSurfacesCallbackThunk
(
LPDIRECTDRAWSURFACE7
pSurf
,
LPDDSURFACEDESC2
pDDSD
,
LPVOID
context
)
{
struct
surfacescallback_context
*
cbcontext
=
context
;
/* This coercion is safe, since the IDirectDrawSurface3 vtable has the
* IDirectDrawSurface vtable layout at the beginning */
return
cbcontext
->
func
((
IDirectDrawSurface
*
)
&
((
IDirectDrawSurfaceImpl
*
)
pSurf
)
->
IDirectDrawSurface3_vtbl
,
(
DDSURFACEDESC
*
)
pDDSD
,
cbcontext
->
context
);
}
static
HRESULT
WINAPI
IDirectDrawImpl_EnumSurfaces
(
LPDIRECTDRAW
This
,
DWORD
dwFlags
,
LPDDSURFACEDESC
pDDSD
,
LPVOID
context
,
LPDDENUMSURFACESCALLBACK
cb
)
{
struct
surfacescallback_context
cbcontext
;
cbcontext
.
func
=
cb
;
cbcontext
.
context
=
context
;
return
IDirectDraw7_EnumSurfaces
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
This
),
dwFlags
,
(
LPDDSURFACEDESC2
)
pDDSD
,
&
cbcontext
,
EnumSurfacesCallbackThunk
);
}
static
HRESULT
WINAPI
IDirectDraw2Impl_EnumSurfaces
(
LPDIRECTDRAW2
This
,
DWORD
dwFlags
,
LPDDSURFACEDESC
pDDSD
,
LPVOID
context
,
LPDDENUMSURFACESCALLBACK
cb
)
{
struct
surfacescallback_context
cbcontext
;
cbcontext
.
func
=
cb
;
cbcontext
.
context
=
context
;
return
IDirectDraw7_EnumSurfaces
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
This
),
dwFlags
,
(
LPDDSURFACEDESC2
)
pDDSD
,
&
cbcontext
,
EnumSurfacesCallbackThunk
);
}
static
HRESULT
WINAPI
IDirectDraw3Impl_EnumSurfaces
(
LPDIRECTDRAW3
This
,
DWORD
dwFlags
,
LPDDSURFACEDESC
pDDSD
,
LPVOID
context
,
LPDDENUMSURFACESCALLBACK
cb
)
{
struct
surfacescallback_context
cbcontext
;
cbcontext
.
func
=
cb
;
cbcontext
.
context
=
context
;
return
IDirectDraw7_EnumSurfaces
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
This
),
dwFlags
,
(
LPDDSURFACEDESC2
)
pDDSD
,
&
cbcontext
,
EnumSurfacesCallbackThunk
);
}
static
HRESULT
WINAPI
IDirectDraw4Impl_EnumSurfaces
(
LPDIRECTDRAW4
This
,
DWORD
dwFlags
,
LPDDSURFACEDESC2
pDDSD
,
LPVOID
context
,
LPDDENUMSURFACESCALLBACK2
cb
)
{
return
IDirectDraw7_EnumSurfaces
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
This
),
dwFlags
,
pDDSD
,
context
,
(
LPDDENUMSURFACESCALLBACK7
)
cb
);
}
static
HRESULT
WINAPI
IDirectDrawImpl_FlipToGDISurface
(
LPDIRECTDRAW
This
)
{
return
IDirectDraw7_FlipToGDISurface
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
This
));
}
static
HRESULT
WINAPI
IDirectDraw2Impl_FlipToGDISurface
(
LPDIRECTDRAW2
This
)
{
return
IDirectDraw7_FlipToGDISurface
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
This
));
}
static
HRESULT
WINAPI
IDirectDraw3Impl_FlipToGDISurface
(
LPDIRECTDRAW3
This
)
{
return
IDirectDraw7_FlipToGDISurface
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
This
));
}
static
HRESULT
WINAPI
IDirectDraw4Impl_FlipToGDISurface
(
LPDIRECTDRAW4
This
)
{
return
IDirectDraw7_FlipToGDISurface
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
This
));
}
static
HRESULT
WINAPI
IDirectDrawImpl_GetCaps
(
LPDIRECTDRAW
This
,
LPDDCAPS
pDDC1
,
LPDDCAPS
pDDC2
)
{
return
IDirectDraw7_GetCaps
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
This
),
pDDC1
,
pDDC2
);
}
static
HRESULT
WINAPI
IDirectDraw2Impl_GetCaps
(
LPDIRECTDRAW2
This
,
LPDDCAPS
pDDC1
,
LPDDCAPS
pDDC2
)
{
return
IDirectDraw7_GetCaps
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
This
),
pDDC1
,
pDDC2
);
}
static
HRESULT
WINAPI
IDirectDraw3Impl_GetCaps
(
LPDIRECTDRAW3
This
,
LPDDCAPS
pDDC1
,
LPDDCAPS
pDDC2
)
{
return
IDirectDraw7_GetCaps
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
This
),
pDDC1
,
pDDC2
);
}
static
HRESULT
WINAPI
IDirectDraw4Impl_GetCaps
(
LPDIRECTDRAW4
This
,
LPDDCAPS
pDDC1
,
LPDDCAPS
pDDC2
)
{
return
IDirectDraw7_GetCaps
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
This
),
pDDC1
,
pDDC2
);
}
static
HRESULT
WINAPI
IDirectDrawImpl_GetDisplayMode
(
LPDIRECTDRAW
This
,
LPDDSURFACEDESC
pDDSD
)
{
return
IDirectDraw7_GetDisplayMode
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
This
),
(
LPDDSURFACEDESC2
)
pDDSD
);
}
static
HRESULT
WINAPI
IDirectDraw2Impl_GetDisplayMode
(
LPDIRECTDRAW2
This
,
LPDDSURFACEDESC
pDDSD
)
{
return
IDirectDraw7_GetDisplayMode
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
This
),
(
LPDDSURFACEDESC2
)
pDDSD
);
}
static
HRESULT
WINAPI
IDirectDraw3Impl_GetDisplayMode
(
LPDIRECTDRAW3
This
,
LPDDSURFACEDESC
pDDSD
)
{
return
IDirectDraw7_GetDisplayMode
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
This
),
(
LPDDSURFACEDESC2
)
pDDSD
);
}
static
HRESULT
WINAPI
IDirectDraw4Impl_GetDisplayMode
(
LPDIRECTDRAW4
This
,
LPDDSURFACEDESC2
pDDSD
)
{
return
IDirectDraw7_GetDisplayMode
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
This
),
(
LPDDSURFACEDESC2
)
pDDSD
);
}
static
HRESULT
WINAPI
IDirectDrawImpl_GetFourCCCodes
(
LPDIRECTDRAW
This
,
LPDWORD
lpNumCodes
,
LPDWORD
lpCodes
)
{
return
IDirectDraw7_GetFourCCCodes
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
This
),
lpNumCodes
,
lpCodes
);
}
static
HRESULT
WINAPI
IDirectDraw2Impl_GetFourCCCodes
(
LPDIRECTDRAW2
This
,
LPDWORD
lpNumCodes
,
LPDWORD
lpCodes
)
{
return
IDirectDraw7_GetFourCCCodes
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
This
),
lpNumCodes
,
lpCodes
);
}
static
HRESULT
WINAPI
IDirectDraw3Impl_GetFourCCCodes
(
LPDIRECTDRAW3
This
,
LPDWORD
lpNumCodes
,
LPDWORD
lpCodes
)
{
return
IDirectDraw7_GetFourCCCodes
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
This
),
lpNumCodes
,
lpCodes
);
}
static
HRESULT
WINAPI
IDirectDraw4Impl_GetFourCCCodes
(
LPDIRECTDRAW4
This
,
LPDWORD
lpNumCodes
,
LPDWORD
lpCodes
)
{
return
IDirectDraw7_GetFourCCCodes
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
This
),
lpNumCodes
,
lpCodes
);
}
static
HRESULT
WINAPI
IDirectDrawImpl_GetGDISurface
(
LPDIRECTDRAW
This
,
LPDIRECTDRAWSURFACE
*
ppSurf
)
{
LPDIRECTDRAWSURFACE7
pSurf7
;
HRESULT
hr
;
hr
=
IDirectDraw7_GetGDISurface
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
This
),
&
pSurf7
);
/* This coercion is safe, since the IDirectDrawSurface3 vtable has the
* IDirectDrawSurface vtable layout at the beginning */
*
ppSurf
=
pSurf7
?
(
IDirectDrawSurface
*
)
&
((
IDirectDrawSurfaceImpl
*
)
pSurf7
)
->
IDirectDrawSurface3_vtbl
:
NULL
;
return
hr
;
}
static
HRESULT
WINAPI
IDirectDraw2Impl_GetGDISurface
(
LPDIRECTDRAW2
This
,
LPDIRECTDRAWSURFACE
*
ppSurf
)
{
LPDIRECTDRAWSURFACE7
pSurf7
;
HRESULT
hr
;
hr
=
IDirectDraw7_GetGDISurface
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
This
),
&
pSurf7
);
/* This coercion is safe, since the IDirectDrawSurface3 vtable has the
* IDirectDrawSurface vtable layout at the beginning */
*
ppSurf
=
pSurf7
?
(
IDirectDrawSurface
*
)
&
((
IDirectDrawSurfaceImpl
*
)
pSurf7
)
->
IDirectDrawSurface3_vtbl
:
NULL
;
return
hr
;
}
static
HRESULT
WINAPI
IDirectDraw3Impl_GetGDISurface
(
LPDIRECTDRAW3
This
,
LPDIRECTDRAWSURFACE
*
ppSurf
)
{
LPDIRECTDRAWSURFACE7
pSurf7
;
HRESULT
hr
;
hr
=
IDirectDraw7_GetGDISurface
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
This
),
&
pSurf7
);
/* This coercion is safe, since the IDirectDrawSurface3 vtable has the
* IDirectDrawSurface vtable layout at the beginning */
*
ppSurf
=
pSurf7
?
(
IDirectDrawSurface
*
)
&
((
IDirectDrawSurfaceImpl
*
)
pSurf7
)
->
IDirectDrawSurface3_vtbl
:
NULL
;
return
hr
;
}
static
HRESULT
WINAPI
IDirectDraw4Impl_GetGDISurface
(
LPDIRECTDRAW4
This
,
LPDIRECTDRAWSURFACE4
*
ppSurf
)
{
return
IDirectDraw7_GetGDISurface
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
This
),
(
LPDIRECTDRAWSURFACE7
*
)
ppSurf
);
}
static
HRESULT
WINAPI
IDirectDrawImpl_GetMonitorFrequency
(
LPDIRECTDRAW
This
,
LPDWORD
pdwFreq
)
{
return
IDirectDraw7_GetMonitorFrequency
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
This
),
pdwFreq
);
}
static
HRESULT
WINAPI
IDirectDraw2Impl_GetMonitorFrequency
(
LPDIRECTDRAW2
This
,
LPDWORD
pdwFreq
)
{
return
IDirectDraw7_GetMonitorFrequency
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
This
),
pdwFreq
);
}
static
HRESULT
WINAPI
IDirectDraw3Impl_GetMonitorFrequency
(
LPDIRECTDRAW3
This
,
LPDWORD
pdwFreq
)
{
return
IDirectDraw7_GetMonitorFrequency
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
This
),
pdwFreq
);
}
static
HRESULT
WINAPI
IDirectDraw4Impl_GetMonitorFrequency
(
LPDIRECTDRAW4
This
,
LPDWORD
pdwFreq
)
{
return
IDirectDraw7_GetMonitorFrequency
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
This
),
pdwFreq
);
}
static
HRESULT
WINAPI
IDirectDrawImpl_GetScanLine
(
LPDIRECTDRAW
This
,
LPDWORD
pdwLine
)
{
return
IDirectDraw7_GetScanLine
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
This
),
pdwLine
);
}
static
HRESULT
WINAPI
IDirectDraw2Impl_GetScanLine
(
LPDIRECTDRAW2
This
,
LPDWORD
pdwLine
)
{
return
IDirectDraw7_GetScanLine
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
This
),
pdwLine
);
}
static
HRESULT
WINAPI
IDirectDraw3Impl_GetScanLine
(
LPDIRECTDRAW3
This
,
LPDWORD
pdwLine
)
{
return
IDirectDraw7_GetScanLine
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
This
),
pdwLine
);
}
static
HRESULT
WINAPI
IDirectDraw4Impl_GetScanLine
(
LPDIRECTDRAW4
This
,
LPDWORD
pdwLine
)
{
return
IDirectDraw7_GetScanLine
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
This
),
pdwLine
);
}
static
HRESULT
WINAPI
IDirectDrawImpl_GetVerticalBlankStatus
(
LPDIRECTDRAW
This
,
LPBOOL
lpbIsInVB
)
{
return
IDirectDraw7_GetVerticalBlankStatus
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
This
),
lpbIsInVB
);
}
static
HRESULT
WINAPI
IDirectDraw2Impl_GetVerticalBlankStatus
(
LPDIRECTDRAW2
This
,
LPBOOL
lpbIsInVB
)
{
return
IDirectDraw7_GetVerticalBlankStatus
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
This
),
lpbIsInVB
);
}
static
HRESULT
WINAPI
IDirectDraw3Impl_GetVerticalBlankStatus
(
LPDIRECTDRAW3
This
,
LPBOOL
lpbIsInVB
)
{
return
IDirectDraw7_GetVerticalBlankStatus
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
This
),
lpbIsInVB
);
}
static
HRESULT
WINAPI
IDirectDraw4Impl_GetVerticalBlankStatus
(
LPDIRECTDRAW4
This
,
LPBOOL
lpbIsInVB
)
{
return
IDirectDraw7_GetVerticalBlankStatus
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
This
),
lpbIsInVB
);
}
static
HRESULT
WINAPI
IDirectDrawImpl_Initialize
(
LPDIRECTDRAW
iface
,
LPGUID
pGUID
)
{
IDirectDrawImpl
*
This
=
ddraw_from_ddraw1
(
iface
);
HRESULT
ret_value
;
ret_value
=
IDirectDraw7_Initialize
((
IDirectDraw7
*
)
This
,
pGUID
);
return
ret_value
;
}
static
HRESULT
WINAPI
IDirectDraw2Impl_Initialize
(
LPDIRECTDRAW2
iface
,
LPGUID
pGUID
)
{
IDirectDrawImpl
*
This
=
ddraw_from_ddraw2
(
iface
);
HRESULT
ret_value
;
ret_value
=
IDirectDraw7_Initialize
((
IDirectDraw7
*
)
This
,
pGUID
);
return
ret_value
;
}
static
HRESULT
WINAPI
IDirectDraw3Impl_Initialize
(
LPDIRECTDRAW3
iface
,
LPGUID
pGUID
)
{
IDirectDrawImpl
*
This
=
ddraw_from_ddraw3
(
iface
);
HRESULT
ret_value
;
ret_value
=
IDirectDraw7_Initialize
((
IDirectDraw7
*
)
This
,
pGUID
);
return
ret_value
;
}
static
HRESULT
WINAPI
IDirectDraw4Impl_Initialize
(
LPDIRECTDRAW4
iface
,
LPGUID
pGUID
)
{
IDirectDrawImpl
*
This
=
ddraw_from_ddraw4
(
iface
);
HRESULT
ret_value
;
ret_value
=
IDirectDraw7_Initialize
((
IDirectDraw7
*
)
This
,
pGUID
);
return
ret_value
;
}
static
HRESULT
WINAPI
IDirectDrawImpl_RestoreDisplayMode
(
LPDIRECTDRAW
This
)
{
return
IDirectDraw7_RestoreDisplayMode
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
This
));
}
static
HRESULT
WINAPI
IDirectDraw2Impl_RestoreDisplayMode
(
LPDIRECTDRAW2
This
)
{
return
IDirectDraw7_RestoreDisplayMode
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
This
));
}
static
HRESULT
WINAPI
IDirectDraw3Impl_RestoreDisplayMode
(
LPDIRECTDRAW3
This
)
{
return
IDirectDraw7_RestoreDisplayMode
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
This
));
}
static
HRESULT
WINAPI
IDirectDraw4Impl_RestoreDisplayMode
(
LPDIRECTDRAW4
This
)
{
return
IDirectDraw7_RestoreDisplayMode
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
This
));
}
static
HRESULT
WINAPI
IDirectDrawImpl_SetCooperativeLevel
(
LPDIRECTDRAW
This
,
HWND
hWnd
,
DWORD
dwFlags
)
{
return
IDirectDraw7_SetCooperativeLevel
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
This
),
hWnd
,
dwFlags
);
}
static
HRESULT
WINAPI
IDirectDraw2Impl_SetCooperativeLevel
(
LPDIRECTDRAW2
This
,
HWND
hWnd
,
DWORD
dwFlags
)
{
return
IDirectDraw7_SetCooperativeLevel
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
This
),
hWnd
,
dwFlags
);
}
static
HRESULT
WINAPI
IDirectDraw3Impl_SetCooperativeLevel
(
LPDIRECTDRAW3
This
,
HWND
hWnd
,
DWORD
dwFlags
)
{
return
IDirectDraw7_SetCooperativeLevel
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
This
),
hWnd
,
dwFlags
);
}
static
HRESULT
WINAPI
IDirectDraw4Impl_SetCooperativeLevel
(
LPDIRECTDRAW4
This
,
HWND
hWnd
,
DWORD
dwFlags
)
{
return
IDirectDraw7_SetCooperativeLevel
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
This
),
hWnd
,
dwFlags
);
}
static
HRESULT
WINAPI
IDirectDrawImpl_SetDisplayMode
(
LPDIRECTDRAW
This
,
DWORD
a
,
DWORD
b
,
DWORD
c
)
{
return
IDirectDraw7_SetDisplayMode
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
This
),
a
,
b
,
c
,
0
,
0
);
}
static
HRESULT
WINAPI
IDirectDraw2Impl_SetDisplayMode
(
LPDIRECTDRAW2
This
,
DWORD
a
,
DWORD
b
,
DWORD
c
,
DWORD
d
,
DWORD
e
)
{
return
IDirectDraw7_SetDisplayMode
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
This
),
a
,
b
,
c
,
d
,
e
);
}
static
HRESULT
WINAPI
IDirectDraw3Impl_SetDisplayMode
(
LPDIRECTDRAW3
This
,
DWORD
a
,
DWORD
b
,
DWORD
c
,
DWORD
d
,
DWORD
e
)
{
return
IDirectDraw7_SetDisplayMode
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
This
),
a
,
b
,
c
,
d
,
e
);
}
static
HRESULT
WINAPI
IDirectDraw4Impl_SetDisplayMode
(
LPDIRECTDRAW4
This
,
DWORD
a
,
DWORD
b
,
DWORD
c
,
DWORD
d
,
DWORD
e
)
{
return
IDirectDraw7_SetDisplayMode
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
This
),
a
,
b
,
c
,
d
,
e
);
}
static
HRESULT
WINAPI
IDirectDrawImpl_WaitForVerticalBlank
(
LPDIRECTDRAW
This
,
DWORD
dwFlags
,
HANDLE
hEvent
)
{
return
IDirectDraw7_WaitForVerticalBlank
((
IDirectDraw7
*
)
ddraw_from_ddraw1
(
This
),
dwFlags
,
hEvent
);
}
static
HRESULT
WINAPI
IDirectDraw2Impl_WaitForVerticalBlank
(
LPDIRECTDRAW2
This
,
DWORD
dwFlags
,
HANDLE
hEvent
)
{
return
IDirectDraw7_WaitForVerticalBlank
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
This
),
dwFlags
,
hEvent
);
}
static
HRESULT
WINAPI
IDirectDraw3Impl_WaitForVerticalBlank
(
LPDIRECTDRAW3
This
,
DWORD
dwFlags
,
HANDLE
hEvent
)
{
return
IDirectDraw7_WaitForVerticalBlank
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
This
),
dwFlags
,
hEvent
);
}
static
HRESULT
WINAPI
IDirectDraw4Impl_WaitForVerticalBlank
(
LPDIRECTDRAW4
This
,
DWORD
dwFlags
,
HANDLE
hEvent
)
{
return
IDirectDraw7_WaitForVerticalBlank
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
This
),
dwFlags
,
hEvent
);
}
static
HRESULT
WINAPI
IDirectDraw2Impl_GetAvailableVidMem
(
LPDIRECTDRAW2
This
,
LPDDSCAPS
pCaps
,
LPDWORD
pdwTotal
,
LPDWORD
pdwFree
)
{
DDSCAPS2
Caps2
;
DDRAW_Convert_DDSCAPS_1_To_2
(
pCaps
,
&
Caps2
);
return
IDirectDraw7_GetAvailableVidMem
((
IDirectDraw7
*
)
ddraw_from_ddraw2
(
This
),
&
Caps2
,
pdwTotal
,
pdwFree
);
}
static
HRESULT
WINAPI
IDirectDraw3Impl_GetAvailableVidMem
(
LPDIRECTDRAW3
This
,
LPDDSCAPS
pCaps
,
LPDWORD
pdwTotal
,
LPDWORD
pdwFree
)
{
DDSCAPS2
Caps2
;
DDRAW_Convert_DDSCAPS_1_To_2
(
pCaps
,
&
Caps2
);
return
IDirectDraw7_GetAvailableVidMem
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
This
),
&
Caps2
,
pdwTotal
,
pdwFree
);
}
static
HRESULT
WINAPI
IDirectDraw4Impl_GetAvailableVidMem
(
LPDIRECTDRAW4
This
,
LPDDSCAPS2
pCaps
,
LPDWORD
pdwTotal
,
LPDWORD
pdwFree
)
{
return
IDirectDraw7_GetAvailableVidMem
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
This
),
pCaps
,
pdwTotal
,
pdwFree
);
}
static
HRESULT
WINAPI
IDirectDraw3Impl_GetSurfaceFromDC
(
LPDIRECTDRAW3
This
,
HDC
hDC
,
LPDIRECTDRAWSURFACE
*
pSurf
)
{
return
IDirectDraw7_GetSurfaceFromDC
((
IDirectDraw7
*
)
ddraw_from_ddraw3
(
This
),
hDC
,
(
LPDIRECTDRAWSURFACE7
*
)
pSurf
);
}
static
HRESULT
WINAPI
IDirectDraw4Impl_GetSurfaceFromDC
(
LPDIRECTDRAW4
This
,
HDC
hDC
,
LPDIRECTDRAWSURFACE4
*
pSurf
)
{
IDirectDrawSurface7
*
surf7
;
HRESULT
hr
;
if
(
!
pSurf
)
return
E_INVALIDARG
;
hr
=
IDirectDraw7_GetSurfaceFromDC
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
This
),
hDC
,
&
surf7
);
*
pSurf
=
surf7
?
(
IDirectDrawSurface4
*
)
&
((
IDirectDrawSurfaceImpl
*
)
surf7
)
->
IDirectDrawSurface3_vtbl
:
NULL
;
return
hr
;
}
static
HRESULT
WINAPI
IDirectDraw4Impl_RestoreAllSurfaces
(
LPDIRECTDRAW4
This
)
{
return
IDirectDraw7_RestoreAllSurfaces
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
This
));
}
static
HRESULT
WINAPI
IDirectDraw4Impl_TestCooperativeLevel
(
LPDIRECTDRAW4
This
)
{
return
IDirectDraw7_TestCooperativeLevel
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
This
));
}
static
HRESULT
WINAPI
IDirectDraw4Impl_GetDeviceIdentifier
(
LPDIRECTDRAW4
This
,
LPDDDEVICEIDENTIFIER
pDDDI
,
DWORD
dwFlags
)
{
DDDEVICEIDENTIFIER2
DDDI2
;
HRESULT
hr
;
hr
=
IDirectDraw7_GetDeviceIdentifier
((
IDirectDraw7
*
)
ddraw_from_ddraw4
(
This
),
&
DDDI2
,
dwFlags
);
DDRAW_Convert_DDDEVICEIDENTIFIER_2_To_1
(
&
DDDI2
,
pDDDI
);
return
hr
;
}
const
IDirectDrawVtbl
IDirectDraw1_Vtbl
=
{
IDirectDrawImpl_QueryInterface
,
IDirectDrawImpl_AddRef
,
IDirectDrawImpl_Release
,
IDirectDrawImpl_Compact
,
IDirectDrawImpl_CreateClipper
,
IDirectDrawImpl_CreatePalette
,
IDirectDrawImpl_CreateSurface
,
IDirectDrawImpl_DuplicateSurface
,
IDirectDrawImpl_EnumDisplayModes
,
IDirectDrawImpl_EnumSurfaces
,
IDirectDrawImpl_FlipToGDISurface
,
IDirectDrawImpl_GetCaps
,
IDirectDrawImpl_GetDisplayMode
,
IDirectDrawImpl_GetFourCCCodes
,
IDirectDrawImpl_GetGDISurface
,
IDirectDrawImpl_GetMonitorFrequency
,
IDirectDrawImpl_GetScanLine
,
IDirectDrawImpl_GetVerticalBlankStatus
,
IDirectDrawImpl_Initialize
,
IDirectDrawImpl_RestoreDisplayMode
,
IDirectDrawImpl_SetCooperativeLevel
,
IDirectDrawImpl_SetDisplayMode
,
IDirectDrawImpl_WaitForVerticalBlank
,
};
const
IDirectDraw2Vtbl
IDirectDraw2_Vtbl
=
{
IDirectDraw2Impl_QueryInterface
,
IDirectDraw2Impl_AddRef
,
IDirectDraw2Impl_Release
,
IDirectDraw2Impl_Compact
,
IDirectDraw2Impl_CreateClipper
,
IDirectDraw2Impl_CreatePalette
,
IDirectDraw2Impl_CreateSurface
,
IDirectDraw2Impl_DuplicateSurface
,
IDirectDraw2Impl_EnumDisplayModes
,
IDirectDraw2Impl_EnumSurfaces
,
IDirectDraw2Impl_FlipToGDISurface
,
IDirectDraw2Impl_GetCaps
,
IDirectDraw2Impl_GetDisplayMode
,
IDirectDraw2Impl_GetFourCCCodes
,
IDirectDraw2Impl_GetGDISurface
,
IDirectDraw2Impl_GetMonitorFrequency
,
IDirectDraw2Impl_GetScanLine
,
IDirectDraw2Impl_GetVerticalBlankStatus
,
IDirectDraw2Impl_Initialize
,
IDirectDraw2Impl_RestoreDisplayMode
,
IDirectDraw2Impl_SetCooperativeLevel
,
IDirectDraw2Impl_SetDisplayMode
,
IDirectDraw2Impl_WaitForVerticalBlank
,
IDirectDraw2Impl_GetAvailableVidMem
};
const
IDirectDraw3Vtbl
IDirectDraw3_Vtbl
=
{
IDirectDraw3Impl_QueryInterface
,
IDirectDraw3Impl_AddRef
,
IDirectDraw3Impl_Release
,
IDirectDraw3Impl_Compact
,
IDirectDraw3Impl_CreateClipper
,
IDirectDraw3Impl_CreatePalette
,
IDirectDraw3Impl_CreateSurface
,
IDirectDraw3Impl_DuplicateSurface
,
IDirectDraw3Impl_EnumDisplayModes
,
IDirectDraw3Impl_EnumSurfaces
,
IDirectDraw3Impl_FlipToGDISurface
,
IDirectDraw3Impl_GetCaps
,
IDirectDraw3Impl_GetDisplayMode
,
IDirectDraw3Impl_GetFourCCCodes
,
IDirectDraw3Impl_GetGDISurface
,
IDirectDraw3Impl_GetMonitorFrequency
,
IDirectDraw3Impl_GetScanLine
,
IDirectDraw3Impl_GetVerticalBlankStatus
,
IDirectDraw3Impl_Initialize
,
IDirectDraw3Impl_RestoreDisplayMode
,
IDirectDraw3Impl_SetCooperativeLevel
,
IDirectDraw3Impl_SetDisplayMode
,
IDirectDraw3Impl_WaitForVerticalBlank
,
IDirectDraw3Impl_GetAvailableVidMem
,
IDirectDraw3Impl_GetSurfaceFromDC
,
};
const
IDirectDraw4Vtbl
IDirectDraw4_Vtbl
=
{
IDirectDraw4Impl_QueryInterface
,
IDirectDraw4Impl_AddRef
,
IDirectDraw4Impl_Release
,
IDirectDraw4Impl_Compact
,
IDirectDraw4Impl_CreateClipper
,
IDirectDraw4Impl_CreatePalette
,
IDirectDraw4Impl_CreateSurface
,
IDirectDraw4Impl_DuplicateSurface
,
IDirectDraw4Impl_EnumDisplayModes
,
IDirectDraw4Impl_EnumSurfaces
,
IDirectDraw4Impl_FlipToGDISurface
,
IDirectDraw4Impl_GetCaps
,
IDirectDraw4Impl_GetDisplayMode
,
IDirectDraw4Impl_GetFourCCCodes
,
IDirectDraw4Impl_GetGDISurface
,
IDirectDraw4Impl_GetMonitorFrequency
,
IDirectDraw4Impl_GetScanLine
,
IDirectDraw4Impl_GetVerticalBlankStatus
,
IDirectDraw4Impl_Initialize
,
IDirectDraw4Impl_RestoreDisplayMode
,
IDirectDraw4Impl_SetCooperativeLevel
,
IDirectDraw4Impl_SetDisplayMode
,
IDirectDraw4Impl_WaitForVerticalBlank
,
IDirectDraw4Impl_GetAvailableVidMem
,
IDirectDraw4Impl_GetSurfaceFromDC
,
IDirectDraw4Impl_RestoreAllSurfaces
,
IDirectDraw4Impl_TestCooperativeLevel
,
IDirectDraw4Impl_GetDeviceIdentifier
};
dlls/ddraw/device.c
View file @
6fb9ee0e
...
...
@@ -3553,8 +3553,7 @@ IDirect3DDeviceImpl_7_DrawPrimitive(IDirect3DDevice7 *iface,
/* Set the FVF */
EnterCriticalSection
(
&
ddraw_cs
);
hr
=
IWineD3DDevice_SetVertexDeclaration
(
This
->
wineD3DDevice
,
IDirectDrawImpl_FindDecl
(
This
->
ddraw
,
VertexType
));
hr
=
IWineD3DDevice_SetVertexDeclaration
(
This
->
wineD3DDevice
,
ddraw_find_decl
(
This
->
ddraw
,
VertexType
));
if
(
hr
!=
D3D_OK
)
{
LeaveCriticalSection
(
&
ddraw_cs
);
...
...
@@ -3676,8 +3675,7 @@ IDirect3DDeviceImpl_7_DrawIndexedPrimitive(IDirect3DDevice7 *iface,
/* Set the D3DDevice's FVF */
EnterCriticalSection
(
&
ddraw_cs
);
hr
=
IWineD3DDevice_SetVertexDeclaration
(
This
->
wineD3DDevice
,
IDirectDrawImpl_FindDecl
(
This
->
ddraw
,
VertexType
));
hr
=
IWineD3DDevice_SetVertexDeclaration
(
This
->
wineD3DDevice
,
ddraw_find_decl
(
This
->
ddraw
,
VertexType
));
if
(
FAILED
(
hr
))
{
ERR
(
" (%p) Setting the FVF failed, hr = %x!
\n
"
,
This
,
hr
);
...
...
dlls/ddraw/direct3d.c
View file @
6fb9ee0e
...
...
@@ -1036,9 +1036,8 @@ IDirect3DImpl_7_CreateVertexBuffer(IDirect3D7 *iface,
return
hr
;
}
object
->
wineD3DVertexDeclaration
=
IDirectDrawImpl_FindDecl
(
This
,
Desc
->
dwFVF
);
if
(
!
object
->
wineD3DVertexDeclaration
)
object
->
wineD3DVertexDeclaration
=
ddraw_find_decl
(
This
,
Desc
->
dwFVF
);
if
(
!
object
->
wineD3DVertexDeclaration
)
{
ERR
(
"Cannot find the vertex declaration for fvf %08x
\n
"
,
Desc
->
dwFVF
);
IWineD3DBuffer_Release
(
object
->
wineD3DVertexBuffer
);
...
...
dlls/ddraw/surface.c
View file @
6fb9ee0e
...
...
@@ -1750,9 +1750,7 @@ IDirectDrawSurfaceImpl_Restore(IDirectDrawSurface7 *iface)
{
/* Call the recreation callback. Make sure to AddRef first */
IDirectDrawSurface_AddRef
(
iface
);
IDirectDrawImpl_RecreateSurfacesCallback
(
iface
,
&
This
->
surface_desc
,
NULL
/* Not needed */
);
ddraw_recreate_surfaces_cb
(
iface
,
&
This
->
surface_desc
,
NULL
/* Not needed */
);
}
hr
=
IWineD3DSurface_Restore
(
This
->
WineD3DSurface
);
LeaveCriticalSection
(
&
ddraw_cs
);
...
...
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