1/* GTK - The GIMP Toolkit
2 *
3 * gtkglarea.h: A GL drawing area
4 *
5 * Copyright © 2014 Emmanuele Bassi
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21#ifndef __GTK_GL_AREA_H__
22#define __GTK_GL_AREA_H__
23
24#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
25#error "Only <gtk/gtk.h> can be included directly."
26#endif
27
28#include <gtk/gtkwidget.h>
29
30G_BEGIN_DECLS
31
32#define GTK_TYPE_GL_AREA (gtk_gl_area_get_type ())
33#define GTK_GL_AREA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_GL_AREA, GtkGLArea))
34#define GTK_IS_GL_AREA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_GL_AREA))
35#define GTK_GL_AREA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_GL_AREA, GtkGLAreaClass))
36#define GTK_IS_GL_AREA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_GL_AREA))
37#define GTK_GL_AREA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_GL_AREA, GtkGLAreaClass))
38
39typedef struct _GtkGLArea GtkGLArea;
40typedef struct _GtkGLAreaClass GtkGLAreaClass;
41
42struct _GtkGLArea
43{
44 /*< private >*/
45 GtkWidget parent_instance;
46};
47
48/**
49 * GtkGLAreaClass:
50 * @render: class closure for the `GtkGLArea::render` signal
51 * @resize: class closeure for the `GtkGLArea::resize` signal
52 * @create_context: class closure for the `GtkGLArea::create-context` signal
53 *
54 * The `GtkGLAreaClass` structure contains only private data.
55 */
56struct _GtkGLAreaClass
57{
58 /*< private >*/
59 GtkWidgetClass parent_class;
60
61 /*< public >*/
62 gboolean (* render) (GtkGLArea *area,
63 GdkGLContext *context);
64 void (* resize) (GtkGLArea *area,
65 int width,
66 int height);
67 GdkGLContext * (* create_context) (GtkGLArea *area);
68
69 /*< private >*/
70 gpointer _padding[8];
71};
72
73GDK_AVAILABLE_IN_ALL
74GType gtk_gl_area_get_type (void) G_GNUC_CONST;
75
76GDK_AVAILABLE_IN_ALL
77GtkWidget * gtk_gl_area_new (void);
78
79GDK_AVAILABLE_IN_ALL
80void gtk_gl_area_set_use_es (GtkGLArea *area,
81 gboolean use_es);
82GDK_AVAILABLE_IN_ALL
83gboolean gtk_gl_area_get_use_es (GtkGLArea *area);
84GDK_AVAILABLE_IN_ALL
85void gtk_gl_area_set_required_version (GtkGLArea *area,
86 int major,
87 int minor);
88GDK_AVAILABLE_IN_ALL
89void gtk_gl_area_get_required_version (GtkGLArea *area,
90 int *major,
91 int *minor);
92GDK_AVAILABLE_IN_ALL
93gboolean gtk_gl_area_get_has_depth_buffer (GtkGLArea *area);
94GDK_AVAILABLE_IN_ALL
95void gtk_gl_area_set_has_depth_buffer (GtkGLArea *area,
96 gboolean has_depth_buffer);
97GDK_AVAILABLE_IN_ALL
98gboolean gtk_gl_area_get_has_stencil_buffer (GtkGLArea *area);
99GDK_AVAILABLE_IN_ALL
100void gtk_gl_area_set_has_stencil_buffer (GtkGLArea *area,
101 gboolean has_stencil_buffer);
102GDK_AVAILABLE_IN_ALL
103gboolean gtk_gl_area_get_auto_render (GtkGLArea *area);
104GDK_AVAILABLE_IN_ALL
105void gtk_gl_area_set_auto_render (GtkGLArea *area,
106 gboolean auto_render);
107GDK_AVAILABLE_IN_ALL
108void gtk_gl_area_queue_render (GtkGLArea *area);
109
110
111GDK_AVAILABLE_IN_ALL
112GdkGLContext * gtk_gl_area_get_context (GtkGLArea *area);
113
114GDK_AVAILABLE_IN_ALL
115void gtk_gl_area_make_current (GtkGLArea *area);
116GDK_AVAILABLE_IN_ALL
117void gtk_gl_area_attach_buffers (GtkGLArea *area);
118
119GDK_AVAILABLE_IN_ALL
120void gtk_gl_area_set_error (GtkGLArea *area,
121 const GError *error);
122GDK_AVAILABLE_IN_ALL
123GError * gtk_gl_area_get_error (GtkGLArea *area);
124
125G_END_DECLS
126
127#endif /* __GTK_GL_AREA_H__ */
128

source code of gtk/gtk/gtkglarea.h