Blame gegl/buffer/gegl-sampler.h

Packit bc1512
/* This file is part of GEGL
Packit bc1512
 *
Packit bc1512
 * GEGL is free software; you can redistribute it and/or
Packit bc1512
 * modify it under the terms of the GNU Lesser General Public
Packit bc1512
 * License as published by the Free Software Foundation; either
Packit bc1512
 * version 3 of the License, or (at your option) any later version.
Packit bc1512
 *
Packit bc1512
 * GEGL is distributed in the hope that it will be useful,
Packit bc1512
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit bc1512
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit bc1512
 * Lesser General Public License for more details.
Packit bc1512
 *
Packit bc1512
 * You should have received a copy of the GNU Lesser General Public
Packit bc1512
 * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
Packit bc1512
 *
Packit bc1512
 */
Packit bc1512
Packit bc1512
#ifndef __GEGL_SAMPLER_H__
Packit bc1512
#define __GEGL_SAMPLER_H__
Packit bc1512
Packit bc1512
#include <glib-object.h>
Packit bc1512
#include <babl/babl.h>
Packit bc1512
Packit bc1512
/* this file needs to be included by gegl-buffer-private */
Packit bc1512
Packit bc1512
G_BEGIN_DECLS
Packit bc1512
Packit bc1512
#define GEGL_TYPE_SAMPLER            (gegl_sampler_get_type ())
Packit bc1512
#define GEGL_SAMPLER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEGL_TYPE_SAMPLER, GeglSampler))
Packit bc1512
#define GEGL_SAMPLER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  GEGL_TYPE_SAMPLER, GeglSamplerClass))
Packit bc1512
#define GEGL_IS_SAMPLER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEGL_TYPE_SAMPLER))
Packit bc1512
#define GEGL_IS_SAMPLER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  GEGL_TYPE_SAMPLER))
Packit bc1512
#define GEGL_SAMPLER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  GEGL_TYPE_SAMPLER, GeglSamplerClass))
Packit bc1512
#define GEGL_SAMPLER_MIPMAP_LEVELS   3
Packit bc1512
Packit bc1512
typedef struct _GeglSamplerClass GeglSamplerClass;
Packit bc1512
Packit bc1512
struct _GeglSampler
Packit bc1512
{
Packit bc1512
  GObject       parent_instance;
Packit bc1512
  void (* get) (GeglSampler *self,
Packit bc1512
                gdouble      x,
Packit bc1512
                gdouble      y,
Packit bc1512
                GeglMatrix2 *scale,
Packit bc1512
                void        *output);
Packit bc1512
  /* we cache the getter in the instance, (being able to return the
Packit bc1512
     function pointer itself and cache it outside the calling loop
Packit bc1512
     would be even quicker.
Packit bc1512
   */
Packit bc1512
Packit bc1512
  /*< private >*/
Packit bc1512
  GeglBuffer    *buffer;
Packit bc1512
  const Babl    *format;
Packit bc1512
  const Babl    *interpolate_format;
Packit bc1512
  const Babl    *fish;
Packit bc1512
  GeglRectangle  context_rect[GEGL_SAMPLER_MIPMAP_LEVELS];
Packit bc1512
  gpointer       sampler_buffer[GEGL_SAMPLER_MIPMAP_LEVELS];
Packit bc1512
  GeglRectangle  sampler_rectangle[GEGL_SAMPLER_MIPMAP_LEVELS];
Packit bc1512
  gdouble        x; /* mirrors the currently requested */
Packit bc1512
  gdouble        y; /* coordinates in the instance     */
Packit bc1512
Packit bc1512
  gpointer       padding[8]; /* eat from the padding if adding to the struct */
Packit bc1512
};
Packit bc1512
Packit bc1512
struct _GeglSamplerClass
Packit bc1512
{
Packit bc1512
  GObjectClass  parent_class;
Packit bc1512
Packit bc1512
  void (* prepare)   (GeglSampler *self);
Packit bc1512
  void (* get)       (GeglSampler *self,
Packit bc1512
                      gdouble      x,
Packit bc1512
                      gdouble      y,
Packit bc1512
                      GeglMatrix2 *scale,
Packit bc1512
                      void        *output);
Packit bc1512
 void  (*set_buffer) (GeglSampler  *self,
Packit bc1512
                      GeglBuffer   *buffer);
Packit bc1512
Packit bc1512
 gpointer       padding[8]; /* eat from the padding if adding to the struct */
Packit bc1512
};
Packit bc1512
Packit bc1512
GType gegl_sampler_get_type    (void) G_GNUC_CONST;
Packit bc1512
Packit bc1512
/* virtual method invokers */
Packit bc1512
void  gegl_sampler_prepare     (GeglSampler *self);
Packit bc1512
void  gegl_sampler_set_buffer  (GeglSampler *self,
Packit bc1512
                                GeglBuffer  *buffer);
Packit bc1512
Packit bc1512
void  gegl_sampler_get         (GeglSampler   *self,
Packit bc1512
                                gdouble        x,
Packit bc1512
                                gdouble        y,
Packit bc1512
                                GeglMatrix2   *scale,
Packit bc1512
                                void          *output,
Packit bc1512
                                GeglAbyssPolicy repeat_mode);
Packit bc1512
Packit bc1512
gfloat * gegl_sampler_get_from_buffer (GeglSampler *sampler,
Packit bc1512
                                       gint         x,
Packit bc1512
                                       gint         y);
Packit bc1512
gfloat * gegl_sampler_get_from_mipmap (GeglSampler *sampler,
Packit bc1512
                                       gint         x,
Packit bc1512
                                       gint         y,
Packit bc1512
                                       gint         level);
Packit bc1512
gfloat *
Packit bc1512
gegl_sampler_get_ptr (GeglSampler         *sampler,
Packit bc1512
                      gint                 x,
Packit bc1512
                      gint                 y);
Packit bc1512
Packit bc1512
G_END_DECLS
Packit bc1512
Packit bc1512
#endif /* __GEGL_SAMPLER_H__ */