bool graph3d_gtk::screen_create(void) { /* Attribute list for gtkglarea widget. Specifies a list of Boolean attributes and enum/integer attribute/value pairs. The last attribute must be GDK_GL_NONE. See glXChooseVisual manpage for further explanation. */ int attrlist[] = { GDK_GL_RGBA, GDK_GL_RED_SIZE,1, GDK_GL_GREEN_SIZE,1, GDK_GL_BLUE_SIZE,1, GDK_GL_DOUBLEBUFFER, GDK_GL_NONE }; /* Check if OpenGL is supported. */ if(gdk_gl_query() == FALSE) { PERROR(FALSE, "OpenGL is not supported!"); return(FALSE); } assert(p_area == NULL); /* Create new OpenGL widget. */ p_area = GTK_WIDGET(gtk_gl_area_new(attrlist)); if(!p_area) { PERROR(true, "gtk_gl_area_new failed!"); } gtk_widget_set_size_request(GTK_WIDGET(p_area), graphics_width, graphics_height); screen_resize(graphics_width, graphics_height); return(TRUE); }
int main(int argc, char *argv[]) { srand(time(NULL)); mk_points(points, n_points); gtk_init(&argc, &argv); GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); /* set up GL window */ GtkWidget *gl_area = gtk_gl_area_new(); gtk_gl_area_set_has_depth_buffer(GTK_GL_AREA(gl_area), TRUE); g_signal_connect(gl_area, "create-context", G_CALLBACK(create_context), NULL); g_signal_connect(gl_area, "realize", G_CALLBACK(realize), NULL); g_signal_connect(gl_area, "render", G_CALLBACK(render), NULL); g_signal_connect(gl_area, "resize", G_CALLBACK(resize), NULL); g_signal_connect(gl_area, "unrealize", G_CALLBACK(unrealize), NULL); gtk_container_add(GTK_CONTAINER(window), gl_area); gtk_widget_show_all(window); gtk_main(); }
native_handle _chisel_native_openglview_create( ) { #ifndef _WIN32 int attrlist[] = { GDK_GL_RGBA, GDK_GL_RED_SIZE,1, GDK_GL_GREEN_SIZE,1, GDK_GL_BLUE_SIZE,1, GDK_GL_DOUBLEBUFFER, GDK_GL_NONE }; assert( gdk_gl_query() && "Application requires OpenGL" ); GtkWidget *glarea = GTK_WIDGET(gtk_gl_area_new(attrlist)); #else GtkWidget *glarea = GTK_WIDGET(gtk_drawing_area_new( )); #endif _chisel_gtk_setup_events( glarea ); gtk_widget_set_events( glarea, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK ); gtk_signal_connect( GTK_OBJECT(glarea), "expose_event", GTK_SIGNAL_FUNC(expose), NULL ); gtk_signal_connect( GTK_OBJECT(glarea), "configure_event", GTK_SIGNAL_FUNC(reshape), NULL ); gtk_signal_connect( GTK_OBJECT(glarea), "realize", GTK_SIGNAL_FUNC(reshape), NULL ); return (native_handle)glarea; }
int main (int argc, char **argv) { GtkWidget *window, *glarea; int attrlist[] = { GDK_GL_RGBA, GDK_GL_RED_SIZE, 1, GDK_GL_GREEN_SIZE, 1, GDK_GL_BLUE_SIZE, 1, GDK_GL_DOUBLEBUFFER, GDK_GL_NONE }; gtk_init (&argc, &argv); if (gdk_gl_query () == FALSE) return 0; window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW(window), "Nuke Version 1.0"); gtk_container_set_border_width (GTK_CONTAINER(window), 15); g_signal_connect (window, "delete_event", G_CALLBACK (gtk_main_quit), NULL); /* You should always delete gtk_gl_area widgets before exit or else GLX contexts are left undeleted, this may cause problems (=core dump) in some systems. Destroy method of objects is not automatically called on exit. You need to manually enable this feature. Do gtk_quit_add_destroy() for all your top level windows unless you are certain that they get destroy signal by other means. */ gtk_quit_add_destroy (1, GTK_OBJECT(window)); glarea = GTK_WIDGET(gtk_gl_area_new (attrlist)); gtk_widget_set_size_request (GTK_WIDGET(glarea), 1000, 800); gtk_widget_set_events (GTK_WIDGET(glarea), GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK); g_signal_connect (glarea, "expose_event", G_CALLBACK(draw), NULL); g_signal_connect (glarea, "configure_event", G_CALLBACK(reshape), NULL); g_signal_connect (glarea, "realize", G_CALLBACK(init), NULL); gtk_container_add (GTK_CONTAINER(window), GTK_WIDGET(glarea)); gtk_widget_show (GTK_WIDGET(glarea)); gtk_widget_show (GTK_WIDGET(window)); gtk_main (); return 0; }
void GLArea::create_gl_area(int* attrList) { GtkWidget* gtkglarea = gtk_gl_area_new(attrList); m_glarea = Glib::wrap(GTK_DRAWING_AREA(gtkglarea)); m_glarea->add_events( Gdk::ALL_EVENTS_MASK); m_glarea->signal_realize().connect( sigc::mem_fun(this, &GLArea::glarea_on_realize)); m_glarea->signal_expose_event().connect( sigc::mem_fun(this, &GLArea::glarea_on_expose_event)); m_glarea->signal_configure_event().connect( sigc::mem_fun(this, &GLArea::glarea_on_configure_event)); add(*m_glarea); m_glarea->show(); }
GtkWidget * create_glarea_window (GtkWidget *do_widget) { GtkWidget *window, *box, *button, *controls; int i; window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget)); gtk_window_set_title (GTK_WINDOW (window), "OpenGL Area"); gtk_window_set_default_size (GTK_WINDOW (window), 400, 600); g_signal_connect (window, "destroy", G_CALLBACK (close_window), NULL); box = gtk_box_new (GTK_ORIENTATION_VERTICAL, FALSE); g_object_set (box, "margin", 12, NULL); gtk_box_set_spacing (GTK_BOX (box), 6); gtk_container_add (GTK_CONTAINER (window), box); gl_area = gtk_gl_area_new (); gtk_widget_set_hexpand (gl_area, TRUE); gtk_widget_set_vexpand (gl_area, TRUE); gtk_container_add (GTK_CONTAINER (box), gl_area); /* We need to initialize and free GL resources, so we use * the realize and unrealize signals on the widget */ g_signal_connect (gl_area, "realize", G_CALLBACK (realize), NULL); g_signal_connect (gl_area, "unrealize", G_CALLBACK (unrealize), NULL); /* The main "draw" call for GtkGLArea */ g_signal_connect (gl_area, "render", G_CALLBACK (render), NULL); controls = gtk_box_new (GTK_ORIENTATION_VERTICAL, FALSE); gtk_container_add (GTK_CONTAINER (box), controls); gtk_widget_set_hexpand (controls, TRUE); for (i = 0; i < N_AXIS; i++) gtk_container_add (GTK_CONTAINER (controls), create_axis_slider (i)); button = gtk_button_new_with_label ("Quit"); gtk_widget_set_hexpand (button, TRUE); gtk_container_add (GTK_CONTAINER (box), button); g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_widget_destroy), window); return window; }
//A foprogram int main(int argc, char **argv) { GtkWidget *window, *glarea; int attrlist[] = { GDK_GL_RGBA, GDK_GL_RED_SIZE, 1, GDK_GL_GREEN_SIZE, 1, GDK_GL_BLUE_SIZE, 1, GDK_GL_DOUBLEBUFFER, GDK_GL_NONE }; //Meghivjuk az init fuggvenyt gtk_init(&argc, &argv); if (gdk_gl_query() == FALSE) return 0; //Letrehozunk egy uj ablakot window = gtk_window_new(GTK_WINDOW_TOPLEVEL); //Megadjuk az ablak cimet gtk_window_set_title(GTK_WINDOW(window), "Gtk+Opengl"); //Beallitjuk a szelek vastagsagat gtk_container_set_border_width(GTK_CONTAINER(window), 10); //Kilepeskor meghivja a delete_event-t g_signal_connect(window, "delete_event", G_CALLBACK (gtk_main_quit), NULL); gtk_quit_add_destroy(1, GTK_OBJECT(window) ); //Letrehozom az OpenGl rajzfeluletet glarea = GTK_WIDGET(gtk_gl_area_new (attrlist)); gtk_widget_set_size_request(GTK_WIDGET(glarea), 100, 100); //Az ablakra vontakozo esemenyek eseten a `glarea`-t is ujrarajzoljuk gtk_widget_set_events(GTK_WIDGET(glarea), GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK); g_signal_connect(glarea, "expose_event", G_CALLBACK(draw), NULL); g_signal_connect(glarea, "configure_event", G_CALLBACK(reshape), NULL); g_signal_connect(glarea, "realize", G_CALLBACK(init), NULL); //Az ablakhoz hozzaadok egy tarolot, majd ehhez a tarolohoz egy rajzfeluletet gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(glarea) ); gtk_widget_show(GTK_WIDGET(glarea) ); gtk_widget_show(GTK_WIDGET(window) ); gtk_main(); return 0; }
GtkWidget * create_glarea_window (GtkWidget *do_widget) { GtkWidget *window, *box, *button, *controls; int i; window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_screen (GTK_WINDOW (window), gtk_widget_get_screen (do_widget)); gtk_window_set_title (GTK_WINDOW (window), "GtkGLArea - Golden Triangle"); gtk_window_set_default_size (GTK_WINDOW (window), 400, 400); gtk_container_set_border_width (GTK_CONTAINER (window), 12); g_signal_connect (window, "destroy", G_CALLBACK (close_window), NULL); box = gtk_box_new (GTK_ORIENTATION_VERTICAL, FALSE); gtk_box_set_spacing (GTK_BOX (box), 6); gtk_container_add (GTK_CONTAINER (window), box); gl_area = gtk_gl_area_new (); gtk_widget_set_hexpand (gl_area, TRUE); gtk_widget_set_vexpand (gl_area, TRUE); gtk_container_add (GTK_CONTAINER (box), gl_area); /* the main "draw" call for GtkGLArea */ g_signal_connect (gl_area, "render", G_CALLBACK (render), NULL); controls = gtk_box_new (GTK_ORIENTATION_VERTICAL, FALSE); gtk_container_add (GTK_CONTAINER (box), controls); gtk_widget_set_hexpand (controls, TRUE); for (i = 0; i < N_AXIS; i++) gtk_container_add (GTK_CONTAINER (controls), create_axis_slider (i)); button = gtk_button_new_with_label ("Quit"); gtk_widget_set_hexpand (button, TRUE); gtk_container_add (GTK_CONTAINER (box), button); g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_widget_destroy), window); return window; }
static void gt_player_mpv_init(GtPlayerMpv* self) { GtPlayerMpvPrivate* priv = gt_player_mpv_get_instance_private(self); priv->mpv = mpv_create(); priv->opengl_area = gtk_gl_area_new(); priv->opengl_ready = FALSE; priv->chat_view = GTK_WIDGET(gt_chat_new()); check_mpv_error(mpv_set_option_string(priv->mpv, "vo", "opengl-cb")); check_mpv_error(mpv_initialize(priv->mpv)); priv->mpv_opengl = mpv_get_sub_api(priv->mpv, MPV_SUB_API_OPENGL_CB); mpv_opengl_cb_set_update_callback(priv->mpv_opengl, (mpv_opengl_cb_update_fn) opengl_cb, self); g_signal_connect(priv->opengl_area, "render", G_CALLBACK(render_cb), self); gtk_container_add(GTK_CONTAINER(self), priv->opengl_area); gtk_widget_show_all(GTK_WIDGET(self)); }
static void gt_player_backend_mpv_opengl_init(GtPlayerBackendMpvOpenGL* self) { GtPlayerBackendMpvOpenGLPrivate* priv = gt_player_backend_mpv_opengl_get_instance_private(self); MESSAGE("Init"); setlocale(LC_NUMERIC, "C"); priv->widget = gtk_gl_area_new(); priv->mpv = mpv_create(); g_object_set(priv->widget, "expand", TRUE, NULL); gtk_widget_add_events(priv->widget, GDK_BUTTON_PRESS_MASK); check_mpv_error(mpv_set_option_string(priv->mpv, "audio-client-name", "GNOME Twitch")); check_mpv_error(mpv_set_option_string(priv->mpv, "title", "")); check_mpv_error(mpv_set_option_string(priv->mpv, "vo", "opengl-cb")); check_mpv_error(mpv_set_option_string(priv->mpv, "softvol", "yes")); check_mpv_error(mpv_set_option_string(priv->mpv, "softvol-max", "100")); check_mpv_error(mpv_observe_property(priv->mpv, 0, "volume", MPV_FORMAT_DOUBLE)); check_mpv_error(mpv_observe_property(priv->mpv, 0, "cache-buffering-state", MPV_FORMAT_INT64)); check_mpv_error(mpv_initialize(priv->mpv)); mpv_set_wakeup_callback(priv->mpv, mpv_wakeup_cb, self); priv->mpv_opengl = mpv_get_sub_api(priv->mpv, MPV_SUB_API_OPENGL_CB); mpv_opengl_cb_set_update_callback(priv->mpv_opengl, (mpv_opengl_cb_update_fn) opengl_cb, self); g_signal_connect(priv->widget, "destroy", G_CALLBACK(widget_destroy_cb), self); g_signal_connect(priv->widget, "realize", G_CALLBACK(realise_oneshot_cb), self); g_signal_connect(priv->widget, "render", G_CALLBACK(render_cb), self); }
int main(int argc, char **argv) { GtkWidget *window,*vbox,*logo,*glarea; /* Attribute list for gtkglarea widget. Specifies a list of Boolean attributes and enum/integer attribute/value pairs. The last attribute must be GDK_GL_NONE. See glXChooseVisual manpage for further explanation. */ int attrlist[] = { GDK_GL_RGBA, GDK_GL_RED_SIZE,1, GDK_GL_GREEN_SIZE,1, GDK_GL_BLUE_SIZE,1, GDK_GL_DOUBLEBUFFER, GDK_GL_NONE }; #ifdef FULLSCREEN_MESA_3DFX setenv("MESA_GLX_FX", "", 1); setenv("FX_GLIDE_NO_SPLASH", "", 1); #endif /* initialize gtk */ gtk_init(&argc, &argv); /* Check if OpenGL (GLX extension) is supported. */ if (gdk_gl_query() == FALSE) { g_print("OpenGL not supported\n"); return 0; } /* Create new top level window. */ window = gtk_window_new( GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), "Zktor"); /* Quit form main if got delete event */ gtk_signal_connect(GTK_OBJECT(window), "delete_event", GTK_SIGNAL_FUNC(gtk_main_quit), NULL); /* You should always delete gtk_gl_area widgets before exit or else GLX contexts are left undeleted, this may cause problems (=core dump) in some systems. Destroy method of objects is not automatically called on exit. You need to manually enable this feature. Do gtk_quit_add_destroy() for all your top level windows unless you are certain that they get destroy signal by other means. */ gtk_quit_add_destroy(1, GTK_OBJECT(window)); vbox = GTK_WIDGET(gtk_vbox_new(FALSE, 0)); gtk_container_set_border_width(GTK_CONTAINER(vbox), 10); logo = gtk_label_new("Zktor"); /* Create new OpenGL widget. */ glarea = GTK_WIDGET(gtk_gl_area_new(attrlist)); /* Events for widget must be set before X Window is created */ gtk_widget_set_events(GTK_WIDGET(glarea), GDK_EXPOSURE_MASK| GDK_KEY_PRESS_MASK| GDK_KEY_RELEASE_MASK); /* set minimum size */ /* gtk_widget_set_usize(GTK_WIDGET(glarea), 200,200); */ /* set default size */ gtk_gl_area_size(GTK_GL_AREA(glarea), 640,400); /* Connect signal handlers */ /* Redraw image when exposed. */ gtk_signal_connect(GTK_OBJECT(glarea), "expose_event", GTK_SIGNAL_FUNC(draw), NULL); /* When window is resized viewport needs to be resized also. */ gtk_signal_connect(GTK_OBJECT(glarea), "configure_event", GTK_SIGNAL_FUNC(reshape), NULL); /* Do initialization when widget has been realized. */ gtk_signal_connect(GTK_OBJECT(glarea), "realize", GTK_SIGNAL_FUNC(init), NULL); /* Capture keypress events */ gtk_signal_connect(GTK_OBJECT(glarea), "key_press_event", GTK_SIGNAL_FUNC(key_press_event), NULL); gtk_signal_connect(GTK_OBJECT(glarea), "key_release_event", GTK_SIGNAL_FUNC(key_release_event), NULL); /* construct widget hierarchy */ gtk_container_add(GTK_CONTAINER(window),GTK_WIDGET(vbox)); gtk_box_pack_start(GTK_BOX(vbox), logo, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), glarea, TRUE, TRUE, 0); /* show all widgets */ gtk_widget_show(GTK_WIDGET(glarea)); gtk_widget_show(GTK_WIDGET(logo)); gtk_widget_show(GTK_WIDGET(vbox)); gtk_widget_show(window); /* set focus to glarea widget */ GTK_WIDGET_SET_FLAGS(glarea, GTK_CAN_FOCUS); gtk_widget_grab_focus(GTK_WIDGET(glarea)); /* animating */ gtk_idle_add((GtkFunction)animate, glarea); game_init(); gtk_main(); return 0; }
int main(int argc, char *argv[]) { GtkWidget *window, *box, *glarea; gtk_init (&argc, &argv); EGLX_main(1); if (gdk_gl_query() == FALSE) { g_print ("GL not supported !\n"); return 0; } gchar *info_str; info_str = gdk_gl_get_info(); g_print (info_str); g_free (info_str); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW(window), "Simple Wayland-EGL"); gtk_container_set_border_width (GTK_CONTAINER(window), 10); borderw = gtk_container_get_border_width (GTK_CONTAINER(window)); titlebarw = 30; /* HOW DO WE OBTAIN THAT ? */ int attrs[] = { GDK_GL_RGBA, GDK_GL_RED_SIZE,1, GDK_GL_GREEN_SIZE,1, GDK_GL_BLUE_SIZE,1, GDK_GL_DOUBLEBUFFER, GDK_GL_NONE }; guint myborder = gtk_container_get_border_width (GTK_CONTAINER(window)); glarea = GTK_WIDGET(gtk_gl_area_new(attrs)); gtk_widget_set_size_request (GTK_WIDGET(glarea), 320,240); g_signal_connect (GTK_WIDGET(window), "destroy", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect (GTK_WIDGET(glarea), "draw", G_CALLBACK(draw), NULL); g_signal_connect (GTK_WIDGET(glarea), "realize", G_CALLBACK(init), NULL); g_signal_connect (GTK_WIDGET(window), "draw", G_CALLBACK(resize), NULL); box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_container_add (GTK_CONTAINER(box), GTK_WIDGET(glarea)); gtk_container_add (GTK_CONTAINER(window), GTK_WIDGET(box)); gtk_widget_show (window); gtk_widget_show (glarea); gtk_widget_show (box); gtk_main(); return 0; }