backends/native: Introduce MetaRendererViewNative

MetaRendererViewNative is a MetaRendererView which contains logic
specific to views of the native backend. It will be used by following
commits.

In the future, per-view logic from MetaRendererNative can be moved to
MetaRendererViewNative where it makes more sense to have it.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2855>
This commit is contained in:
Dor Askayo
2020-07-10 18:40:07 +03:00
committed by Robert Mader
parent 2dfbbf0068
commit 1abd930c56
6 changed files with 136 additions and 34 deletions

View File

@ -62,6 +62,7 @@
#include "backends/native/meta-render-device-gbm.h"
#include "backends/native/meta-render-device-surfaceless.h"
#include "backends/native/meta-renderer-native-private.h"
#include "backends/native/meta-renderer-view-native.h"
#include "cogl/cogl.h"
#include "core/boxes-private.h"
@ -1258,7 +1259,7 @@ meta_renderer_native_create_view (MetaRenderer *renderer,
int onscreen_width;
int onscreen_height;
MetaRectangle view_layout;
MetaRendererView *view;
MetaRendererViewNative *view_native;
EGLSurface egl_surface;
GError *error = NULL;
@ -1371,26 +1372,27 @@ meta_renderer_native_create_view (MetaRenderer *renderer,
meta_rectangle_from_graphene_rect (&crtc_config->layout,
META_ROUNDING_STRATEGY_ROUND,
&view_layout);
view = g_object_new (META_TYPE_RENDERER_VIEW,
"name", meta_output_get_name (output),
"stage", meta_backend_get_stage (backend),
"layout", &view_layout,
"crtc", crtc,
"scale", scale,
"framebuffer", framebuffer,
"offscreen", offscreen,
"use-shadowfb", use_shadowfb,
"transform", view_transform,
"refresh-rate", crtc_mode_info->refresh_rate,
"vblank-duration-us", crtc_mode_info->vblank_duration_us,
NULL);
view_native = g_object_new (META_TYPE_RENDERER_VIEW_NATIVE,
"name", meta_output_get_name (output),
"stage", meta_backend_get_stage (backend),
"layout", &view_layout,
"crtc", crtc,
"scale", scale,
"framebuffer", framebuffer,
"offscreen", offscreen,
"use-shadowfb", use_shadowfb,
"transform", view_transform,
"refresh-rate", crtc_mode_info->refresh_rate,
"vblank-duration-us", crtc_mode_info->vblank_duration_us,
NULL);
if (META_IS_ONSCREEN_NATIVE (framebuffer))
{
CoglDisplayEGL *cogl_display_egl;
CoglOnscreenEgl *onscreen_egl;
meta_onscreen_native_set_view (COGL_ONSCREEN (framebuffer), view);
meta_onscreen_native_set_view (COGL_ONSCREEN (framebuffer),
META_RENDERER_VIEW (view_native));
/* Ensure we don't point to stale surfaces when creating the offscreen */
cogl_display_egl = cogl_display->winsys;
@ -1402,7 +1404,7 @@ meta_renderer_native_create_view (MetaRenderer *renderer,
cogl_display_egl->egl_context);
}
return view;
return META_RENDERER_VIEW (view_native);
}
static void

View File

@ -0,0 +1,43 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2020-2022 Dor Askayo
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* Written by:
* Dor Askayo <dor.askayo@gmail.com>
*/
#include "backends/native/meta-renderer-view-native.h"
struct _MetaRendererViewNative
{
MetaRendererView parent;
};
G_DEFINE_TYPE (MetaRendererViewNative, meta_renderer_view_native,
META_TYPE_RENDERER_VIEW)
static void
meta_renderer_view_native_class_init (MetaRendererViewNativeClass *klass)
{
}
static void
meta_renderer_view_native_init (MetaRendererViewNative *view_native)
{
}

View File

@ -0,0 +1,34 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2020-2022 Dor Askayo
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* Written by:
* Dor Askayo <dor.askayo@gmail.com>
*/
#ifndef META_RENDERER_VIEW_NATIVE_H
#define META_RENDERER_VIEW_NATIVE_H
#include "backends/meta-renderer-view.h"
#define META_TYPE_RENDERER_VIEW_NATIVE (meta_renderer_view_native_get_type ())
G_DECLARE_FINAL_TYPE (MetaRendererViewNative, meta_renderer_view_native,
META, RENDERER_VIEW_NATIVE, MetaRendererView)
#endif /* META_RENDERER_VIEW_NATIVE_H */