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
4c4552c5
Commit
4c4552c5
authored
Feb 19, 2014
by
Ken Thomases
Committed by
Alexandre Julliard
Feb 22, 2014
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wined3d: Restore the pixel format of the window whose pixel format was actually changed.
parent
b8569d2f
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
63 additions
and
19 deletions
+63
-19
context.c
dlls/wined3d/context.c
+62
-19
wined3d_private.h
dlls/wined3d/wined3d_private.h
+1
-0
No files found.
dlls/wined3d/context.c
View file @
4c4552c5
...
...
@@ -719,8 +719,38 @@ void context_surface_update(struct wined3d_context *context, const struct wined3
}
}
static
BOOL
context_set_pixel_format
(
const
struct
wined3d_gl_info
*
gl_info
,
HDC
dc
,
int
format
)
static
void
context_restore_pixel_format
(
struct
wined3d_context
*
ctx
)
{
const
struct
wined3d_gl_info
*
gl_info
=
ctx
->
gl_info
;
if
(
ctx
->
restore_pf
&&
IsWindow
(
ctx
->
restore_pf_win
))
{
if
(
ctx
->
gl_info
->
supported
[
WGL_WINE_PIXEL_FORMAT_PASSTHROUGH
])
{
HDC
dc
=
GetDC
(
ctx
->
restore_pf_win
);
if
(
dc
)
{
if
(
!
GL_EXTCALL
(
wglSetPixelFormatWINE
(
dc
,
ctx
->
restore_pf
)))
{
ERR
(
"wglSetPixelFormatWINE failed to restore pixel format %d on window %p.
\n
"
,
ctx
->
restore_pf
,
ctx
->
restore_pf_win
);
}
ReleaseDC
(
ctx
->
restore_pf_win
,
dc
);
}
}
else
{
ERR
(
"can't restore pixel format %d on window %p
\n
"
,
ctx
->
restore_pf
,
ctx
->
restore_pf_win
);
}
}
ctx
->
restore_pf
=
0
;
ctx
->
restore_pf_win
=
NULL
;
}
static
BOOL
context_set_pixel_format
(
struct
wined3d_context
*
context
,
HDC
dc
,
int
format
)
{
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
int
current
=
GetPixelFormat
(
dc
);
if
(
current
==
format
)
return
TRUE
;
...
...
@@ -734,6 +764,9 @@ static BOOL context_set_pixel_format(const struct wined3d_gl_info *gl_info, HDC
format
,
dc
,
GetLastError
());
return
FALSE
;
}
context
->
restore_pf
=
0
;
context
->
restore_pf_win
=
WindowFromDC
(
dc
);
return
TRUE
;
}
...
...
@@ -743,12 +776,24 @@ static BOOL context_set_pixel_format(const struct wined3d_gl_info *gl_info, HDC
* when really needed. */
if
(
gl_info
->
supported
[
WGL_WINE_PIXEL_FORMAT_PASSTHROUGH
])
{
HWND
win
;
if
(
!
GL_EXTCALL
(
wglSetPixelFormatWINE
(
dc
,
format
)))
{
ERR
(
"wglSetPixelFormatWINE failed to set pixel format %d on device context %p.
\n
"
,
format
,
dc
);
return
FALSE
;
}
win
=
WindowFromDC
(
dc
);
if
(
win
!=
context
->
restore_pf_win
)
{
context_restore_pixel_format
(
context
);
context
->
restore_pf
=
current
;
context
->
restore_pf_win
=
win
;
}
return
TRUE
;
}
...
...
@@ -766,7 +811,7 @@ static BOOL context_set_gl_context(struct wined3d_context *ctx)
struct
wined3d_swapchain
*
swapchain
=
ctx
->
swapchain
;
BOOL
backup
=
FALSE
;
if
(
!
context_set_pixel_format
(
ctx
->
gl_info
,
ctx
->
hdc
,
ctx
->
pixel_format
))
if
(
!
context_set_pixel_format
(
ctx
,
ctx
->
hdc
,
ctx
->
pixel_format
))
{
WARN
(
"Failed to set pixel format %d on device context %p.
\n
"
,
ctx
->
pixel_format
,
ctx
->
hdc
);
...
...
@@ -799,7 +844,7 @@ static BOOL context_set_gl_context(struct wined3d_context *ctx)
return
FALSE
;
}
if
(
!
context_set_pixel_format
(
ctx
->
gl_info
,
dc
,
ctx
->
pixel_format
))
if
(
!
context_set_pixel_format
(
ctx
,
dc
,
ctx
->
pixel_format
))
{
ERR
(
"Failed to set pixel format %d on device context %p.
\n
"
,
ctx
->
pixel_format
,
dc
);
...
...
@@ -821,15 +866,8 @@ static BOOL context_set_gl_context(struct wined3d_context *ctx)
return
TRUE
;
}
static
void
context_restore_gl_context
(
const
struct
wined3d_gl_info
*
gl_info
,
HDC
dc
,
HGLRC
gl_ctx
,
int
pf
)
static
void
context_restore_gl_context
(
const
struct
wined3d_gl_info
*
gl_info
,
HDC
dc
,
HGLRC
gl_ctx
)
{
if
(
!
context_set_pixel_format
(
gl_info
,
dc
,
pf
))
{
ERR
(
"Failed to restore pixel format %d on device context %p.
\n
"
,
pf
,
dc
);
context_set_current
(
NULL
);
return
;
}
if
(
!
wglMakeCurrent
(
dc
,
gl_ctx
))
{
ERR
(
"Failed to restore GL context %p on device context %p, last error %#x.
\n
"
,
...
...
@@ -875,11 +913,9 @@ static void context_destroy_gl_resources(struct wined3d_context *context)
HGLRC
restore_ctx
;
HDC
restore_dc
;
unsigned
int
i
;
int
restore_pf
;
restore_ctx
=
wglGetCurrentContext
();
restore_dc
=
wglGetCurrentDC
();
restore_pf
=
GetPixelFormat
(
restore_dc
);
if
(
restore_ctx
==
context
->
glCtx
)
restore_ctx
=
NULL
;
...
...
@@ -957,9 +993,10 @@ static void context_destroy_gl_resources(struct wined3d_context *context)
HeapFree
(
GetProcessHeap
(),
0
,
context
->
free_occlusion_queries
);
HeapFree
(
GetProcessHeap
(),
0
,
context
->
free_event_queries
);
context_restore_pixel_format
(
context
);
if
(
restore_ctx
)
{
context_restore_gl_context
(
gl_info
,
restore_dc
,
restore_ctx
,
restore_pf
);
context_restore_gl_context
(
gl_info
,
restore_dc
,
restore_ctx
);
}
else
if
(
wglGetCurrentContext
()
&&
!
wglMakeCurrent
(
NULL
,
NULL
))
{
...
...
@@ -1055,13 +1092,17 @@ void context_release(struct wined3d_context *context)
WARN
(
"Context %p is not the current context.
\n
"
,
context
);
}
if
(
!--
context
->
level
&&
context
->
restore_ctx
)
if
(
!--
context
->
level
)
{
context_restore_pixel_format
(
context
);
if
(
context
->
restore_ctx
)
{
TRACE
(
"Restoring GL context %p on device context %p.
\n
"
,
context
->
restore_ctx
,
context
->
restore_dc
);
context_restore_gl_context
(
context
->
gl_info
,
context
->
restore_dc
,
context
->
restore_ctx
,
context
->
restore_pf
);
context_restore_gl_context
(
context
->
gl_info
,
context
->
restore_dc
,
context
->
restore_ctx
);
context
->
restore_ctx
=
NULL
;
context
->
restore_dc
=
NULL
;
}
}
}
static
void
context_enter
(
struct
wined3d_context
*
context
)
...
...
@@ -1079,9 +1120,10 @@ static void context_enter(struct wined3d_context *context)
current_gl
,
wglGetCurrentDC
());
context
->
restore_ctx
=
current_gl
;
context
->
restore_dc
=
wglGetCurrentDC
();
context
->
restore_pf
=
GetPixelFormat
(
context
->
restore_dc
);
context
->
needs_set
=
1
;
}
else
if
(
context
->
pixel_format
!=
GetPixelFormat
(
context
->
hdc
))
context
->
needs_set
=
1
;
}
}
...
...
@@ -1398,7 +1440,9 @@ struct wined3d_context *context_create(struct wined3d_swapchain *swapchain,
context_enter
(
ret
);
if
(
!
context_set_pixel_format
(
gl_info
,
hdc
,
pixel_format
))
ret
->
gl_info
=
gl_info
;
if
(
!
context_set_pixel_format
(
ret
,
hdc
,
pixel_format
))
{
ERR
(
"Failed to set pixel format %d on device context %p.
\n
"
,
pixel_format
,
hdc
);
context_release
(
ret
);
...
...
@@ -1453,7 +1497,6 @@ struct wined3d_context *context_create(struct wined3d_swapchain *swapchain,
goto
out
;
}
ret
->
gl_info
=
gl_info
;
ret
->
d3d_info
=
&
device
->
adapter
->
d3d_info
;
ret
->
state_table
=
device
->
StateTable
;
...
...
dlls/wined3d/wined3d_private.h
View file @
4c4552c5
...
...
@@ -1104,6 +1104,7 @@ struct wined3d_context
HGLRC
restore_ctx
;
HDC
restore_dc
;
int
restore_pf
;
HWND
restore_pf_win
;
HGLRC
glCtx
;
HWND
win_handle
;
HDC
hdc
;
...
...
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