text: /*
   * GStreamer
   * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
   *
   * This library is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Library General Public
   * License as published by the Free Software Foundation; either
   * version 2 of the License, or (at your option) any later version.
   *
   * This library 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
   * Library General Public License for more details.
   *
   * You should have received a copy of the GNU Library General Public
   * License along with this library; if not, write to the
   * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
   * Boston, MA 02110-1301, USA.
   */
  
  #ifndef _GST_GL_RENDERBUFFER_H_
  #define _GST_GL_RENDERBUFFER_H_
  
  #include <gst/gl/gstglbasememory.h>
  
  G_BEGIN_DECLS
  
  #define GST_TYPE_GL_RENDERBUFFER_ALLOCATOR (gst_gl_renderbuffer_allocator_get_type())
  GST_GL_API GType gst_gl_renderbuffer_allocator_get_type(void);
  
  #define GST_IS_GL_RENDERBUFFER_ALLOCATOR(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GL_RENDERBUFFER_ALLOCATOR))
  #define GST_IS_GL_RENDERBUFFER_ALLOCATOR_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_GL_RENDERBUFFER_ALLOCATOR))
  #define GST_GL_RENDERBUFFER_ALLOCATOR_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_GL_RENDERBUFFER_ALLOCATOR, GstGLRenderbufferAllocatorClass))
  #define GST_GL_RENDERBUFFER_ALLOCATOR(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_GL_RENDERBUFFER_ALLOCATOR, GstGLRenderbufferAllocator))
  #define GST_GL_RENDERBUFFER_ALLOCATOR_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_GL_RENDERBUFFER_ALLOCATOR, GstGLRenderbufferAllocatorClass))
  #define GST_GL_RENDERBUFFER_ALLOCATOR_CAST(obj)            ((GstGLRenderbufferAllocator *)(obj))
  
  #define GST_GL_RENDERBUFFER_CAST(obj) ((GstGLRenderbuffer *) obj)
  
  /**
   * GST_GL_RENDERBUFFER_ALLOCATOR_NAME:
   *
   * The name of the GL renderbuffer allocator
   */
  #define GST_GL_RENDERBUFFER_ALLOCATOR_NAME   "GLRenderbuffer"
  
  /**
   * GstGLRenderbuffer:
   * @mem: the parent object
   * @renderbuffer_id: the GL texture id for this memory
   * @renderbuffer_type: the texture type
   * @width: the width
   * @height: the height
   *
   * Represents information about a GL renderbuffer
   */
  struct _GstGLRenderbuffer
  {
    GstGLBaseMemory           mem;
  
    guint                     renderbuffer_id;
    GstGLFormat               renderbuffer_format;
    guint                     width;
    guint                     height;
  
    /* <protected> */
    gboolean                  renderbuffer_wrapped;
  
    /* <private> */
    gpointer                  _padding[GST_PADDING];
  };
  
  /**
   * GstGLRenderbufferAllocator
   *
   * Opaque #GstGLRenderbufferAllocator struct
   */
  struct _GstGLRenderbufferAllocator
  {
    GstGLBaseMemoryAllocator parent;
  
    /* <private> */
    gpointer                  _padding[GST_PADDING];
  };
  
  /**
   * GstGLRenderbufferAllocatorClass:
   *
   * The #GstGLRenderbufferAllocatorClass only contains private data
   */
  struct _GstGLRenderbufferAllocatorClass
  {
    GstGLBaseMemoryAllocatorClass             parent_class;
  
    /* <private> */
    gpointer                  _padding[GST_PADDING];
  };
  
  #include <gst/gl/gstglbasememory.h>
  
  GST_GL_API GType gst_gl_renderbuffer_allocation_params_get_type (void);
  #define GST_TYPE_RENDERBUFFER_ALLOCATION_PARAMS (gst_gl_renderbuffer_allocation_params_get_type)
  
  typedef struct
  {
    GstGLAllocationParams parent;
  
    GstGLFormat renderbuffer_format;
    guint width;
    guint height;
  
    /* <private> */
    gpointer _padding[GST_PADDING];
  } GstGLRenderbufferAllocationParams;
  
  GST_GL_API
  GstGLRenderbufferAllocationParams *     gst_gl_renderbuffer_allocation_params_new           (GstGLContext * context,
                                                                                               GstAllocationParams * alloc_params,
                                                                                               GstGLFormat renderbuffer_format,
                                                                                               guint width,
                                                                                               guint height);
  
  GST_GL_API
  GstGLRenderbufferAllocationParams *     gst_gl_renderbuffer_allocation_params_new_wrapped   (GstGLContext * context,
                                                                                               GstAllocationParams * alloc_params,
                                                                                               GstGLFormat renderbuffer_format,
                                                                                               guint width,
                                                                                               guint height,
                                                                                               gpointer gl_handle,
                                                                                               gpointer user_data,
                                                                                               GDestroyNotify notify);
  
  GST_GL_API
  void            gst_gl_renderbuffer_init_once   (void);
  
  GST_GL_API
  gboolean        gst_is_gl_renderbuffer          (GstMemory * mem);
  
  /* accessors */
  GST_GL_API
  gint                    gst_gl_renderbuffer_get_width     (GstGLRenderbuffer * gl_mem);
  
  GST_GL_API
  gint                    gst_gl_renderbuffer_get_height    (GstGLRenderbuffer * gl_mem);
  
  GST_GL_API
  GstGLFormat             gst_gl_renderbuffer_get_format    (GstGLRenderbuffer * gl_mem);
  
  GST_GL_API
  guint                   gst_gl_renderbuffer_get_id        (GstGLRenderbuffer * gl_mem);
  
  G_END_DECLS
  
  #endif /* _GST_GL_RENDERBUFFER_H_ */
  