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
012f9b03
Commit
012f9b03
authored
Mar 22, 2017
by
Henri Verbeet
Committed by
Alexandre Julliard
Mar 23, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wined3d: Use draw_textured_quad() in swapchain_blit().
Signed-off-by:
Henri Verbeet
<
hverbeet@codeweavers.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
4f027e62
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
14 additions
and
60 deletions
+14
-60
swapchain.c
dlls/wined3d/swapchain.c
+14
-60
No files found.
dlls/wined3d/swapchain.c
View file @
012f9b03
...
...
@@ -310,6 +310,7 @@ static void swapchain_blit(const struct wined3d_swapchain *swapchain,
UINT
src_h
=
src_rect
->
bottom
-
src_rect
->
top
;
GLenum
gl_filter
;
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
enum
wined3d_texture_filter_type
filter
;
RECT
win_rect
;
UINT
win_h
;
...
...
@@ -317,9 +318,15 @@ static void swapchain_blit(const struct wined3d_swapchain *swapchain,
swapchain
,
context
,
wine_dbgstr_rect
(
src_rect
),
wine_dbgstr_rect
(
dst_rect
));
if
(
src_w
==
dst_rect
->
right
-
dst_rect
->
left
&&
src_h
==
dst_rect
->
bottom
-
dst_rect
->
top
)
{
filter
=
WINED3D_TEXF_NONE
;
gl_filter
=
GL_NEAREST
;
}
else
{
filter
=
WINED3D_TEXF_LINEAR
;
gl_filter
=
GL_LINEAR
;
}
GetClientRect
(
swapchain
->
win_handle
,
&
win_rect
);
win_h
=
win_rect
.
bottom
-
win_rect
.
top
;
...
...
@@ -361,75 +368,22 @@ static void swapchain_blit(const struct wined3d_swapchain *swapchain,
{
struct
wined3d_device
*
device
=
swapchain
->
device
;
struct
wined3d_context
*
context2
;
float
tex_left
=
src_rect
->
left
;
float
tex_top
=
src_rect
->
top
;
float
tex_right
=
src_rect
->
right
;
float
tex_bottom
=
src_rect
->
bottom
;
RECT
r
;
context2
=
context_acquire
(
device
,
texture
,
0
);
context_apply_blit_state
(
context2
,
device
);
if
(
texture
->
flags
&
WINED3D_TEXTURE_NORMALIZED_COORDS
)
{
tex_left
/=
texture
->
pow2_width
;
tex_right
/=
texture
->
pow2_width
;
tex_top
/=
texture
->
pow2_height
;
tex_bottom
/=
texture
->
pow2_height
;
}
r
=
*
dst_rect
;
surface_translate_drawable_coords
(
back_buffer
,
swapchain
->
win_handle
,
&
r
);
if
(
is_complex_fixup
(
texture
->
resource
.
format
->
color_fixup
))
gl_filter
=
GL_NEAREST
;
context_apply_fbo_state_blit
(
context2
,
GL_FRAMEBUFFER
,
front_buffer
,
NULL
,
WINED3D_LOCATION_DRAWABLE
);
context_bind_texture
(
context2
,
back_buffer
->
texture_target
,
texture
->
texture_rgb
.
name
);
/* Set up the texture. The surface is not in a wined3d_texture
* container, so there are no D3D texture settings to dirtify. */
device
->
blitter
->
set_shader
(
device
->
blit_priv
,
context2
,
back_buffer
,
NULL
);
gl_info
->
gl_ops
.
gl
.
p_glTexParameteri
(
back_buffer
->
texture_target
,
GL_TEXTURE_MIN_FILTER
,
gl_filter
);
gl_info
->
gl_ops
.
gl
.
p_glTexParameteri
(
back_buffer
->
texture_target
,
GL_TEXTURE_MAG_FILTER
,
gl_filter
);
if
(
gl_info
->
supported
[
EXT_TEXTURE_SRGB_DECODE
])
gl_info
->
gl_ops
.
gl
.
p_glTexParameteri
(
back_buffer
->
texture_target
,
GL_TEXTURE_SRGB_DECODE_EXT
,
GL_SKIP_DECODE_EXT
);
filter
=
WINED3D_TEXF_NONE
;
context_apply_fbo_state_blit
(
context2
,
GL_FRAMEBUFFER
,
back_buffer
,
NULL
,
WINED3D_LOCATION_DRAWABLE
);
context_set_draw_buffer
(
context
,
GL_BACK
);
/* Set the viewport to the destination rectandle, disable any projection
* transformation set up by context_apply_blit_state(), and draw a
* (-1,-1)-(1,1) quad.
*
* Back up viewport and matrix to avoid breaking last_was_blit
*
* Note that context_apply_blit_state() set up viewport and ortho to
* match the surface size - we want the GL drawable(=window) size. */
gl_info
->
gl_ops
.
gl
.
p_glPushAttrib
(
GL_VIEWPORT_BIT
);
gl_info
->
gl_ops
.
gl
.
p_glViewport
(
dst_rect
->
left
,
win_h
-
dst_rect
->
bottom
,
dst_rect
->
right
,
win_h
-
dst_rect
->
top
);
gl_info
->
gl_ops
.
gl
.
p_glMatrixMode
(
GL_PROJECTION
);
gl_info
->
gl_ops
.
gl
.
p_glPushMatrix
();
gl_info
->
gl_ops
.
gl
.
p_glLoadIdentity
();
gl_info
->
gl_ops
.
gl
.
p_glBegin
(
GL_QUADS
);
/* bottom left */
gl_info
->
gl_ops
.
gl
.
p_glTexCoord2f
(
tex_left
,
tex_bottom
);
gl_info
->
gl_ops
.
gl
.
p_glVertex2i
(
-
1
,
-
1
);
/* top left */
gl_info
->
gl_ops
.
gl
.
p_glTexCoord2f
(
tex_left
,
tex_top
);
gl_info
->
gl_ops
.
gl
.
p_glVertex2i
(
-
1
,
1
);
/* top right */
gl_info
->
gl_ops
.
gl
.
p_glTexCoord2f
(
tex_right
,
tex_top
);
gl_info
->
gl_ops
.
gl
.
p_glVertex2i
(
1
,
1
);
/* bottom right */
gl_info
->
gl_ops
.
gl
.
p_glTexCoord2f
(
tex_right
,
tex_bottom
);
gl_info
->
gl_ops
.
gl
.
p_glVertex2i
(
1
,
-
1
);
gl_info
->
gl_ops
.
gl
.
p_glEnd
();
gl_info
->
gl_ops
.
gl
.
p_glPopMatrix
();
gl_info
->
gl_ops
.
gl
.
p_glPopAttrib
();
device
->
blitter
->
set_shader
(
device
->
blit_priv
,
context2
,
back_buffer
,
NULL
);
draw_textured_quad
(
back_buffer
,
context2
,
src_rect
,
&
r
,
filter
);
device
->
blitter
->
unset_shader
(
context
->
gl_info
);
checkGLcall
(
"Swapchain present blit(manual)
\n
"
);
...
...
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