gsk: Drop modelview/projection from GskRenderer API
The details of the modelview and projection matrices are only useful for the GL renderer; there's really no point in having those details available in the generic API — especially as the Cairo fallback renderer cannot really set up a complex modelview or a projection matrix.
This commit is contained in:
@@ -595,15 +595,16 @@ render_node_needs_render_target (GskRenderNode *node)
|
||||
}
|
||||
|
||||
static void
|
||||
gsk_gl_renderer_add_render_item (GskGLRenderer *self,
|
||||
GArray *render_items,
|
||||
GskRenderNode *node,
|
||||
RenderItem *parent)
|
||||
gsk_gl_renderer_add_render_item (GskGLRenderer *self,
|
||||
const graphene_matrix_t *projection,
|
||||
GArray *render_items,
|
||||
GskRenderNode *node,
|
||||
RenderItem *parent)
|
||||
{
|
||||
graphene_rect_t viewport;
|
||||
cairo_surface_t *surface;
|
||||
GskRenderNodeIter iter;
|
||||
graphene_matrix_t mv, projection;
|
||||
graphene_matrix_t mv;
|
||||
graphene_rect_t bounds;
|
||||
GskRenderNode *child;
|
||||
RenderItem item;
|
||||
@@ -650,6 +651,7 @@ gsk_gl_renderer_add_render_item (GskGLRenderer *self,
|
||||
/* The location of the item, in normalized world coordinates */
|
||||
gsk_render_node_get_world_matrix (node, &mv);
|
||||
graphene_matrix_multiply (&mv, &self->mvp, &item.mvp);
|
||||
item.z = project_item (projection, &mv);
|
||||
|
||||
item.opaque = gsk_render_node_is_opaque (node);
|
||||
item.opacity = gsk_render_node_get_opacity (node);
|
||||
@@ -740,9 +742,6 @@ gsk_gl_renderer_add_render_item (GskGLRenderer *self,
|
||||
vertex_data);
|
||||
}
|
||||
|
||||
gsk_renderer_get_projection (GSK_RENDERER (self), &projection);
|
||||
item.z = project_item (&projection, &mv);
|
||||
|
||||
GSK_NOTE (OPENGL, g_print ("%*sAdding node <%s>[%p] to render items\n",
|
||||
2 * node_depth (node), "",
|
||||
node->name != NULL ? node->name : "unnamed",
|
||||
@@ -756,12 +755,13 @@ gsk_gl_renderer_add_render_item (GskGLRenderer *self,
|
||||
out:
|
||||
gsk_render_node_iter_init (&iter, node);
|
||||
while (gsk_render_node_iter_next (&iter, &child))
|
||||
gsk_gl_renderer_add_render_item (self, render_items, child, ritem);
|
||||
gsk_gl_renderer_add_render_item (self, projection, render_items, child, ritem);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gsk_gl_renderer_validate_tree (GskGLRenderer *self,
|
||||
GskRenderNode *root)
|
||||
gsk_gl_renderer_validate_tree (GskGLRenderer *self,
|
||||
GskRenderNode *root,
|
||||
const graphene_matrix_t *projection)
|
||||
{
|
||||
int n_nodes;
|
||||
|
||||
@@ -780,7 +780,7 @@ gsk_gl_renderer_validate_tree (GskGLRenderer *self,
|
||||
gsk_gl_driver_begin_frame (self->gl_driver);
|
||||
|
||||
GSK_NOTE (OPENGL, g_print ("RenderNode -> RenderItem\n"));
|
||||
gsk_gl_renderer_add_render_item (self, self->render_items, root, NULL);
|
||||
gsk_gl_renderer_add_render_item (self, projection, self->render_items, root, NULL);
|
||||
|
||||
GSK_NOTE (OPENGL, g_print ("Total render items: %d of max:%d\n",
|
||||
self->render_items->len,
|
||||
@@ -819,9 +819,12 @@ gsk_gl_renderer_clear (GskGLRenderer *self)
|
||||
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
|
||||
}
|
||||
|
||||
#define ORTHO_NEAR_PLANE -10000
|
||||
#define ORTHO_FAR_PLANE 10000
|
||||
|
||||
static void
|
||||
gsk_gl_renderer_render (GskRenderer *renderer,
|
||||
GskRenderNode *root,
|
||||
gsk_gl_renderer_render (GskRenderer *renderer,
|
||||
GskRenderNode *root,
|
||||
GdkDrawingContext *context)
|
||||
{
|
||||
GskGLRenderer *self = GSK_GL_RENDERER (renderer);
|
||||
@@ -848,14 +851,20 @@ gsk_gl_renderer_render (GskRenderer *renderer,
|
||||
gsk_gl_renderer_create_buffers (self, viewport.size.width, viewport.size.height, scale_factor);
|
||||
gsk_gl_driver_end_frame (self->gl_driver);
|
||||
|
||||
gsk_renderer_get_modelview (renderer, &modelview);
|
||||
gsk_renderer_get_projection (renderer, &projection);
|
||||
/* Set up the modelview and projection matrices to fit our viewport */
|
||||
graphene_matrix_init_scale (&modelview, scale_factor, scale_factor, 1.0);
|
||||
graphene_matrix_init_ortho (&projection,
|
||||
0, viewport.size.width * scale_factor,
|
||||
viewport.size.height * scale_factor, 0,
|
||||
ORTHO_NEAR_PLANE,
|
||||
ORTHO_FAR_PLANE);
|
||||
|
||||
gsk_gl_renderer_update_frustum (self, &modelview, &projection);
|
||||
|
||||
get_gl_scaling_filters (GSK_RENDERER (self),
|
||||
&self->gl_min_filter,
|
||||
&self->gl_mag_filter);
|
||||
if (!gsk_gl_renderer_validate_tree (self, root))
|
||||
if (!gsk_gl_renderer_validate_tree (self, root, &projection))
|
||||
goto out;
|
||||
|
||||
gsk_gl_driver_begin_frame (self->gl_driver);
|
||||
|
||||
@@ -60,8 +60,6 @@ typedef struct
|
||||
GObject parent_instance;
|
||||
|
||||
graphene_rect_t viewport;
|
||||
graphene_matrix_t modelview;
|
||||
graphene_matrix_t projection;
|
||||
|
||||
GskScalingFilter min_filter;
|
||||
GskScalingFilter mag_filter;
|
||||
@@ -84,8 +82,6 @@ G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (GskRenderer, gsk_renderer, G_TYPE_OBJECT)
|
||||
|
||||
enum {
|
||||
PROP_VIEWPORT = 1,
|
||||
PROP_MODELVIEW,
|
||||
PROP_PROJECTION,
|
||||
PROP_MINIFICATION_FILTER,
|
||||
PROP_MAGNIFICATION_FILTER,
|
||||
PROP_AUTO_CLEAR,
|
||||
@@ -153,14 +149,6 @@ gsk_renderer_set_property (GObject *gobject,
|
||||
gsk_renderer_set_viewport (self, g_value_get_boxed (value));
|
||||
break;
|
||||
|
||||
case PROP_MODELVIEW:
|
||||
gsk_renderer_set_modelview (self, g_value_get_boxed (value));
|
||||
break;
|
||||
|
||||
case PROP_PROJECTION:
|
||||
gsk_renderer_set_projection (self, g_value_get_boxed (value));
|
||||
break;
|
||||
|
||||
case PROP_MINIFICATION_FILTER:
|
||||
gsk_renderer_set_scaling_filters (self, g_value_get_enum (value), priv->mag_filter);
|
||||
break;
|
||||
@@ -207,14 +195,6 @@ gsk_renderer_get_property (GObject *gobject,
|
||||
g_value_set_boxed (value, &priv->viewport);
|
||||
break;
|
||||
|
||||
case PROP_MODELVIEW:
|
||||
g_value_set_boxed (value, &priv->modelview);
|
||||
break;
|
||||
|
||||
case PROP_PROJECTION:
|
||||
g_value_set_boxed (value, &priv->projection);
|
||||
break;
|
||||
|
||||
case PROP_MINIFICATION_FILTER:
|
||||
g_value_set_enum (value, priv->min_filter);
|
||||
break;
|
||||
@@ -296,60 +276,6 @@ gsk_renderer_class_init (GskRendererClass *klass)
|
||||
G_PARAM_STATIC_STRINGS |
|
||||
G_PARAM_EXPLICIT_NOTIFY);
|
||||
|
||||
/**
|
||||
* GskRenderer:modelview:
|
||||
*
|
||||
* The initial modelview matrix used by the #GskRenderer.
|
||||
*
|
||||
* If set to %NULL, the identity matrix:
|
||||
*
|
||||
* |[<!-- language="plain"
|
||||
* | 1.0, 0.0, 0.0, 0.0 |
|
||||
* | 0.0, 1.0, 0.0, 0.0 |
|
||||
* | 0.0, 0.0, 1.0, 0.0 |
|
||||
* | 0.0, 0.0, 0.0, 1.0 |
|
||||
* ]|
|
||||
*
|
||||
* Is used instead.
|
||||
*
|
||||
* Since: 3.22
|
||||
*/
|
||||
gsk_renderer_properties[PROP_MODELVIEW] =
|
||||
g_param_spec_boxed ("modelview",
|
||||
"Modelview",
|
||||
"The modelview matrix used by the renderer",
|
||||
GRAPHENE_TYPE_MATRIX,
|
||||
G_PARAM_READWRITE |
|
||||
G_PARAM_STATIC_STRINGS |
|
||||
G_PARAM_EXPLICIT_NOTIFY);
|
||||
|
||||
/**
|
||||
* GskRenderer:projection:
|
||||
*
|
||||
* The projection matrix used by the #GskRenderer.
|
||||
*
|
||||
* If set to %NULL, the identity matrix:
|
||||
*
|
||||
* |[<!-- language="plain"
|
||||
* | 1.0, 0.0, 0.0, 0.0 |
|
||||
* | 0.0, 1.0, 0.0, 0.0 |
|
||||
* | 0.0, 0.0, 1.0, 0.0 |
|
||||
* | 0.0, 0.0, 0.0, 1.0 |
|
||||
* ]|
|
||||
*
|
||||
* Is used instead.
|
||||
*
|
||||
* Since: 3.22
|
||||
*/
|
||||
gsk_renderer_properties[PROP_PROJECTION] =
|
||||
g_param_spec_boxed ("projection",
|
||||
"Projection",
|
||||
"The projection matrix used by the renderer",
|
||||
GRAPHENE_TYPE_MATRIX,
|
||||
G_PARAM_READWRITE |
|
||||
G_PARAM_STATIC_STRINGS |
|
||||
G_PARAM_EXPLICIT_NOTIFY);
|
||||
|
||||
/**
|
||||
* GskRenderer:minification-filter:
|
||||
*
|
||||
@@ -489,9 +415,6 @@ gsk_renderer_init (GskRenderer *self)
|
||||
{
|
||||
GskRendererPrivate *priv = gsk_renderer_get_instance_private (self);
|
||||
|
||||
graphene_matrix_init_identity (&priv->modelview);
|
||||
graphene_matrix_init_identity (&priv->projection);
|
||||
|
||||
priv->profiler = gsk_profiler_new ();
|
||||
|
||||
priv->auto_clear = TRUE;
|
||||
@@ -555,101 +478,6 @@ gsk_renderer_get_viewport (GskRenderer *renderer,
|
||||
graphene_rect_init_from_rect (viewport, &priv->viewport);
|
||||
}
|
||||
|
||||
/**
|
||||
* gsk_renderer_set_modelview:
|
||||
* @renderer: a #GskRenderer
|
||||
* @modelview: the modelview matrix used by the @renderer
|
||||
*
|
||||
* Sets the initial modelview matrix used by the #GskRenderer.
|
||||
*
|
||||
* A modelview matrix defines the initial transformation imposed
|
||||
* on the scene graph.
|
||||
*
|
||||
* Since: 3.22
|
||||
*/
|
||||
void
|
||||
gsk_renderer_set_modelview (GskRenderer *renderer,
|
||||
const graphene_matrix_t *modelview)
|
||||
{
|
||||
GskRendererPrivate *priv = gsk_renderer_get_instance_private (renderer);
|
||||
|
||||
g_return_if_fail (GSK_IS_RENDERER (renderer));
|
||||
|
||||
if (modelview == NULL)
|
||||
graphene_matrix_init_identity (&priv->modelview);
|
||||
else
|
||||
graphene_matrix_init_from_matrix (&priv->modelview, modelview);
|
||||
|
||||
g_object_notify_by_pspec (G_OBJECT (renderer), gsk_renderer_properties[PROP_MODELVIEW]);
|
||||
}
|
||||
|
||||
/**
|
||||
* gsk_renderer_get_modelview:
|
||||
* @renderer: a #GskRenderer
|
||||
* @modelview: (out caller-allocates): return location for the modelview matrix
|
||||
*
|
||||
* Retrieves the modelview matrix used by the #GskRenderer.
|
||||
*
|
||||
* Since: 3.22
|
||||
*/
|
||||
void
|
||||
gsk_renderer_get_modelview (GskRenderer *renderer,
|
||||
graphene_matrix_t *modelview)
|
||||
{
|
||||
GskRendererPrivate *priv = gsk_renderer_get_instance_private (renderer);
|
||||
|
||||
g_return_if_fail (GSK_IS_RENDERER (renderer));
|
||||
g_return_if_fail (modelview != NULL);
|
||||
|
||||
graphene_matrix_init_from_matrix (modelview, &priv->modelview);
|
||||
}
|
||||
|
||||
/**
|
||||
* gsk_renderer_set_projection:
|
||||
* @renderer: a #GskRenderer
|
||||
* @projection: the projection matrix used by the @renderer
|
||||
*
|
||||
* Sets the projection matrix used by the #GskRenderer.
|
||||
*
|
||||
* Since: 3.22
|
||||
*/
|
||||
void
|
||||
gsk_renderer_set_projection (GskRenderer *renderer,
|
||||
const graphene_matrix_t *projection)
|
||||
{
|
||||
GskRendererPrivate *priv = gsk_renderer_get_instance_private (renderer);
|
||||
|
||||
g_return_if_fail (GSK_IS_RENDERER (renderer));
|
||||
|
||||
if (projection == NULL)
|
||||
graphene_matrix_init_identity (&priv->projection);
|
||||
else
|
||||
graphene_matrix_init_from_matrix (&priv->projection, projection);
|
||||
|
||||
g_object_notify_by_pspec (G_OBJECT (renderer), gsk_renderer_properties[PROP_PROJECTION]);
|
||||
}
|
||||
|
||||
/**
|
||||
* gsk_renderer_get_projection:
|
||||
* @renderer: a #GskRenderer
|
||||
* @projection: (out caller-allocates): return location for the projection matrix
|
||||
*
|
||||
* Retrieves the projection matrix used by the #GskRenderer.
|
||||
*
|
||||
* Since: 3.22
|
||||
*/
|
||||
void
|
||||
gsk_renderer_get_projection (GskRenderer *renderer,
|
||||
graphene_matrix_t *projection)
|
||||
{
|
||||
GskRendererPrivate *priv = gsk_renderer_get_instance_private (renderer);
|
||||
|
||||
g_return_if_fail (GSK_IS_RENDERER (renderer));
|
||||
g_return_if_fail (projection != NULL);
|
||||
|
||||
graphene_matrix_init_from_matrix (projection, &priv->projection);
|
||||
}
|
||||
|
||||
/**
|
||||
* gsk_renderer_set_scaling_filters:
|
||||
* @renderer: a #GskRenderer
|
||||
|
||||
@@ -49,18 +49,6 @@ GDK_AVAILABLE_IN_3_22
|
||||
void gsk_renderer_get_viewport (GskRenderer *renderer,
|
||||
graphene_rect_t *viewport);
|
||||
GDK_AVAILABLE_IN_3_22
|
||||
void gsk_renderer_set_projection (GskRenderer *renderer,
|
||||
const graphene_matrix_t *projection);
|
||||
GDK_AVAILABLE_IN_3_22
|
||||
void gsk_renderer_get_projection (GskRenderer *renderer,
|
||||
graphene_matrix_t *projection);
|
||||
GDK_AVAILABLE_IN_3_22
|
||||
void gsk_renderer_set_modelview (GskRenderer *renderer,
|
||||
const graphene_matrix_t *modelview);
|
||||
GDK_AVAILABLE_IN_3_22
|
||||
void gsk_renderer_get_modelview (GskRenderer *renderer,
|
||||
graphene_matrix_t *modelview);
|
||||
GDK_AVAILABLE_IN_3_22
|
||||
void gsk_renderer_set_scaling_filters (GskRenderer *renderer,
|
||||
GskScalingFilter min_filter,
|
||||
GskScalingFilter mag_filter);
|
||||
|
||||
@@ -159,9 +159,6 @@
|
||||
* instead.
|
||||
*/
|
||||
|
||||
#define ORTHO_NEAR_PLANE -10000
|
||||
#define ORTHO_FAR_PLANE 10000
|
||||
|
||||
typedef struct _GtkWindowPopover GtkWindowPopover;
|
||||
|
||||
struct _GtkWindowPopover
|
||||
@@ -7327,9 +7324,6 @@ _gtk_window_set_allocation (GtkWindow *window,
|
||||
if (priv->renderer != NULL)
|
||||
{
|
||||
graphene_rect_t viewport;
|
||||
graphene_matrix_t projection;
|
||||
graphene_matrix_t modelview;
|
||||
graphene_point3d_t tmp;
|
||||
int scale;
|
||||
|
||||
scale = gtk_widget_get_scale_factor (widget);
|
||||
@@ -7337,17 +7331,6 @@ _gtk_window_set_allocation (GtkWindow *window,
|
||||
|
||||
graphene_rect_init (&viewport, 0, 0, allocation->width, allocation->height);
|
||||
gsk_renderer_set_viewport (priv->renderer, &viewport);
|
||||
|
||||
graphene_matrix_init_ortho (&projection,
|
||||
0, allocation->width * scale,
|
||||
allocation->height * scale, 0,
|
||||
ORTHO_NEAR_PLANE,
|
||||
ORTHO_FAR_PLANE);
|
||||
gsk_renderer_set_projection (priv->renderer, &projection);
|
||||
|
||||
graphene_matrix_init_translate (&modelview,
|
||||
graphene_point3d_init (&tmp, 0.f, 0.f, 0.f));
|
||||
gsk_renderer_set_modelview (priv->renderer, &modelview);
|
||||
}
|
||||
|
||||
get_shadow_width (window, &window_border);
|
||||
|
||||
Reference in New Issue
Block a user