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
ad912cf2
Commit
ad912cf2
authored
Jul 11, 2003
by
Lionel Ulmer
Committed by
Alexandre Julliard
Jul 11, 2003
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
- added fast-path for color-keyed Blts
- fix 565 colour-keying conversion - properly handles Pitch in colour conversion - easier and less buggy UNPACK_WIDTH support
parent
1f4fea3b
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
30 additions
and
54 deletions
+30
-54
mesa.c
dlls/ddraw/d3ddevice/mesa.c
+3
-9
mesa.c
dlls/ddraw/mesa.c
+27
-45
No files found.
dlls/ddraw/d3ddevice/mesa.c
View file @
ad912cf2
...
...
@@ -2946,12 +2946,6 @@ d3ddevice_blt(IDirectDrawSurfaceImpl *This, LPRECT rdst,
int
x
,
y
;
double
x_stretch
,
y_stretch
;
if
(
dwFlags
&
DDBLT_KEYSRC
)
{
/* As I have no game using this, did not bother to do it yet as I cannot test it anyway */
FIXME
(
" Blt overide with color-keying not supported yet.
\n
"
);
return
DDERR_INVALIDPARAMS
;
}
if
(
rsrc
)
{
src_rect
.
u1
.
x1
=
rsrc
->
left
;
src_rect
.
u2
.
y1
=
rsrc
->
top
;
...
...
@@ -2974,10 +2968,10 @@ d3ddevice_blt(IDirectDrawSurfaceImpl *This, LPRECT rdst,
ENTER_GL
();
opt_bitmap
=
d3ddevice_set_state_for_flush
(
This
->
d3ddevice
,
(
LPCRECT
)
&
rect
,
FALSE
,
&
initial
);
opt_bitmap
=
d3ddevice_set_state_for_flush
(
This
->
d3ddevice
,
(
LPCRECT
)
&
rect
,
((
dwFlags
&
DDBLT_KEYSRC
)
!=
0
)
,
&
initial
);
if
(
upload_surface_to_tex_memory_init
(
src_impl
,
0
,
&
gl_d3d_dev
->
current_internal_format
,
initial
,
FALSE
,
UNLOCK_TEX_SIZE
,
UNLOCK_TEX_SIZE
)
!=
DD_OK
)
{
initial
,
((
dwFlags
&
DDBLT_KEYSRC
)
!=
0
)
,
UNLOCK_TEX_SIZE
,
UNLOCK_TEX_SIZE
)
!=
DD_OK
)
{
ERR
(
" unsupported pixel format at memory to buffer Blt overide.
\n
"
);
LEAVE_GL
();
return
DDERR_INVALIDPARAMS
;
...
...
@@ -3029,7 +3023,7 @@ d3ddevice_blt(IDirectDrawSurfaceImpl *This, LPRECT rdst,
}
upload_surface_to_tex_memory_release
();
d3ddevice_restore_state_after_flush
(
This
->
d3ddevice
,
opt_bitmap
,
FALSE
);
d3ddevice_restore_state_after_flush
(
This
->
d3ddevice
,
opt_bitmap
,
((
dwFlags
&
DDBLT_KEYSRC
)
!=
0
)
);
if
(((
buffer_type
==
WINE_GL_BUFFER_FRONT
)
&&
(
prev_draw
==
GL_BACK
))
||
((
buffer_type
==
WINE_GL_BUFFER_BACK
)
&&
(
prev_draw
==
GL_FRONT
)))
...
...
dlls/ddraw/mesa.c
View file @
ad912cf2
...
...
@@ -622,7 +622,7 @@ static IDirectDrawSurfaceImpl *current_surface;
static
GLuint
current_level
;
static
DWORD
current_tex_width
;
static
DWORD
current_tex_height
;
static
BOOLEAN
need_alignement_restore
;
static
GLuint
current_alignement_constraints
;
static
int
current_storage_width
;
HRESULT
upload_surface_to_tex_memory_init
(
IDirectDrawSurfaceImpl
*
surf_ptr
,
GLuint
level
,
GLenum
*
current_internal_format
,
...
...
@@ -635,14 +635,18 @@ HRESULT upload_surface_to_tex_memory_init(IDirectDrawSurfaceImpl *surf_ptr, GLui
BYTE
bpp
=
GET_BPP
(
surf_ptr
->
surface_desc
);
BOOL
sub_texture
=
TRUE
;
need_alignement_restore
=
FALSE
;
current_surface
=
surf_ptr
;
current_level
=
level
;
/* First, do some sanity checks ... */
if
((
surf_ptr
->
surface_desc
.
u1
.
lPitch
%
bpp
)
!=
0
)
{
FIXME
(
"Warning : pitch is not a multiple of BPP - not supported yet !
\n
"
);
}
else
{
/* In that case, no need to have any alignement constraints... */
if
(
current_alignement_constraints
!=
1
)
{
glPixelStorei
(
GL_UNPACK_ALIGNMENT
,
1
);
current_alignement_constraints
=
1
;
}
}
/* Note: we only check width here as you cannot have width non-zero while height is set to zero */
...
...
@@ -911,7 +915,7 @@ HRESULT upload_surface_to_tex_memory(RECT *rect, DWORD xoffset, DWORD yoffset, v
height
=
rect
->
bottom
-
rect
->
top
;
/* Used when converting stuff */
line_increase
=
src_d
->
dwWidth
-
width
;
line_increase
=
src_d
->
u1
.
lPitch
-
(
width
*
bpp
)
;
switch
(
convert_type
)
{
case
CONVERT_PALETTED
:
{
...
...
@@ -982,13 +986,13 @@ HRESULT upload_surface_to_tex_memory(RECT *rect, DWORD xoffset, DWORD yoffset, v
for
(
y
=
0
;
y
<
height
;
y
++
)
{
for
(
x
=
0
;
x
<
width
;
x
++
)
{
WORD
color
=
*
src
++
;
*
dst
=
((
color
&
0xFF
C
0
)
|
((
color
&
0x1F
)
<<
1
));
*
dst
=
((
color
&
0xFF
D
0
)
|
((
color
&
0x1F
)
<<
1
));
if
((
color
<
src_d
->
ddckCKSrcBlt
.
dwColorSpaceLowValue
)
||
(
color
>
src_d
->
ddckCKSrcBlt
.
dwColorSpaceHighValue
))
*
dst
|=
0x0001
;
dst
++
;
}
src
+=
line_increase
;
src
=
(
WORD
*
)
(((
BYTE
*
)
src
)
+
line_increase
)
;
}
}
break
;
...
...
@@ -1011,7 +1015,7 @@ HRESULT upload_surface_to_tex_memory(RECT *rect, DWORD xoffset, DWORD yoffset, v
*
dst
|=
color
&
0x0001
;
dst
++
;
}
src
+=
line_increase
;
src
=
(
WORD
*
)
(((
BYTE
*
)
src
)
+
line_increase
)
;
}
}
break
;
...
...
@@ -1034,7 +1038,7 @@ HRESULT upload_surface_to_tex_memory(RECT *rect, DWORD xoffset, DWORD yoffset, v
*
dst
|=
color
&
0x000F
;
dst
++
;
}
src
+=
line_increase
;
src
=
(
WORD
*
)
(((
BYTE
*
)
src
)
+
line_increase
)
;
}
}
break
;
...
...
@@ -1057,7 +1061,7 @@ HRESULT upload_surface_to_tex_memory(RECT *rect, DWORD xoffset, DWORD yoffset, v
*
dst
|=
(
color
&
0xF000
)
>>
12
;
dst
++
;
}
src
+=
line_increase
;
src
=
(
WORD
*
)
(((
BYTE
*
)
src
)
+
line_increase
)
;
}
}
break
;
...
...
@@ -1079,7 +1083,7 @@ HRESULT upload_surface_to_tex_memory(RECT *rect, DWORD xoffset, DWORD yoffset, v
*
dst
|=
(
color
&
0x8000
)
>>
15
;
dst
++
;
}
src
+=
line_increase
;
src
=
(
WORD
*
)
(((
BYTE
*
)
src
)
+
line_increase
)
;
}
}
break
;
...
...
@@ -1103,7 +1107,7 @@ HRESULT upload_surface_to_tex_memory(RECT *rect, DWORD xoffset, DWORD yoffset, v
*
dst
|=
0x0001
;
dst
++
;
}
src
+=
line_increase
;
src
=
(
WORD
*
)
(((
BYTE
*
)
src
)
+
line_increase
)
;
}
}
else
{
for
(
y
=
0
;
y
<
height
;
y
++
)
{
...
...
@@ -1111,7 +1115,7 @@ HRESULT upload_surface_to_tex_memory(RECT *rect, DWORD xoffset, DWORD yoffset, v
WORD
color
=
*
src
++
;
*
dst
++
=
((
color
&
0x7FFF
)
<<
1
)
|
0x0001
;
}
src
+=
line_increase
;
src
=
(
WORD
*
)
(((
BYTE
*
)
src
)
+
line_increase
)
;
}
}
...
...
@@ -1138,7 +1142,7 @@ HRESULT upload_surface_to_tex_memory(RECT *rect, DWORD xoffset, DWORD yoffset, v
*
dst
|=
0xFF
;
dst
++
;
}
src
+=
3
*
line_increase
;
src
+=
line_increase
;
}
}
break
;
...
...
@@ -1161,7 +1165,7 @@ HRESULT upload_surface_to_tex_memory(RECT *rect, DWORD xoffset, DWORD yoffset, v
*
dst
|=
color
&
0x000000FF
;
dst
++
;
}
src
+=
line_increase
;
src
=
(
DWORD
*
)
(((
BYTE
*
)
src
)
+
line_increase
)
;
}
}
break
;
...
...
@@ -1183,7 +1187,7 @@ HRESULT upload_surface_to_tex_memory(RECT *rect, DWORD xoffset, DWORD yoffset, v
*
dst
|=
(
color
&
0xFF000000
)
>>
24
;
dst
++
;
}
src
+=
line_increase
;
src
=
(
DWORD
*
)
(((
BYTE
*
)
src
)
+
line_increase
)
;
}
}
break
;
...
...
@@ -1207,14 +1211,14 @@ HRESULT upload_surface_to_tex_memory(RECT *rect, DWORD xoffset, DWORD yoffset, v
*
dst
|=
0xFF
;
dst
++
;
}
src
+=
line_increase
;
src
=
(
DWORD
*
)
(((
BYTE
*
)
src
)
+
line_increase
)
;
}
}
else
{
for
(
y
=
0
;
y
<
height
;
y
++
)
{
for
(
x
=
0
;
x
<
width
;
x
++
)
{
*
dst
++
=
(
*
src
++
<<
8
)
|
0xFF
;
}
src
+=
line_increase
;
src
=
(
DWORD
*
)
(((
BYTE
*
)
src
)
+
line_increase
)
;
}
}
}
break
;
...
...
@@ -1226,31 +1230,13 @@ HRESULT upload_surface_to_tex_memory(RECT *rect, DWORD xoffset, DWORD yoffset, v
}
if
(
convert_type
!=
NO_CONVERSION
)
{
int
storage_width
;
/* When doing conversion, the storage is always of width 'width' as there will never
be any Pitch issue... For now :-)
*/
surf_buffer
=
*
temp_buffer
;
if
(
width
!=
current_tex_width
)
{
/* Overide the default PixelStore parameter if only using part of the actual texture */
storage_width
=
width
;
/* This is needed when locking with a rectangle with 'odd' width */
if
(
need_alignement_restore
==
FALSE
)
{
glPixelStorei
(
GL_UNPACK_ALIGNMENT
,
1
);
need_alignement_restore
=
TRUE
;
}
}
else
{
if
(
current_surface
->
surface_desc
.
u1
.
lPitch
==
(
current_surface
->
surface_desc
.
dwWidth
*
bpp
))
{
storage_width
=
0
;
}
else
{
storage_width
=
current_surface
->
surface_desc
.
u1
.
lPitch
/
bpp
;
}
if
(
need_alignement_restore
==
TRUE
)
{
glPixelStorei
(
GL_UNPACK_ALIGNMENT
,
0
);
need_alignement_restore
=
FALSE
;
}
}
if
(
storage_width
!=
current_storage_width
)
{
glPixelStorei
(
GL_UNPACK_ROW_LENGTH
,
storage_width
);
current_storage_width
=
storage_width
;
if
(
width
!=
current_storage_width
)
{
glPixelStorei
(
GL_UNPACK_ROW_LENGTH
,
width
);
current_storage_width
=
width
;
}
}
...
...
@@ -1269,9 +1255,5 @@ HRESULT upload_surface_to_tex_memory_release(void)
{
current_surface
=
NULL
;
if
(
need_alignement_restore
==
TRUE
)
{
glPixelStorei
(
GL_UNPACK_ALIGNMENT
,
4
);
}
return
DD_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