static void gegl_sampler_linear_init (GeglSamplerLinear *self) { GEGL_SAMPLER (self)->level[0].context_rect.x = -1 - LINEAR_EXTRA_ELBOW_ROOM; GEGL_SAMPLER (self)->level[0].context_rect.y = -1 - LINEAR_EXTRA_ELBOW_ROOM; GEGL_SAMPLER (self)->level[0].context_rect.width = 3 + 2*LINEAR_EXTRA_ELBOW_ROOM; GEGL_SAMPLER (self)->level[0].context_rect.height = 3 + 2*LINEAR_EXTRA_ELBOW_ROOM; GEGL_SAMPLER (self)->interpolate_format = gegl_babl_rgbA_linear_float (); }
/* * It would seem that x=y=0 and width=height=1 should be enough, but * apparently safety w.r.t. round off or something else makes things * work better with width=height=3 and centering. */ static void gegl_sampler_nearest_init (GeglSamplerNearest *self) { GEGL_SAMPLER (self)->level[0].context_rect.x = 0; GEGL_SAMPLER (self)->level[0].context_rect.y = 0; GEGL_SAMPLER (self)->level[0].context_rect.width = 1; GEGL_SAMPLER (self)->level[0].context_rect.height = 1; GEGL_SAMPLER (self)->interpolate_format = gegl_babl_rgbA_linear_float (); }
GeglSampler * gegl_buffer_sampler_new_at_level (GeglBuffer *buffer, const Babl *format, GeglSamplerType sampler_type, gint level) { GeglSampler *sampler; GType desired_type; if (format == NULL) format = gegl_babl_rgbA_linear_float (); desired_type = gegl_sampler_gtype_from_enum (sampler_type); sampler = g_object_new (desired_type, "buffer", buffer, "format", format, "level", level, NULL); gegl_sampler_prepare (sampler); return sampler; }