~ubuntu-branches/debian/sid/gtkglext/sid

« back to all changes in this revision

Viewing changes to examples/glade/simple.c

  • Committer: Bazaar Package Importer
  • Author(s): Marcelo E. Magallon
  • Date: 2004-04-03 17:43:17 UTC
  • Revision ID: james.westby@ubuntu.com-20040403174317-d5gb2d2gftaligp8
Tags: upstream-1.0.6
ImportĀ upstreamĀ versionĀ 1.0.6

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * simple.c:
 
3
 * Simple GtkGLExt example using libglade.
 
4
 *
 
5
 * written by Naofumi Yasufuku  <naofumi@users.sourceforge.net>
 
6
 */
 
7
 
 
8
#include <gtk/gtk.h>
 
9
#include <gtk/gtkgl.h>
 
10
#include <glade/glade.h>
 
11
 
 
12
#ifdef G_OS_WIN32
 
13
#define WIN32_LEAN_AND_MEAN 1
 
14
#include <windows.h>
 
15
#endif
 
16
 
 
17
#include <GL/gl.h>
 
18
#include <GL/glu.h>
 
19
 
 
20
gboolean
 
21
on_window1_delete_event (GtkWidget *widget,
 
22
                         GdkEvent  *event,
 
23
                         gpointer   user_data)
 
24
{
 
25
  gtk_main_quit ();
 
26
 
 
27
  return FALSE;
 
28
}
 
29
 
 
30
void
 
31
on_drawingarea1_realize (GtkWidget *widget,
 
32
                         gpointer   user_data)
 
33
{
 
34
  GdkGLContext *glcontext = gtk_widget_get_gl_context (widget);
 
35
  GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget);
 
36
 
 
37
  GLUquadricObj *qobj;
 
38
  static GLfloat light_diffuse[] = {1.0, 0.0, 0.0, 1.0};
 
39
  static GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0};
 
40
 
 
41
  /*** OpenGL BEGIN ***/
 
42
  if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext))
 
43
    return;
 
44
 
 
45
  qobj = gluNewQuadric ();
 
46
  gluQuadricDrawStyle (qobj, GLU_FILL);
 
47
  glNewList (1, GL_COMPILE);
 
48
  gluSphere (qobj, 1.0, 20, 20);
 
49
  glEndList ();
 
50
 
 
51
  glLightfv (GL_LIGHT0, GL_DIFFUSE, light_diffuse);
 
52
  glLightfv (GL_LIGHT0, GL_POSITION, light_position);
 
53
  glEnable (GL_LIGHTING);
 
54
  glEnable (GL_LIGHT0);
 
55
  glEnable (GL_DEPTH_TEST);
 
56
 
 
57
  glClearColor (1.0, 1.0, 1.0, 1.0);
 
58
  glClearDepth (1.0);
 
59
 
 
60
  glViewport (0, 0,
 
61
              widget->allocation.width, widget->allocation.height);
 
62
 
 
63
  glMatrixMode (GL_PROJECTION);
 
64
  glLoadIdentity ();
 
65
  gluPerspective (40.0, 1.0, 1.0, 10.0);
 
66
 
 
67
  glMatrixMode (GL_MODELVIEW);
 
68
  glLoadIdentity ();
 
69
  gluLookAt (0.0, 0.0, 3.0,
 
70
             0.0, 0.0, 0.0,
 
71
             0.0, 1.0, 0.0);
 
72
  glTranslatef (0.0, 0.0, -3.0);
 
73
 
 
74
  gdk_gl_drawable_gl_end (gldrawable);
 
75
  /*** OpenGL END ***/
 
76
}
 
77
 
 
78
gboolean
 
79
on_drawingarea1_configure_event (GtkWidget         *widget,
 
80
                                 GdkEventConfigure *event,
 
81
                                 gpointer           user_data)
 
82
{
 
83
  GdkGLContext *glcontext = gtk_widget_get_gl_context (widget);
 
84
  GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget);
 
85
 
 
86
  /*** OpenGL BEGIN ***/
 
87
  if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext))
 
88
    return FALSE;
 
89
 
 
90
  glViewport (0, 0,
 
91
              widget->allocation.width, widget->allocation.height);
 
