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
e9255530
Commit
e9255530
authored
Apr 26, 2012
by
Henri Verbeet
Committed by
Alexandre Julliard
Apr 27, 2012
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
d3dx9: Introduce a special case for simple loads in D3DXLoadSurfaceFromMemory().
parent
c638aab2
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
58 additions
and
17 deletions
+58
-17
surface.c
dlls/d3dx9_36/surface.c
+58
-17
No files found.
dlls/d3dx9_36/surface.c
View file @
e9255530
...
...
@@ -957,11 +957,6 @@ HRESULT WINAPI D3DXLoadSurfaceFromMemory(LPDIRECT3DSURFACE9 pDestSurface,
IDirect3DSurface9_GetDesc
(
pDestSurface
,
&
surfdesc
);
srcformatdesc
=
get_format_info
(
SrcFormat
);
destformatdesc
=
get_format_info
(
surfdesc
.
Format
);
if
(
srcformatdesc
->
type
==
FORMAT_UNKNOWN
||
srcformatdesc
->
bytes_per_pixel
>
4
)
return
E_NOTIMPL
;
if
(
destformatdesc
->
type
==
FORMAT_UNKNOWN
||
destformatdesc
->
bytes_per_pixel
>
4
)
return
E_NOTIMPL
;
srcsize
.
x
=
pSrcRect
->
right
-
pSrcRect
->
left
;
srcsize
.
y
=
pSrcRect
->
bottom
-
pSrcRect
->
top
;
if
(
!
pDestRect
)
{
...
...
@@ -976,21 +971,67 @@ HRESULT WINAPI D3DXLoadSurfaceFromMemory(LPDIRECT3DSURFACE9 pDestSurface,
if
(
destsize
.
x
==
0
||
destsize
.
y
==
0
)
return
D3D_OK
;
}
hr
=
IDirect3DSurface9_LockRect
(
pDestSurface
,
&
lockrect
,
pDestRect
,
0
);
if
(
FAILED
(
hr
))
return
D3DXERR_INVALIDDATA
;
srcformatdesc
=
get_format_info
(
SrcFormat
);
if
(
srcformatdesc
->
type
==
FORMAT_UNKNOWN
)
return
E_NOTIMPL
;
destformatdesc
=
get_format_info
(
surfdesc
.
Format
);
if
(
destformatdesc
->
type
==
FORMAT_UNKNOWN
)
return
E_NOTIMPL
;
if
(
SrcFormat
==
surfdesc
.
Format
&&
destsize
.
x
==
srcsize
.
x
&&
destsize
.
y
==
srcsize
.
y
)
/* Simple copy. */
{
const
BYTE
*
src_addr
;
BYTE
*
dst_addr
;
UINT
y
;
if
(
FAILED
(
hr
=
IDirect3DSurface9_LockRect
(
pDestSurface
,
&
lockrect
,
pDestRect
,
0
)))
return
D3DXERR_INVALIDDATA
;
src_addr
=
pSrcMemory
;
src_addr
+=
pSrcRect
->
top
*
SrcPitch
;
src_addr
+=
pSrcRect
->
left
*
srcformatdesc
->
bytes_per_pixel
;
dst_addr
=
lockrect
.
pBits
;
for
(
y
=
0
;
y
<
srcsize
.
y
;
++
y
)
{
memcpy
(
dst_addr
,
src_addr
,
srcsize
.
x
*
srcformatdesc
->
bytes_per_pixel
);
src_addr
+=
SrcPitch
;
dst_addr
+=
lockrect
.
Pitch
;
}
IDirect3DSurface9_UnlockRect
(
pDestSurface
);
}
else
/* Stretching or format conversion. */
{
if
(
srcformatdesc
->
bytes_per_pixel
>
4
)
return
E_NOTIMPL
;
if
(
destformatdesc
->
bytes_per_pixel
>
4
)
return
E_NOTIMPL
;
if
(
FAILED
(
hr
=
IDirect3DSurface9_LockRect
(
pDestSurface
,
&
lockrect
,
pDestRect
,
0
)))
return
D3DXERR_INVALIDDATA
;
if
((
dwFilter
&
0xf
)
==
D3DX_FILTER_NONE
)
{
copy_simple_data
(
pSrcMemory
,
SrcPitch
,
srcsize
,
srcformatdesc
,
lockrect
.
pBits
,
lockrect
.
Pitch
,
destsize
,
destformatdesc
,
Colorkey
);
}
else
/* if ((dwFilter & 0xf) == D3DX_FILTER_POINT) */
{
/* Always apply a point filter until D3DX_FILTER_LINEAR,
* D3DX_FILTER_TRIANGLE and D3DX_FILTER_BOX are implemented. */
point_filter_simple_data
(
pSrcMemory
,
SrcPitch
,
srcsize
,
srcformatdesc
,
lockrect
.
pBits
,
lockrect
.
Pitch
,
destsize
,
destformatdesc
,
Colorkey
);
}
if
((
dwFilter
&
0xF
)
==
D3DX_FILTER_NONE
)
{
copy_simple_data
(
pSrcMemory
,
SrcPitch
,
srcsize
,
srcformatdesc
,
lockrect
.
pBits
,
lockrect
.
Pitch
,
destsize
,
destformatdesc
,
Colorkey
);
}
else
/*if((dwFilter & 0xF) == D3DX_FILTER_POINT) */
{
/* always apply a point filter until D3DX_FILTER_LINEAR, D3DX_FILTER_TRIANGLE and D3DX_FILTER_BOX are implemented */
point_filter_simple_data
(
pSrcMemory
,
SrcPitch
,
srcsize
,
srcformatdesc
,
lockrect
.
pBits
,
lockrect
.
Pitch
,
destsize
,
destformatdesc
,
Colorkey
);
IDirect3DSurface9_UnlockRect
(
pDestSurface
);
}
IDirect3DSurface9_UnlockRect
(
pDestSurface
);
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