Guest User

Untitled

a guest
Jun 18th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.79 KB | None | 0 0
  1. #include <gtk-2.0/gtk/gtk.h>
  2. #include <gtkglext-1.0/gtk/gtkgl.h>
  3. #include <GL/gl.h>
  4.  
  5. GtkBuilder* mBuilder;
  6. GtkWidget* mWindow;
  7. GtkWidget* mAbout;
  8. GtkWidget* mGlArea;
  9. GdkGLConfig *mGlConfig;
  10. GdkGLConfigMode mGlConfigMode;
  11.  
  12. extern "C" G_MODULE_EXPORT void on_window_destroy(GtkObject *object, gpointer user_data)
  13. {
  14.     gtk_main_quit();
  15. }
  16.  
  17. extern "C" G_MODULE_EXPORT void on_menuHelpAbout_activate(GtkObject *object, gpointer user_data)
  18. {            
  19.     gtk_widget_show(mAbout);
  20. }
  21.  
  22. extern "C" G_MODULE_EXPORT void on_aboutdialog1_close(GtkObject *object, gpointer user_data)
  23. {
  24.     gtk_widget_hide(mAbout);
  25. }
  26.  
  27. extern "C" G_MODULE_EXPORT void configure(GtkWidget *drawarea, GdkEventConfigure *event, gpointer user_data)
  28. {
  29.     printf("%x\n", drawarea);
  30.     GdkGLContext *mGlContext = gtk_widget_get_gl_context(drawarea);
  31.     GdkGLDrawable *mGlDrawable = gtk_widget_get_gl_drawable(drawarea);
  32.    
  33.     gdk_gl_drawable_gl_begin(mGlDrawable, mGlContext);
  34.    
  35.     glLoadIdentity();  
  36.     glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  37.  
  38.     gdk_gl_drawable_gl_end(mGlDrawable);
  39. }
  40.  
  41. extern "C" G_MODULE_EXPORT void expose(GtkWidget *drawarea, GdkEventExpose *event, gpointer user_data)
  42. {
  43.     GdkGLContext *mGlContext = gtk_widget_get_gl_context(drawarea);
  44.     GdkGLDrawable *mGlDrawable = gtk_widget_get_gl_drawable(drawarea);
  45.    
  46.     gdk_gl_drawable_gl_begin(mGlDrawable, mGlContext);
  47.    
  48.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
  49.     glLoadIdentity();
  50.    
  51.     gdk_gl_drawable_swap_buffers(mGlDrawable);
  52.    
  53.     gdk_gl_drawable_gl_end(mGlDrawable);
  54. }
  55.  
  56. int main(int argc, char *argv[])
  57. {
  58.     gtk_init(&argc, &argv);
  59.     gtk_gl_init(&argc, &argv);
  60.  
  61.     mBuilder = gtk_builder_new();
  62.     gtk_builder_add_from_file(mBuilder, "editor.xml", NULL);
  63.     mWindow = GTK_WIDGET(gtk_builder_get_object(mBuilder, "window"));
  64.     mAbout = GTK_WIDGET(gtk_builder_get_object(mBuilder, "aboutdialog1"));
  65.     mGlArea = GTK_WIDGET(gtk_builder_get_object(mBuilder, "drawingarea1"));
  66.     gtk_widget_set_events(mGlArea, GDK_EXPOSURE_MASK);
  67.     gtk_builder_connect_signals(mBuilder, NULL);
  68.  
  69.     g_object_unref(G_OBJECT(mBuilder));
  70.          
  71.     gtk_widget_show(mWindow);
  72.    
  73.     if(gtk_widget_get_realized(mGlArea))
  74.     {
  75.         gtk_widget_unrealize(mGlArea);
  76.     }
  77.    
  78.     mGlConfigMode = (GdkGLConfigMode)(GDK_GL_MODE_RGB | GDK_GL_MODE_DEPTH | GDK_GL_MODE_DOUBLE | GDK_GL_MODE_STENCIL);
  79.    
  80.     mGlConfig = gdk_gl_config_new_by_mode(mGlConfigMode);
  81.     if(!mGlConfig)
  82.     {
  83.         printf("Error: Can't get OpenGL configuration\n");
  84.     }
  85.    
  86.     if(!gtk_widget_set_gl_capability(mGlArea, mGlConfig, NULL, TRUE, GDK_GL_RGBA_TYPE))
  87.     {
  88.         printf("Error: Can't set OpenGL capability to drawable area\n");
  89.     }
  90.    
  91.     g_signal_connect(mGlArea, "configure-event", G_CALLBACK(configure), NULL);
  92.     g_signal_connect(mGlArea, "expose-event", G_CALLBACK(expose), NULL);
  93.            
  94.     gtk_widget_show_all(mWindow);
  95.    
  96.     gtk_main();
  97.  
  98.     return 0;
  99. }
Add Comment
Please, Sign In to add comment