Re: [GtkGLExt] gtkglext-list Digest, Vol 73, Issue 10



My working platform is:

OS: Windows 7 Ultimate x64
Compiler: Visual Studio 2008 x64 Version 9.0.30729.1 SP
Gcc 4.4.5 20100710(prerelease)
gtk version: gtk+-bundle_2.20.1-20100912_win64
gtkglext version:1.2.0


2010/10/19 <gtkglext-list-request gnome org>
Send gtkglext-list mailing list submissions to
       gtkglext-list gnome org

To subscribe or unsubscribe via the World Wide Web, visit
       http://mail.gnome.org/mailman/listinfo/gtkglext-list
or, via email, send a message with subject or body 'help' to
       gtkglext-list-request gnome org

You can reach the person managing the list at
       gtkglext-list-owner gnome org

When replying, please edit your Subject line so it is more specific
than "Re: Contents of gtkglext-list digest..."


Today's Topics:

  1. gtkglext cannot draw geometries (jiangtengfei)


----------------------------------------------------------------------

Message: 1
Date: Tue, 19 Oct 2010 21:57:53 +0800
From: jiangtengfei <jtf198711 gmail com>
To: gtkglext-list gnome org
Subject: [GtkGLExt] gtkglext cannot draw geometries
Message-ID:
       <AANLkTi=i0zfp3z-hSmQO2ova6u=aZTe56b_3TPA3b7EM mail gmail com>
Content-Type: text/plain; charset="windows-1252"

While using the gtkglext package,I met some problems.

I have built the 64bit gtkglext dynamic library. When I run a test example,
I can not get the correct result. The result supposed to be some geometries,
but I just get a blank.
 I tried to change the clean color, but it doesn?t work.
At first, I thought it was caused by the 64bit gtkglext dynamic library. So
I downloaded the 32bit gtkglext binaries, and rebuilt the test code. Then I
only got the same result.

I will be very pleased if you can do me a favor.
Thank you for reading.

the test code is as follows:
//*************************************************************
//***********************************************************
/*
 * simple.c:
 * Simple GtkGLExt example.
 *
 * written by Naofumi Yasufuku  <naofumi users sourceforge net>
 */

#include <stdlib.h>

#include <gtk/gtk.h>

#include <gtk/gtkgl.h>

#ifdef G_OS_WIN32
#define WIN32_LEAN_AND_MEAN 1
#include <windows.h>
#endif

#include <GL/gl.h>
#include <GL/glu.h>

static void realize (GtkWidget *widget,gpointer data)
{
 GdkGLContext *glcontext = gtk_widget_get_gl_context (widget);
 GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget);

 GLUquadricObj *qobj;
 static GLfloat light_diffuse[] = {1.0, 0.0, 0.0, 1.0};
 static GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0};

 /*** OpenGL BEGIN ***/
 if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext))
   return;

 qobj = gluNewQuadric ();
 gluQuadricDrawStyle (qobj, GLU_FILL);
 glNewList (1, GL_COMPILE);
 gluSphere (qobj, 1.0, 20, 20);
 glEndList ();

 glLightfv (GL_LIGHT0, GL_DIFFUSE, light_diffuse);
 glLightfv (GL_LIGHT0, GL_POSITION, light_position);
 glEnable (GL_LIGHTING);
 glEnable (GL_LIGHT0);
 glEnable (GL_DEPTH_TEST);

 glClearColor (0.0, 0.0, 0.0, 0.0);
 glClearDepth (1.0);

 glViewport (0, 0,
             widget->allocation.width, widget->allocation.height);

 glMatrixMode (GL_PROJECTION);
 glLoadIdentity ();
 gluPerspective (40.0, 1.0, 1.0, 10.0);

 glMatrixMode (GL_MODELVIEW);
 glLoadIdentity ();
 gluLookAt (0.0, 0.0, 3.0,
            0.0, 0.0, 0.0,
            0.0, 1.0, 0.0);
 glTranslatef (0.0, 0.0, -3.0);

 gdk_gl_drawable_gl_end (gldrawable);
 /*** OpenGL END ***/
}

static gboolean configure_event (GtkWidget *widget,
                GdkEventConfigure *event,
                gpointer           data)
{
 GdkGLContext *glcontext = gtk_widget_get_gl_context (widget);
 GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget);

 /*** OpenGL BEGIN ***/
 if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext))
   return FALSE;

 glViewport (0, 0,
             widget->allocation.width, widget->allocation.height);

 gdk_gl_drawable_gl_end (gldrawable);
 /*** OpenGL END ***/

 return TRUE;
}