92
 
 
93
  gdk_gl_drawable_gl_end (gldrawable);
 
94
  /*** OpenGL END ***/
 
95
 
 
96
  return FALSE;
 
97
}
 
98
 
 
99
gboolean
 
100
on_drawingarea1_expose_event (GtkWidget       *widget,
 
101
                              GdkEventExpose  *event,
 
102
                              gpointer         user_data)
 
103
{
 
104
  GdkGLContext *glcontext = gtk_widget_get_gl_context (widget);
 
105
  GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget);
 
106
 
 
107
  /*** OpenGL BEGIN ***/
 
108
  if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext))
 
109
    return FALSE;
 
110
 
 
111
  glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
112
 
 
113
  glCallList (1);
 
114
 
 
115
  if (gdk_gl_drawable_is_double_buffered (gldrawable))
 
116
    gdk_gl_drawable_swap_buffers (gldrawable);
 
117
  else
 
118
    glFlush ();
 
119
 
 
120
  gdk_gl_drawable_gl_end (gldrawable);
 
121
  /*** OpenGL END ***/
 
122
 
 
123
  return FALSE;
 
124
}
 
125
 
 
126
void
 
127
on_button1_clicked (GtkButton *button,
 
128
                    gpointer   user_data)
 
129
{
 
130
  gtk_main_quit ();
 
131
}
 
132
 
 
133
int
 
134
main (int   argc,
 
135
      char *argv[])
 
136
{
 
137
  GdkGLConfig *glconfig;
 
138
  GladeXML *xml;
 
139
  GtkWidget *window;
 
140
  GtkWidget *drawingarea;
 
141
 
 
142
  /*
 
143
   * Init GTK+ and GtkGLExt.
 
144
   */
 
145
 
 
146
  gtk_init (&argc, &argv);
 
147
  gtk_gl_init (&argc, &argv);
 
148
 
 
149
  /*
 
150
   * Configure OpenGL-capable visual.
 
151
   */
 
152
 
 
153
  /* Try double-buffered visual */
 
154
  glconfig = gdk_gl_config_new_by_mode (GDK_GL_MODE_RGB    |
 
155
                                        GDK_GL_MODE_DEPTH  |
 
156
                                        GDK_GL_MODE_DOUBLE);
 
157
  if (glconfig == NULL)
 
158
    {
 
159
      g_print ("*** Cannot find the double-buffered visual.\n");
 
160
      g_print ("*** Trying single-buffered visual.\n");
 
161
 
 
162
      /* Try single-buffered visual */
 
163
      glconfig = gdk_gl_config_new_by_mode (GDK_GL_MODE_RGB   |
 
164
                                            GDK_GL_MODE_DEPTH);
 
165
      if (glconfig == NULL)
 
166
        {
 
167
          g_print ("*** No appropriate OpenGL-capable visual found.\n");
 
168
          exit (1);
 
169
        }
 
170
    }
 
171
 
 
172
  /*
 
173
   * Load the interface.
 
174
   */
 
175
 
 
176
  xml = glade_xml_new ("simple.glade", NULL, NULL);
 
177
 
 
178
  /*
 
179
   * Connect the signals in the interface.
 
180
   */
 
181
 
 
182
  glade_xml_signal_autoconnect (xml);
 
183
 
 
184
  /*
 
185
   * Top-level window.
 
186
   */
 
187
 
 
188
  window = glade_xml_get_widget (xml, "window1");
 
189
 
 
190
  gtk_container_set_reallocate_redraws (GTK_CONTAINER (window), TRUE);
 
191
 
 
192
  /*
 
193
   * Drawing area.
 
194
   */
 
195
 
 
196
  drawingarea = glade_xml_get_widget (xml, "drawingarea1");
 
197
 
 
198
  /* Add OpenGL-capability to drawingarea1. */
 
199
  gtk_widget_set_gl_capability (drawingarea,
 
200
                                glconfig,
 
201
                                NULL,
 
202
                                TRUE,
 
203
                                GDK_GL_RGBA_TYPE);
 
204
 
 
205
  /*
 
206
   * Show top-level window, then run.
 
207
   */
 
208
 
 
209
  gtk_widget_show (window);
 
210
 
 
211
  gtk_main ();
 
212
 
 
213
  return 0;
 
214
}