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
c5055fb3
Commit
c5055fb3
authored
Oct 09, 2007
by
Stefan Dösinger
Committed by
Alexandre Julliard
Oct 10, 2007
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ddraw: Cope with Init3D failures.
parent
8fc4e3ce
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
26 additions
and
6 deletions
+26
-6
ddraw.c
dlls/ddraw/ddraw.c
+24
-5
ddraw_private.h
dlls/ddraw/ddraw_private.h
+1
-0
surface.c
dlls/ddraw/surface.c
+1
-1
No files found.
dlls/ddraw/ddraw.c
View file @
c5055fb3
...
...
@@ -2519,10 +2519,6 @@ IDirectDrawImpl_CreateSurface(IDirectDraw7 *iface,
return
hr
;
}
/* Addref the ddraw interface to keep an reference for each surface */
IDirectDraw7_AddRef
(
iface
);
object
->
ifaceToRelease
=
(
IUnknown
*
)
iface
;
/* If the implementation is OpenGL and there's no d3ddevice, attach a d3ddevice
* But attach the d3ddevice only if the currently created surface was
* a primary surface (2D app in 3D mode) or a 3DDEVICE surface (3D app)
...
...
@@ -2555,10 +2551,32 @@ IDirectDrawImpl_CreateSurface(IDirectDraw7 *iface,
hr
=
IDirectDrawImpl_AttachD3DDevice
(
This
,
target
);
if
(
hr
!=
D3D_OK
)
{
IDirectDrawSurfaceImpl
*
release_surf
;
ERR
(
"IDirectDrawImpl_AttachD3DDevice failed, hr = %x
\n
"
,
hr
);
*
Surf
=
NULL
;
/* The before created surface structures are in an incomplete state here.
* WineD3D holds the reference on the IParents, and it released them on the failure
* already. So the regular release method implementation would fail on the attempt
* to destroy either the IParents or the swapchain. So free the surface here.
* The surface structure here is a list, not a tree, because onscreen targets
* cannot be cube textures
*/
while
(
object
)
{
release_surf
=
object
;
object
=
object
->
complex_array
[
0
];
IDirectDrawSurfaceImpl_Destroy
(
release_surf
);
}
LeaveCriticalSection
(
&
ddraw_cs
);
return
hr
;
}
}
/* Addref the ddraw interface to keep an reference for each surface */
IDirectDraw7_AddRef
(
iface
);
object
->
ifaceToRelease
=
(
IUnknown
*
)
iface
;
/* Create a WineD3DTexture if a texture was requested */
if
(
desc2
.
ddsCaps
.
dwCaps
&
DDSCAPS_TEXTURE
)
{
...
...
@@ -3077,7 +3095,8 @@ IDirectDrawImpl_AttachD3DDevice(IDirectDrawImpl *This,
D3D7CB_CreateAdditionalSwapChain
);
if
(
FAILED
(
hr
))
{
This
->
wineD3DDevice
=
NULL
;
This
->
d3d_target
=
NULL
;
This
->
d3d_initialized
=
FALSE
;
return
hr
;
}
...
...
dlls/ddraw/ddraw_private.h
View file @
c5055fb3
...
...
@@ -273,6 +273,7 @@ const IDirect3DTexture2Vtbl IDirect3DTexture2_Vtbl;
const
IDirect3DTextureVtbl
IDirect3DTexture1_Vtbl
;
HRESULT
WINAPI
IDirectDrawSurfaceImpl_AddAttachedSurface
(
IDirectDrawSurfaceImpl
*
This
,
IDirectDrawSurfaceImpl
*
Surf
);
void
IDirectDrawSurfaceImpl_Destroy
(
IDirectDrawSurfaceImpl
*
This
);
/* Get the number of bytes per pixel for a given surface */
#define PFGET_BPP(pf) (pf.dwFlags&DDPF_PALETTEINDEXED8?1:((pf.dwRGBBitCount+7)/8))
...
...
dlls/ddraw/surface.c
View file @
c5055fb3
...
...
@@ -178,7 +178,7 @@ IDirectDrawSurfaceImpl_AddRef(IDirectDrawSurface7 *iface)
* This: Surface to free
*
*****************************************************************************/
static
void
IDirectDrawSurfaceImpl_Destroy
(
IDirectDrawSurfaceImpl
*
This
)
void
IDirectDrawSurfaceImpl_Destroy
(
IDirectDrawSurfaceImpl
*
This
)
{
TRACE
(
"(%p)
\n
"
,
This
);
...
...
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