Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
52e45865
Commit
52e45865
authored
Sep 11, 2009
by
Henri Verbeet
Committed by
Alexandre Julliard
Sep 15, 2009
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
d3d9: Add a separate function for surface initialization.
parent
57b196b2
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
69 additions
and
55 deletions
+69
-55
d3d9_private.h
dlls/d3d9/d3d9_private.h
+4
-5
device.c
dlls/d3d9/device.c
+15
-48
surface.c
dlls/d3d9/surface.c
+50
-2
No files found.
dlls/d3d9/d3d9_private.h
View file @
52e45865
...
...
@@ -281,11 +281,6 @@ typedef struct IDirect3DSwapChain9Impl
/* ----------------- */
/*****************************************************************************
* Predeclare the interface implementation structures
*/
extern
const
IDirect3DSurface9Vtbl
Direct3DSurface9_Vtbl
;
/*****************************************************************************
* IDirect3DSurface9 implementation structure
*/
typedef
struct
IDirect3DSurface9Impl
...
...
@@ -312,6 +307,10 @@ typedef struct IDirect3DSurface9Impl
BOOL
getdc_supported
;
}
IDirect3DSurface9Impl
;
HRESULT
surface_init
(
IDirect3DSurface9Impl
*
surface
,
IDirect3DDevice9Impl
*
device
,
UINT
width
,
UINT
height
,
D3DFORMAT
format
,
BOOL
lockable
,
BOOL
discard
,
UINT
level
,
DWORD
usage
,
D3DPOOL
pool
,
D3DMULTISAMPLE_TYPE
multisample_type
,
DWORD
multisample_quality
);
/* ---------------------- */
/* IDirect3DVertexBuffer9 */
/* ---------------------- */
...
...
dlls/d3d9/device.c
View file @
52e45865
...
...
@@ -644,69 +644,36 @@ static void WINAPI IDirect3DDevice9Impl_GetGammaRamp(LPDIRECT3DDEVICE9EX iface,
wined3d_mutex_unlock
();
}
static
HRESULT
IDirect3DDevice9Impl_CreateSurface
(
LPDIRECT3DDEVICE9EX
iface
,
UINT
Width
,
UINT
Height
,
D3DFORMAT
Format
,
BOOL
Lockable
,
BOOL
Discard
,
UINT
Level
,
IDirect3DSurface9
**
ppSurface
,
UINT
Usage
,
D3DPOOL
Pool
,
D3DMULTISAMPLE_TYPE
MultiSample
,
DWORD
MultisampleQuality
)
{
HRESULT
hrc
;
IDirect3DDevice9Impl
*
This
=
(
IDirect3DDevice9Impl
*
)
iface
;
IDirect3DSurface9Impl
*
object
;
IDirect3DDevice9Impl
*
This
=
(
IDirect3DDevice9Impl
*
)
iface
;
TRACE
(
"(%p) Relay
\n
"
,
This
);
HRESULT
hr
;
if
(
MultisampleQuality
>
0
)
{
FIXME
(
"MultisampleQuality set to %d, bstituting 0
\n
"
,
MultisampleQuality
);
MultisampleQuality
=
0
;
}
/*FIXME: Check MAX bounds of MultisampleQuality*/
TRACE
(
"(%p) : w(%d) h(%d) fmt(%d) surf@%p
\n
"
,
This
,
Width
,
Height
,
Format
,
*
ppSurface
);
/* Allocate the storage for the device */
object
=
HeapAlloc
(
GetProcessHeap
(),
HEAP_ZERO_MEMORY
,
sizeof
(
IDirect3DSurface9Impl
));
if
(
NULL
==
object
)
{
FIXME
(
"Allocation of memory failed
\n
"
);
if
(
!
object
)
{
FIXME
(
"Failed to allocate surface memory.
\n
"
);
return
D3DERR_OUTOFVIDEOMEMORY
;
}
object
->
lpVtbl
=
&
Direct3DSurface9_Vtbl
;
object
->
ref
=
1
;
switch
(
Format
)
hr
=
surface_init
(
object
,
This
,
Width
,
Height
,
Format
,
Lockable
,
Discard
,
Level
,
Usage
,
Pool
,
MultiSample
,
MultisampleQuality
);
if
(
FAILED
(
hr
))
{
case
D3DFMT_A8R8G8B8
:
case
D3DFMT_X8R8G8B8
:
case
D3DFMT_R5G6B5
:
case
D3DFMT_X1R5G5B5
:
case
D3DFMT_A1R5G5B5
:
case
D3DFMT_R8G8B8
:
object
->
getdc_supported
=
TRUE
;
break
;
default:
object
->
getdc_supported
=
FALSE
;
break
;
WARN
(
"Failed to initialize surface, hr %#x.
\n
"
,
hr
);
HeapFree
(
GetProcessHeap
(),
0
,
object
);
return
hr
;
}
TRACE
(
"(%p) : w(%d) h(%d) fmt(%d) surf@%p
\n
"
,
This
,
Width
,
Height
,
Format
,
*
ppSurface
);
TRACE
(
"Created surface %p.
\n
"
,
object
);
*
ppSurface
=
(
IDirect3DSurface9
*
)
object
;
wined3d_mutex_lock
();
hrc
=
IWineD3DDevice_CreateSurface
(
This
->
WineD3DDevice
,
Width
,
Height
,
wined3dformat_from_d3dformat
(
Format
),
Lockable
,
Discard
,
Level
,
&
object
->
wineD3DSurface
,
Usage
&
WINED3DUSAGE_MASK
,
(
WINED3DPOOL
)
Pool
,
MultiSample
,
MultisampleQuality
,
SURFACE_OPENGL
,
(
IUnknown
*
)
object
);
wined3d_mutex_unlock
();
if
(
hrc
!=
D3D_OK
||
NULL
==
object
->
wineD3DSurface
)
{
/* free up object */
FIXME
(
"(%p) call to IWineD3DDevice_CreateSurface failed
\n
"
,
This
);
HeapFree
(
GetProcessHeap
(),
0
,
object
);
}
else
{
IDirect3DDevice9Ex_AddRef
(
iface
);
object
->
parentDevice
=
iface
;
TRACE
(
"(%p) : Created surface %p
\n
"
,
This
,
object
);
*
ppSurface
=
(
LPDIRECT3DSURFACE9
)
object
;
}
return
hrc
;
return
D3D_OK
;
}
static
HRESULT
WINAPI
IDirect3DDevice9Impl_CreateRenderTarget
(
IDirect3DDevice9Ex
*
iface
,
UINT
Width
,
UINT
Height
,
...
...
dlls/d3d9/surface.c
View file @
52e45865
...
...
@@ -298,8 +298,7 @@ static HRESULT WINAPI IDirect3DSurface9Impl_ReleaseDC(LPDIRECT3DSURFACE9 iface,
}
}
const
IDirect3DSurface9Vtbl
Direct3DSurface9_Vtbl
=
static
const
IDirect3DSurface9Vtbl
Direct3DSurface9_Vtbl
=
{
/* IUnknown */
IDirect3DSurface9Impl_QueryInterface
,
...
...
@@ -322,3 +321,52 @@ const IDirect3DSurface9Vtbl Direct3DSurface9_Vtbl =
IDirect3DSurface9Impl_GetDC
,
IDirect3DSurface9Impl_ReleaseDC
};
HRESULT
surface_init
(
IDirect3DSurface9Impl
*
surface
,
IDirect3DDevice9Impl
*
device
,
UINT
width
,
UINT
height
,
D3DFORMAT
format
,
BOOL
lockable
,
BOOL
discard
,
UINT
level
,
DWORD
usage
,
D3DPOOL
pool
,
D3DMULTISAMPLE_TYPE
multisample_type
,
DWORD
multisample_quality
)
{
HRESULT
hr
;
surface
->
lpVtbl
=
&
Direct3DSurface9_Vtbl
;
surface
->
ref
=
1
;
switch
(
format
)
{
case
D3DFMT_A8R8G8B8
:
case
D3DFMT_X8R8G8B8
:
case
D3DFMT_R5G6B5
:
case
D3DFMT_X1R5G5B5
:
case
D3DFMT_A1R5G5B5
:
case
D3DFMT_R8G8B8
:
surface
->
getdc_supported
=
TRUE
;
break
;
default:
surface
->
getdc_supported
=
FALSE
;
break
;
}
/* FIXME: Check MAX bounds of MultisampleQuality. */
if
(
multisample_quality
>
0
)
{
FIXME
(
"Multisample quality set to %u, substituting 0.
\n
"
,
multisample_quality
);
multisample_quality
=
0
;
}
wined3d_mutex_lock
();
hr
=
IWineD3DDevice_CreateSurface
(
device
->
WineD3DDevice
,
width
,
height
,
wined3dformat_from_d3dformat
(
format
),
lockable
,
discard
,
level
,
&
surface
->
wineD3DSurface
,
usage
&
WINED3DUSAGE_MASK
,
(
WINED3DPOOL
)
pool
,
multisample_type
,
multisample_quality
,
SURFACE_OPENGL
,
(
IUnknown
*
)
surface
);
wined3d_mutex_unlock
();
if
(
FAILED
(
hr
))
{
WARN
(
"Failed to create wined3d surface, hr %#x.
\n
"
,
hr
);
return
hr
;
}
surface
->
parentDevice
=
(
IDirect3DDevice9Ex
*
)
device
;
IDirect3DDevice9Ex_AddRef
(
surface
->
parentDevice
);
return
D3D_OK
;
}
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