static gboolean expose_event (GtkWidget      *widget,
             GdkEventExpose *event,
             gpointer        data)
{
 GdkGLContext *glcontext = gtk_widget_get_gl_context (widget);
 GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget);

 /*** OpenGL BEGIN ***/
 if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext))
   return FALSE;

 glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

 glCallList (1);

 if (gdk_gl_drawable_is_double_buffered (gldrawable))
   gdk_gl_drawable_swap_buffers (gldrawable);
 else
   glFlush ();

 gdk_gl_drawable_gl_end (gldrawable);
 /*** OpenGL END ***/

 return TRUE;
}

static void print_gl_config_attrib (GdkGLConfig *glconfig,
                       const gchar *attrib_str,
                       int          attrib,
                       gboolean     is_boolean)
{
 int value;

 g_print ("%s = ", attrib_str);
 if (gdk_gl_config_get_attrib (glconfig, attrib, &value))
   {
     if (is_boolean)
       g_print ("%s\n", value == TRUE ? "TRUE" : "FALSE");
     else
       g_print ("%d\n", value);
   }
 else
   g_print ("*** Cannot get %s attribute value\n", attrib_str);
}

static void examine_gl_config_attrib (GdkGLConfig *glconfig)
{
 g_print ("\nOpenGL visual configurations :\n\n");

 g_print ("gdk_gl_config_is_rgba (glconfig) = %s\n",
          gdk_gl_config_is_rgba (glconfig) ? "TRUE" : "FALSE");
 g_print ("gdk_gl_config_is_double_buffered (glconfig) = %s\n",
          gdk_gl_config_is_double_buffered (glconfig) ? "TRUE" : "FALSE");
 g_print ("gdk_gl_config_is_stereo (glconfig) = %s\n",
          gdk_gl_config_is_stereo (glconfig) ? "TRUE" : "FALSE");
 g_print ("gdk_gl_config_has_alpha (glconfig) = %s\n",
          gdk_gl_config_has_alpha (glconfig) ? "TRUE" : "FALSE");
 g_print ("gdk_gl_config_has_depth_buffer (glconfig) = %s\n",
          gdk_gl_config_has_depth_buffer (glconfig) ? "TRUE" : "FALSE");
 g_print ("gdk_gl_config_has_stencil_buffer (glconfig) = %s\n",
          gdk_gl_config_has_stencil_buffer (glconfig) ? "TRUE" : "FALSE");
 g_print ("gdk_gl_config_has_accum_buffer (glconfig) = %s\n",
          gdk_gl_config_has_accum_buffer (glconfig) ? "TRUE" : "FALSE");

 g_print ("\n");

 print_gl_config_attrib (glconfig, "GDK_GL_USE_GL",
GDK_GL_USE_GL,           TRUE);
 print_gl_config_attrib (glconfig, "GDK_GL_BUFFER_SIZE",
 GDK_GL_BUFFER_SIZE,      FALSE);
 print_gl_config_attrib (glconfig, "GDK_GL_LEVEL",            GDK_GL_LEVEL,
          FALSE);
 print_gl_config_attrib (glconfig, "GDK_GL_RGBA",             GDK_GL_RGBA,
           TRUE);
 print_gl_config_attrib (glconfig, "GDK_GL_DOUBLEBUFFER",
GDK_GL_DOUBLEBUFFER,     TRUE);
 print_gl_config_attrib (glconfig, "GDK_GL_STEREO",
GDK_GL_STEREO,           TRUE);
 print_gl_config_attrib (glconfig, "GDK_GL_AUX_BUFFERS",
 GDK_GL_AUX_BUFFERS,      FALSE);
 print_gl_config_attrib (glconfig, "GDK_GL_RED_SIZE",
GDK_GL_RED_SIZE,         FALSE);
 print_gl_config_attrib (glconfig, "GDK_GL_GREEN_SIZE",
GDK_GL_GREEN_SIZE,       FALSE);
 print_gl_config_attrib (glconfig, "GDK_GL_BLUE_SIZE",
 GDK_GL_BLUE_SIZE,        FALSE);
 print_gl_config_attrib (glconfig, "GDK_GL_ALPHA_SIZE",
GDK_GL_ALPHA_SIZE,       FALSE);
 print_gl_config_attrib (glconfig, "GDK_GL_DEPTH_SIZE",
GDK_GL_DEPTH_SIZE,       FALSE);
 print_gl_config_attrib (glconfig, "GDK_GL_STENCIL_SIZE",
GDK_GL_STENCIL_SIZE,     FALSE);
 print_gl_config_attrib (glconfig, "GDK_GL_ACCUM_RED_SIZE",
GDK_GL_ACCUM_RED_SIZE,   FALSE);
 print_gl_config_attrib (glconfig, "GDK_GL_ACCUM_GREEN_SIZE",
GDK_GL_ACCUM_GREEN_SIZE, FALSE);
 print_gl_config_attrib (glconfig, "GDK_GL_ACCUM_BLUE_SIZE",
 GDK_GL_ACCUM_BLUE_SIZE,  FALSE);
 print_gl_config_attrib (glconfig, "GDK_GL_ACCUM_ALPHA_SIZE",
GDK_GL_ACCUM_ALPHA_SIZE, FALSE);

 g_print ("\n");
}

