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
9956ea70
Commit
9956ea70
authored
Aug 23, 2010
by
Henri Verbeet
Committed by
Alexandre Julliard
Aug 24, 2010
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wined3d: Convert from floating point to specific surface formats.
Instead of from WINED3DFMT_B8G8R8A8_UNORM.
parent
a455a918
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
31 additions
and
28 deletions
+31
-28
device.c
dlls/wined3d/device.c
+3
-11
surface.c
dlls/wined3d/surface.c
+7
-3
utils.c
dlls/wined3d/utils.c
+19
-11
wined3d_private.h
dlls/wined3d/wined3d_private.h
+2
-3
No files found.
dlls/wined3d/device.c
View file @
9956ea70
...
...
@@ -5496,6 +5496,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_DeletePatch(IWineD3DDevice *iface, UINT
static
HRESULT
WINAPI
IWineD3DDeviceImpl_ColorFill
(
IWineD3DDevice
*
iface
,
IWineD3DSurface
*
surface
,
const
WINED3DRECT
*
pRect
,
WINED3DCOLOR
color
)
{
const
WINED3DCOLORVALUE
c
=
{
D3DCOLOR_R
(
color
),
D3DCOLOR_G
(
color
),
D3DCOLOR_B
(
color
),
D3DCOLOR_A
(
color
)};
IWineD3DSurfaceImpl
*
s
=
(
IWineD3DSurfaceImpl
*
)
surface
;
WINEDDBLTFX
BltFx
;
...
...
@@ -5510,7 +5511,6 @@ static HRESULT WINAPI IWineD3DDeviceImpl_ColorFill(IWineD3DDevice *iface,
if
(
wined3d_settings
.
offscreen_rendering_mode
==
ORM_FBO
)
{
const
WINED3DCOLORVALUE
c
=
{
D3DCOLOR_R
(
color
),
D3DCOLOR_G
(
color
),
D3DCOLOR_B
(
color
),
D3DCOLOR_A
(
color
)};
const
RECT
draw_rect
=
{
0
,
0
,
s
->
currentDesc
.
Width
,
s
->
currentDesc
.
Height
};
return
device_clear_render_targets
((
IWineD3DDeviceImpl
*
)
iface
,
1
,
&
s
,
...
...
@@ -5521,7 +5521,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_ColorFill(IWineD3DDevice *iface,
/* Just forward this to the DirectDraw blitting engine */
memset
(
&
BltFx
,
0
,
sizeof
(
BltFx
));
BltFx
.
dwSize
=
sizeof
(
BltFx
);
BltFx
.
u5
.
dwFillColor
=
color_convert_argb_to_fmt
(
color
,
s
->
resource
.
format_desc
->
format
);
BltFx
.
u5
.
dwFillColor
=
wined3d_format_convert_from_float
(
s
->
resource
.
format_desc
,
&
c
);
return
IWineD3DSurface_Blt
(
surface
,
(
const
RECT
*
)
pRect
,
NULL
,
NULL
,
WINEDDBLT_COLORFILL
,
&
BltFx
,
WINED3DTEXF_POINT
);
}
...
...
@@ -5560,19 +5560,11 @@ static void WINAPI IWineD3DDeviceImpl_ClearRendertargetView(IWineD3DDevice *ifac
else
{
WINEDDBLTFX
BltFx
;
WINED3DCOLOR
c
;
WARN
(
"Converting to WINED3DCOLOR, this might give incorrect results
\n
"
);
c
=
((
DWORD
)(
color
->
b
*
255
.
0
f
));
c
|=
((
DWORD
)(
color
->
g
*
255
.
0
f
))
<<
8
;
c
|=
((
DWORD
)(
color
->
r
*
255
.
0
f
))
<<
16
;
c
|=
((
DWORD
)(
color
->
a
*
255
.
0
f
))
<<
24
;
/* Just forward this to the DirectDraw blitting engine */
memset
(
&
BltFx
,
0
,
sizeof
(
BltFx
));
BltFx
.
dwSize
=
sizeof
(
BltFx
);
BltFx
.
u5
.
dwFillColor
=
color_convert_argb_to_fmt
(
c
,
surface
->
resource
.
format_desc
->
format
);
BltFx
.
u5
.
dwFillColor
=
wined3d_format_convert_from_float
(
surface
->
resource
.
format_desc
,
color
);
hr
=
IWineD3DSurface_Blt
((
IWineD3DSurface
*
)
surface
,
NULL
,
NULL
,
NULL
,
WINEDDBLT_COLORFILL
,
&
BltFx
,
WINED3DTEXF_POINT
);
if
(
FAILED
(
hr
))
...
...
dlls/wined3d/surface.c
View file @
9956ea70
...
...
@@ -4923,13 +4923,17 @@ static BOOL cpu_blit_supported(const struct wined3d_gl_info *gl_info, enum blit_
return
FALSE
;
}
static
HRESULT
cpu_blit_color_fill
(
IWineD3DDeviceImpl
*
device
,
IWineD3DSurfaceImpl
*
dst_surface
,
const
RECT
*
dst_rect
,
DWORD
fill_color
)
static
HRESULT
cpu_blit_color_fill
(
IWineD3DDeviceImpl
*
device
,
IWineD3DSurfaceImpl
*
dst_surface
,
const
RECT
*
dst_rect
,
DWORD
color
)
{
const
WINED3DCOLORVALUE
c
=
{
D3DCOLOR_R
(
color
),
D3DCOLOR_G
(
color
),
D3DCOLOR_B
(
color
),
D3DCOLOR_A
(
color
)};
WINEDDBLTFX
BltFx
;
memset
(
&
BltFx
,
0
,
sizeof
(
BltFx
));
BltFx
.
dwSize
=
sizeof
(
BltFx
);
BltFx
.
u5
.
dwFillColor
=
color_convert_argb_to_fmt
(
fill_color
,
dst_surface
->
resource
.
format_desc
->
format
);
return
IWineD3DBaseSurfaceImpl_Blt
((
IWineD3DSurface
*
)
dst_surface
,
dst_rect
,
NULL
,
NULL
,
WINEDDBLT_COLORFILL
,
&
BltFx
,
WINED3DTEXF_POINT
);
BltFx
.
u5
.
dwFillColor
=
wined3d_format_convert_from_float
(
dst_surface
->
resource
.
format_desc
,
&
c
);
return
IWineD3DBaseSurfaceImpl_Blt
((
IWineD3DSurface
*
)
dst_surface
,
dst_rect
,
NULL
,
NULL
,
WINEDDBLT_COLORFILL
,
&
BltFx
,
WINED3DTEXF_POINT
);
}
const
struct
blit_shader
cpu_blit
=
{
...
...
dlls/wined3d/utils.c
View file @
9956ea70
...
...
@@ -2532,25 +2532,33 @@ BOOL getDepthStencilBits(const struct wined3d_format_desc *format_desc, short *d
return
TRUE
;
}
DWORD
color_convert_argb_to_fmt
(
DWORD
color
,
WINED3DFORMAT
destfmt
)
DWORD
wined3d_format_convert_from_float
(
const
struct
wined3d_format_desc
*
format
,
const
WINED3DCOLORVALUE
*
color
)
{
WINED3DFORMAT
destfmt
=
format
->
format
;
unsigned
int
r
,
g
,
b
,
a
;
DWORD
ret
;
if
(
destfmt
==
WINED3DFMT_B8G8R8A8_UNORM
||
destfmt
==
WINED3DFMT_B8G8R8X8_UNORM
||
destfmt
==
WINED3DFMT_B8G8R8_UNORM
)
return
color
;
TRACE
(
"Converting color {%.8e %.8e %.8e %.8e} to format %s.
\n
"
,
color
->
r
,
color
->
g
,
color
->
b
,
color
->
a
,
debug_d3dformat
(
destfmt
));
TRACE
(
"Converting color %08x to format %s
\n
"
,
color
,
debug_d3dformat
(
destfmt
));
a
=
(
color
&
0xff000000
)
>>
24
;
r
=
(
color
&
0x00ff0000
)
>>
16
;
g
=
(
color
&
0x0000ff00
)
>>
8
;
b
=
(
color
&
0x000000ff
)
>>
0
;
r
=
(
DWORD
)((
color
->
r
*
255
.
0
f
)
+
0
.
5
f
);
g
=
(
DWORD
)((
color
->
g
*
255
.
0
f
)
+
0
.
5
f
);
b
=
(
DWORD
)((
color
->
b
*
255
.
0
f
)
+
0
.
5
f
);
a
=
(
DWORD
)((
color
->
a
*
255
.
0
f
)
+
0
.
5
f
);
switch
(
destfmt
)
{
case
WINED3DFMT_B8G8R8A8_UNORM
:
case
WINED3DFMT_B8G8R8X8_UNORM
:
case
WINED3DFMT_B8G8R8_UNORM
:
ret
=
b
;
ret
|=
g
<<
8
;
ret
|=
r
<<
16
;
ret
|=
a
<<
24
;
TRACE
(
"Returning 0x%08x.
\n
"
,
ret
);
return
ret
;
case
WINED3DFMT_B5G6R5_UNORM
:
if
(
r
==
0xff
&&
g
==
0xff
&&
b
==
0xff
)
return
0xffff
;
r
=
(
r
*
32
)
/
256
;
...
...
dlls/wined3d/wined3d_private.h
View file @
9956ea70
...
...
@@ -2620,9 +2620,6 @@ const char *debug_d3dtop(WINED3DTEXTUREOP d3dtop) DECLSPEC_HIDDEN;
void
dump_color_fixup_desc
(
struct
color_fixup_desc
fixup
)
DECLSPEC_HIDDEN
;
const
char
*
debug_surflocation
(
DWORD
flag
)
DECLSPEC_HIDDEN
;
/* Color conversion routines */
DWORD
color_convert_argb_to_fmt
(
DWORD
color
,
WINED3DFORMAT
destfmt
)
DECLSPEC_HIDDEN
;
/* Routines for GL <-> D3D values */
GLenum
StencilOp
(
DWORD
op
)
DECLSPEC_HIDDEN
;
GLenum
CompareFunc
(
DWORD
func
)
DECLSPEC_HIDDEN
;
...
...
@@ -2998,6 +2995,8 @@ const struct wined3d_format_desc *getFormatDescEntry(WINED3DFORMAT fmt,
const
struct
wined3d_gl_info
*
gl_info
)
DECLSPEC_HIDDEN
;
UINT
wined3d_format_calculate_size
(
const
struct
wined3d_format_desc
*
format
,
UINT
alignment
,
UINT
width
,
UINT
height
)
DECLSPEC_HIDDEN
;
DWORD
wined3d_format_convert_from_float
(
const
struct
wined3d_format_desc
*
format
,
const
WINED3DCOLORVALUE
*
color
)
DECLSPEC_HIDDEN
;
static
inline
BOOL
use_vs
(
IWineD3DStateBlockImpl
*
stateblock
)
{
...
...
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