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
1f47580e
Commit
1f47580e
authored
May 11, 2013
by
Roderick Colenbrander
Committed by
Alexandre Julliard
May 23, 2013
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
winex11: Store opengl swap interval with gl_drawable.
parent
1510838d
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
37 additions
and
7 deletions
+37
-7
opengl.c
dlls/opengl32/tests/opengl.c
+1
-1
opengl.c
dlls/winex11.drv/opengl.c
+36
-6
No files found.
dlls/opengl32/tests/opengl.c
View file @
1f47580e
...
@@ -1581,7 +1581,7 @@ static void test_swap_control(HDC oldhdc)
...
@@ -1581,7 +1581,7 @@ static void test_swap_control(HDC oldhdc)
* is not global or shared among contexts.
* is not global or shared among contexts.
*/
*/
interval
=
pwglGetSwapIntervalEXT
();
interval
=
pwglGetSwapIntervalEXT
();
todo_wine
ok
(
interval
==
1
,
"Expected swap interval 1, got %d
\n
"
,
interval
);
ok
(
interval
==
1
,
"Expected swap interval 1, got %d
\n
"
,
interval
);
ret
=
wglDeleteContext
(
ctx1
);
ret
=
wglDeleteContext
(
ctx1
);
ok
(
ret
,
"Failed to delete GL context, last error %#x.
\n
"
,
GetLastError
());
ok
(
ret
,
"Failed to delete GL context, last error %#x.
\n
"
,
GetLastError
());
...
...
dlls/winex11.drv/opengl.c
View file @
1f47580e
...
@@ -251,6 +251,7 @@ struct gl_drawable
...
@@ -251,6 +251,7 @@ struct gl_drawable
const
struct
wgl_pixel_format
*
format
;
/* pixel format for the drawable */
const
struct
wgl_pixel_format
*
format
;
/* pixel format for the drawable */
XVisualInfo
*
visual
;
/* information about the GL visual */
XVisualInfo
*
visual
;
/* information about the GL visual */
RECT
rect
;
/* drawable rect, relative to whole window drawable */
RECT
rect
;
/* drawable rect, relative to whole window drawable */
int
swap_interval
;
};
};
/* X context to associate a struct gl_drawable to an hwnd */
/* X context to associate a struct gl_drawable to an hwnd */
...
@@ -271,7 +272,6 @@ static struct wgl_pixel_format *pixel_formats;
...
@@ -271,7 +272,6 @@ static struct wgl_pixel_format *pixel_formats;
static
int
nb_pixel_formats
,
nb_onscreen_formats
;
static
int
nb_pixel_formats
,
nb_onscreen_formats
;
static
int
use_render_texture_emulation
=
1
;
static
int
use_render_texture_emulation
=
1
;
static
BOOL
has_swap_control
;
static
BOOL
has_swap_control
;
static
int
swap_interval
=
1
;
static
CRITICAL_SECTION
context_section
;
static
CRITICAL_SECTION
context_section
;
static
CRITICAL_SECTION_DEBUG
critsect_debug
=
static
CRITICAL_SECTION_DEBUG
critsect_debug
=
...
@@ -1223,6 +1223,10 @@ static void free_gl_drawable( struct gl_drawable *gl )
...
@@ -1223,6 +1223,10 @@ static void free_gl_drawable( struct gl_drawable *gl )
static
BOOL
create_gl_drawable
(
HWND
hwnd
,
HWND
parent
,
struct
gl_drawable
*
gl
)
static
BOOL
create_gl_drawable
(
HWND
hwnd
,
HWND
parent
,
struct
gl_drawable
*
gl
)
{
{
gl
->
drawable
=
0
;
gl
->
drawable
=
0
;
/* Default GLX and WGL swap interval is 1, but in case of glXSwapIntervalSGI
* there is no way to query it, so we have to store it here.
*/
gl
->
swap_interval
=
1
;
if
(
GetAncestor
(
hwnd
,
GA_PARENT
)
==
GetDesktopWindow
())
/* top-level window */
if
(
GetAncestor
(
hwnd
,
GA_PARENT
)
==
GetDesktopWindow
())
/* top-level window */
{
{
...
@@ -2866,9 +2870,24 @@ static const GLubyte *X11DRV_wglGetExtensionsStringEXT(void)
...
@@ -2866,9 +2870,24 @@ static const GLubyte *X11DRV_wglGetExtensionsStringEXT(void)
*/
*/
static
int
X11DRV_wglGetSwapIntervalEXT
(
void
)
static
int
X11DRV_wglGetSwapIntervalEXT
(
void
)
{
{
/* GLX_SGI_swap_control doesn't have any provisions for getting the swap
struct
wgl_context
*
ctx
=
NtCurrentTeb
()
->
glContext
;
* interval, so the swap interval has to be tracked. */
struct
gl_drawable
*
gl
;
int
swap_interval
;
TRACE
(
"()
\n
"
);
TRACE
(
"()
\n
"
);
if
(
!
(
gl
=
get_gl_drawable
(
WindowFromDC
(
ctx
->
hdc
),
ctx
->
hdc
)))
{
/* This can't happen because a current WGL context is required to get
* here. Likely the application is buggy.
*/
WARN
(
"No GL drawable found, returning swap interval 0
\n
"
);
return
0
;
}
swap_interval
=
gl
->
swap_interval
;
release_gl_drawable
(
gl
);
return
swap_interval
;
return
swap_interval
;
}
}
...
@@ -2879,6 +2898,8 @@ static int X11DRV_wglGetSwapIntervalEXT(void)
...
@@ -2879,6 +2898,8 @@ static int X11DRV_wglGetSwapIntervalEXT(void)
*/
*/
static
BOOL
X11DRV_wglSwapIntervalEXT
(
int
interval
)
static
BOOL
X11DRV_wglSwapIntervalEXT
(
int
interval
)
{
{
struct
wgl_context
*
ctx
=
NtCurrentTeb
()
->
glContext
;
struct
gl_drawable
*
gl
;
BOOL
ret
=
TRUE
;
BOOL
ret
=
TRUE
;
TRACE
(
"(%d)
\n
"
,
interval
);
TRACE
(
"(%d)
\n
"
,
interval
);
...
@@ -2888,13 +2909,20 @@ static BOOL X11DRV_wglSwapIntervalEXT(int interval)
...
@@ -2888,13 +2909,20 @@ static BOOL X11DRV_wglSwapIntervalEXT(int interval)
SetLastError
(
ERROR_INVALID_DATA
);
SetLastError
(
ERROR_INVALID_DATA
);
return
FALSE
;
return
FALSE
;
}
}
else
if
(
!
has_swap_control
&&
interval
==
0
)
if
(
!
(
gl
=
get_gl_drawable
(
WindowFromDC
(
ctx
->
hdc
),
ctx
->
hdc
)))
{
SetLastError
(
ERROR_DC_NOT_FOUND
);
return
FALSE
;
}
if
(
!
has_swap_control
&&
interval
==
0
)
{
{
/* wglSwapIntervalEXT considers an interval value of zero to mean that
/* wglSwapIntervalEXT considers an interval value of zero to mean that
* vsync should be disabled, but glXSwapIntervalSGI considers such a
* vsync should be disabled, but glXSwapIntervalSGI considers such a
* value to be an error. Just silently ignore the request for now. */
* value to be an error. Just silently ignore the request for now. */
WARN
(
"Request to disable vertical sync is not handled
\n
"
);
WARN
(
"Request to disable vertical sync is not handled
\n
"
);
swap_interval
=
0
;
gl
->
swap_interval
=
0
;
}
}
else
else
{
{
...
@@ -2904,11 +2932,13 @@ static BOOL X11DRV_wglSwapIntervalEXT(int interval)
...
@@ -2904,11 +2932,13 @@ static BOOL X11DRV_wglSwapIntervalEXT(int interval)
WARN
(
"GLX_SGI_swap_control extension is not available
\n
"
);
WARN
(
"GLX_SGI_swap_control extension is not available
\n
"
);
if
(
ret
)
if
(
ret
)
swap_interval
=
interval
;
gl
->
swap_interval
=
interval
;
else
else
SetLastError
(
ERROR_DC_NOT_FOUND
);
SetLastError
(
ERROR_DC_NOT_FOUND
);
}
}
release_gl_drawable
(
gl
);
return
ret
;
return
ret
;
}
}
...
...
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