int main (int   argc,char *argv[]){
 GdkGLConfig *glconfig;
 gint major, minor;

 GtkWidget *window;
 GtkWidget *vbox;
 GtkWidget *drawing_area;
 GtkWidget *button;


 /*
  * Init GTK.
  */

 gtk_init (&argc, &argv);

 /*
  * Init GtkGLExt.
  */

 gtk_gl_init (&argc, &argv);

 /*
  * Query OpenGL extension version.
  */

 gdk_gl_query_version (&major, &minor);
 g_print ("\nOpenGL extension version - %d.%d\n",
          major, minor);

 /*
  * Configure OpenGL-capable visual.
  */

 /* Try double-buffered visual */
 glconfig = gdk_gl_config_new_by_mode (GDK_GL_MODE_RGB    |
                                       GDK_GL_MODE_DEPTH  |
                                       GDK_GL_MODE_DOUBLE);
 if (glconfig == NULL)
   {
     g_print ("*** Cannot find the double-buffered visual.\n");
     g_print ("*** Trying single-buffered visual.\n");

     /* Try single-buffered visual */
     glconfig = gdk_gl_config_new_by_mode (GDK_GL_MODE_RGB   |
                                           GDK_GL_MODE_DEPTH);
     if (glconfig == NULL)
       {
         g_print ("*** No appropriate OpenGL-capable visual found.\n");
         exit (1);
       }
   }

 examine_gl_config_attrib (glconfig);

 /*
  * Top-level window.
  */

 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 gtk_window_set_title (GTK_WINDOW (window), "simple");

 /* Get automatically redrawn if any of their children changed allocation.
*/
 gtk_container_set_reallocate_redraws (GTK_CONTAINER (window), TRUE);

 g_signal_connect (G_OBJECT (window), "delete_event",
                   G_CALLBACK (gtk_main_quit), NULL);

 /*
  * VBox.
  */

 vbox = gtk_vbox_new (FALSE, 0);
 gtk_container_add (GTK_CONTAINER (window), vbox);
 gtk_widget_show (vbox);

 /*
  * Drawing area for drawing OpenGL scene.
  */

 drawing_area = gtk_drawing_area_new ();
 gtk_widget_set_size_request (drawing_area, 200, 200);

 /* Set OpenGL-capability to the widget. */
 gtk_widget_set_gl_capability (drawing_area,
                               glconfig,
                               NULL,
                               TRUE,
                               GDK_GL_RGBA_TYPE);

 g_signal_connect_after (G_OBJECT (drawing_area), "realize",
                         G_CALLBACK (realize), NULL);
 g_signal_connect (G_OBJECT (drawing_area), "configure_event",
   G_CALLBACK (configure_event), NULL);
 g_signal_connect (G_OBJECT (drawing_area), "expose_event",
   G_CALLBACK (expose_event), NULL);

 gtk_box_pack_start (GTK_BOX (vbox), drawing_area, TRUE, TRUE, 0);

 gtk_widget_show (drawing_area);

 /*
  * Simple quit button.
  */

 button = gtk_button_new_with_label ("Quit");

 g_signal_connect (G_OBJECT (button), "clicked",
                   G_CALLBACK (gtk_main_quit), NULL);

 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);

 gtk_widget_show (button);

 /*
  * Show window.
  */

 gtk_widget_show (window);

 /*
  * Main loop.
  */

 gtk_main ();

 return 0;
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.gnome.org/archives/gtkglext-list/attachments/20101019/9ed458bc/attachment.html>

------------------------------

_______________________________________________
gtkglext-list mailing list
gtkglext-list gnome org
http://mail.gnome.org/mailman/listinfo/gtkglext-list


End of gtkglext-list Digest, Vol 73, Issue 10
*********************************************



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]