cogl/xlib-renderer: Return refresh rate directly
Instead of a CoglOutput that is then only used to fetch the refresh rate. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3792>
This commit is contained in:
parent
653ba4a7a7
commit
c9e22d9f79
3 changed files with 30 additions and 31 deletions
|
@ -56,9 +56,9 @@ _cogl_xlib_renderer_disconnect (CoglRenderer *renderer);
|
|||
CoglXlibRenderer *
|
||||
_cogl_xlib_renderer_get_data (CoglRenderer *renderer);
|
||||
|
||||
CoglOutput *
|
||||
_cogl_xlib_renderer_output_for_rectangle (CoglRenderer *renderer,
|
||||
int x,
|
||||
int y,
|
||||
int width,
|
||||
int height);
|
||||
float
|
||||
_cogl_xlib_renderer_refresh_rate_for_rectangle (CoglRenderer *renderer,
|
||||
int x,
|
||||
int y,
|
||||
int width,
|
||||
int height);
|
||||
|
|
|
@ -529,12 +529,12 @@ cogl_xlib_renderer_remove_filter (CoglRenderer *renderer,
|
|||
(CoglNativeFilterFunc)func, data);
|
||||
}
|
||||
|
||||
CoglOutput *
|
||||
_cogl_xlib_renderer_output_for_rectangle (CoglRenderer *renderer,
|
||||
int x,
|
||||
int y,
|
||||
int width,
|
||||
int height)
|
||||
float
|
||||
_cogl_xlib_renderer_refresh_rate_for_rectangle (CoglRenderer *renderer,
|
||||
int x,
|
||||
int y,
|
||||
int width,
|
||||
int height)
|
||||
{
|
||||
CoglXlibRenderer *xlib_renderer = _cogl_xlib_renderer_get_data (renderer);
|
||||
int max_overlap = 0;
|
||||
|
@ -563,5 +563,8 @@ _cogl_xlib_renderer_output_for_rectangle (CoglRenderer *renderer,
|
|||
}
|
||||
}
|
||||
|
||||
return max_overlapped;
|
||||
if (max_overlapped)
|
||||
return max_overlapped->refresh_rate;
|
||||
else
|
||||
return 0.0;
|
||||
}
|
||||
|
|
|
@ -821,22 +821,22 @@ cogl_onscreen_glx_swap_region (CoglOnscreen *onscreen,
|
|||
onscreen_glx->last_swap_vsync_counter = end_frame_vsync_counter;
|
||||
|
||||
{
|
||||
CoglOutput *output;
|
||||
float refresh_rate;
|
||||
|
||||
x_min = CLAMP (x_min, 0, framebuffer_width);
|
||||
x_max = CLAMP (x_max, 0, framebuffer_width);
|
||||
y_min = CLAMP (y_min, 0, framebuffer_height);
|
||||
y_max = CLAMP (y_max, 0, framebuffer_height);
|
||||
|
||||
output =
|
||||
_cogl_xlib_renderer_output_for_rectangle (context->display->renderer,
|
||||
onscreen_glx->x + x_min,
|
||||
onscreen_glx->y + y_min,
|
||||
x_max - x_min,
|
||||
y_max - y_min);
|
||||
refresh_rate =
|
||||
_cogl_xlib_renderer_refresh_rate_for_rectangle (context->display->renderer,
|
||||
onscreen_glx->x + x_min,
|
||||
onscreen_glx->y + y_min,
|
||||
x_max - x_min,
|
||||
y_max - y_min);
|
||||
|
||||
if (output)
|
||||
info->refresh_rate = output->refresh_rate;
|
||||
if (refresh_rate != 0.0)
|
||||
info->refresh_rate = refresh_rate;
|
||||
}
|
||||
|
||||
/* XXX: we don't get SwapComplete events based on how we implement
|
||||
|
@ -982,20 +982,16 @@ cogl_onscreen_glx_update_output (CoglOnscreen *onscreen)
|
|||
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
||||
CoglContext *context = cogl_framebuffer_get_context (framebuffer);
|
||||
CoglDisplay *display = context->display;
|
||||
CoglOutput *output;
|
||||
int width, height;
|
||||
|
||||
width = cogl_framebuffer_get_width (framebuffer);
|
||||
height = cogl_framebuffer_get_height (framebuffer);
|
||||
output = _cogl_xlib_renderer_output_for_rectangle (display->renderer,
|
||||
onscreen_glx->x,
|
||||
onscreen_glx->y,
|
||||
width, height);
|
||||
|
||||
if (output)
|
||||
onscreen_glx->refresh_rate = output->refresh_rate;
|
||||
else
|
||||
onscreen_glx->refresh_rate = 0.0;
|
||||
onscreen_glx->refresh_rate =
|
||||
_cogl_xlib_renderer_refresh_rate_for_rectangle (display->renderer,
|
||||
onscreen_glx->x,
|
||||
onscreen_glx->y,
|
||||
width, height);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
Loading…
Reference in a new issue