Is it a bug of gtkglext?

View: New views
11 Messages — Rating Filter:   Alert me  

Is it a bug of gtkglext?

by 明覺 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

I compiled  the example gtkglextmm program gears.cc(attached) to
a.out, it can start and display successfully, but if i resize the
window, a segmentation fault error will occur, here is the error info
from valgrind. any advice to solve it? thanks
------------------------------------------------------------------------------------------
minjue:~/workspace/Meck# valgrind --tool=memcheck ./a.out
==26447== Using valgrind-3.4.1-Debian, a dynamic binary
instrumentation framework.
==26447== Copyright (C) 2000-2008, and GNU GPL'd, by Julian Seward et al.

OpenGL visual configurations :

glconfig->is_rgba() = true
glconfig->is_double_buffered() = true
glconfig->is_stereo() = false
glconfig->has_alpha() = false
glconfig->has_depth_buffer() = true
glconfig->has_stencil_buffer() = false
glconfig->has_accum_buffer() = false

Gdk::GL::USE_GL = true
Gdk::GL::BUFFER_SIZE = 24
Gdk::GL::LEVEL = 0
Gdk::GL::RGBA = true
Gdk::GL::DOUBLEBUFFER = true
Gdk::GL::STEREO = false
Gdk::GL::AUX_BUFFERS = 0
Gdk::GL::RED_SIZE = 8
Gdk::GL::GREEN_SIZE = 8
Gdk::GL::BLUE_SIZE = 8
Gdk::GL::ALPHA_SIZE = 0
Gdk::GL::DEPTH_SIZE = 24
Gdk::GL::STENCIL_SIZE = 0
Gdk::GL::ACCUM_RED_SIZE = 0
Gdk::GL::ACCUM_GREEN_SIZE = 0
Gdk::GL::ACCUM_BLUE_SIZE = 0
Gdk::GL::ACCUM_ALPHA_SIZE = 0

GL_RENDERER   = Software Rasterizer
GL_VERSION    = 2.1 Mesa 7.6-devel
GL_VENDOR     = Mesa Project
GL_EXTENSIONS = GL_ARB_depth_texture GL_ARB_draw_buffers
GL_ARB_fragment_program GL_ARB_fragment_program_shadow
GL_ARB_fragment_shader GL_ARB_framebuffer_object
GL_ARB_half_float_pixel GL_ARB_imaging GL_ARB_multisample
GL_ARB_multitexture GL_ARB_occlusion_query GL_ARB_pixel_buffer_object
GL_ARB_point_parameters GL_ARB_point_sprite GL_ARB_shader_objects
GL_ARB_shading_language_100 GL_ARB_shading_language_120 GL_ARB_shadow
GL_ARB_shadow_ambient GL_ARB_texture_border_clamp
GL_ARB_texture_compression GL_ARB_texture_cube_map
GL_ARB_texture_env_add GL_ARB_texture_env_combine
GL_ARB_texture_env_crossbar GL_ARB_texture_env_dot3
GL_ARB_texture_mirrored_repeat GL_ARB_texture_non_power_of_two
GL_ARB_texture_rectangle GL_ARB_transpose_matrix
GL_ARB_vertex_buffer_object GL_ARB_vertex_program GL_ARB_vertex_shader
GL_ARB_window_pos GL_EXT_abgr GL_EXT_bgra GL_EXT_blend_color
GL_EXT_blend_equation_separate GL_EXT_blend_func_separate
GL_EXT_blend_logic_op GL_EXT_blend_minmax GL_EXT_blend_subtract
GL_EXT_compiled_vertex_array GL_EXT_convolution GL_EXT_copy_texture
GL_EXT_depth_bounds_test GL_EXT_draw_range_elements
GL_EXT_framebuffer_object GL_EXT_framebuffer_blit GL_EXT_fog_coord
GL_EXT_gpu_program_parameters GL_EXT_histogram
GL_EXT_multi_draw_arrays GL_EXT_packed_depth_stencil
GL_EXT_packed_pixels GL_EXT_paletted_texture
GL_EXT_pixel_buffer_object GL_EXT_point_parameters
GL_EXT_polygon_offset GL_EXT_rescale_normal GL_EXT_secondary_color
GL_EXT_separate_specular_color GL_EXT_shadow_funcs
GL_EXT_shared_texture_palette GL_EXT_stencil_two_side
GL_EXT_stencil_wrap GL_EXT_subtexture GL_EXT_texture GL_EXT_texture3D
GL_EXT_texture_edge_clamp GL_EXT_texture_env_add
GL_EXT_texture_env_combine GL_EXT_texture_env_dot3
GL_EXT_texture_lod_bias GL_EXT_texture_mirror_clamp
GL_EXT_texture_object GL_EXT_texture_rectangle GL_EXT_texture_sRGB
GL_EXT_texture_swizzle GL_EXT_vertex_array GL_EXT_vertex_array_bgra
GL_3DFX_texture_compression_FXT1 GL_APPLE_packed_pixels
GL_APPLE_vertex_array_object GL_ATI_blend_equation_separate
GL_ATI_envmap_bumpmap GL_ATI_texture_env_combine3
GL_ATI_texture_mirror_once GL_ATI_fragment_shader
GL_ATI_separate_stencil GL_IBM_multimode_draw_arrays
GL_IBM_rasterpos_clip GL_IBM_texture_mirrored_repeat
GL_INGR_blend_func_separate GL_MESA_pack_invert GL_MESA_resize_buffers
GL_MESA_texture_array GL_MESA_ycbcr_texture GL_MESA_window_pos
GL_NV_blend_square GL_NV_fragment_program GL_NV_light_max_exponent
GL_NV_point_sprite GL_NV_texture_env_combine4 GL_NV_texture_rectangle
GL_NV_texgen_reflection GL_NV_vertex_program GL_NV_vertex_program1_1
GL_OES_read_format GL_SGI_color_matrix GL_SGI_color_table
GL_SGI_texture_color_table GL_SGIS_generate_mipmap
GL_SGIS_texture_border_clamp GL_SGIS_texture_edge_clamp
GL_SGIS_texture_lod GL_SUN_multi_draw_arrays

11 frames in 5.071 seconds = 2.169 FPS
==26447== Conditional jump or move depends on uninitialised value(s)
==26447==    at 0x5F8BE57: glXWaitX (glxcmds.c:659)
==26447==    by 0x9CB211C: g_closure_invoke (gclosure.c:767)
==26447==    by 0x9CC5C2A: signal_emit_unlocked_R (gsignal.c:3247)
==26447==    by 0x9CC7021: g_signal_emit_valist (gsignal.c:2980)
==26447==    by 0x9CC74F2: g_signal_emit (gsignal.c:3037)
==26447==    by 0x792D269: gtk_widget_size_allocate (in
/usr/lib/libgtk-x11-2.0.so.0.1600.1)
==26447==    by 0x783F157: (within /usr/lib/libgtk-x11-2.0.so.0.1600.1)
==26447==    by 0x9CB206E: g_closure_invoke (gclosure.c:767)
==26447==    by 0x9CC5512: signal_emit_unlocked_R (gsignal.c:3177)
==26447==    by 0x9CC7021: g_signal_emit_valist (gsignal.c:2980)
==26447==    by 0x9CC74F2: g_signal_emit (gsignal.c:3037)
==26447==    by 0x792D269: gtk_widget_size_allocate (in
/usr/lib/libgtk-x11-2.0.so.0.1600.1)



--
我的操作系統是Gnu/Linux Debian/gNewSense Gnome Mozilla Gmail/Evolution
Gtkmm/Gtkglextmm Scim Totem Pidgin.

[gears.cc]

// -*- C++ -*-
/*
 * 3-D gear wheels.  This program is in the public domain.
 *
 * Brian Paul
 */

/* Conversion to gtkglextmm by Naofumi Yasufuku */

#include <iostream>
#include <cstdlib>
#include <cmath>
#include <cstring>

#include <gtkmm.h>

#include <gtkglmm.h>

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

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


//
// OpenGL frame buffer configuration utilities.
//

struct GLConfigUtil
{
  static void print_gl_attrib(const Glib::RefPtr<const Gdk::GL::Config>& glconfig,
                              const char* attrib_str,
                              int attrib,
                              bool is_boolean);

  static void examine_gl_attrib(const Glib::RefPtr<const Gdk::GL::Config>& glconfig);
};

//
// Print a configuration attribute.
//
void GLConfigUtil::print_gl_attrib(const Glib::RefPtr<const Gdk::GL::Config>& glconfig,
                                   const char* attrib_str,
                                   int attrib,
                                   bool is_boolean)
{
  int value;

  if (glconfig->get_attrib(attrib, value))
    {
      std::cout << attrib_str << " = ";
      if (is_boolean)
        std::cout << (value == true ? "true" : "false") << std::endl;
      else
        std::cout << value << std::endl;
    }
  else
    {
      std::cout << "*** Cannot get "
                << attrib_str
                << " attribute value\n";
    }
}

//
// Print configuration attributes.
//
void GLConfigUtil::examine_gl_attrib(const Glib::RefPtr<const Gdk::GL::Config>& glconfig)
{
  std::cout << "\nOpenGL visual configurations :\n\n";

  std::cout << "glconfig->is_rgba() = "
            << (glconfig->is_rgba() ? "true" : "false")
            << std::endl;
  std::cout << "glconfig->is_double_buffered() = "
            << (glconfig->is_double_buffered() ? "true" : "false")
            << std::endl;
  std::cout << "glconfig->is_stereo() = "
            << (glconfig->is_stereo() ? "true" : "false")
            << std::endl;
  std::cout << "glconfig->has_alpha() = "
            << (glconfig->has_alpha() ? "true" : "false")
            << std::endl;
  std::cout << "glconfig->has_depth_buffer() = "
            << (glconfig->has_depth_buffer() ? "true" : "false")
            << std::endl;
  std::cout << "glconfig->has_stencil_buffer() = "
            << (glconfig->has_stencil_buffer() ? "true" : "false")
            << std::endl;
  std::cout << "glconfig->has_accum_buffer() = "
            << (glconfig->has_accum_buffer() ? "true" : "false")
            << std::endl;

  std::cout << std::endl;

  print_gl_attrib(glconfig, "Gdk::GL::USE_GL",           Gdk::GL::USE_GL,           true);
  print_gl_attrib(glconfig, "Gdk::GL::BUFFER_SIZE",      Gdk::GL::BUFFER_SIZE,      false);
  print_gl_attrib(glconfig, "Gdk::GL::LEVEL",            Gdk::GL::LEVEL,            false);
  print_gl_attrib(glconfig, "Gdk::GL::RGBA",             Gdk::GL::RGBA,             true);
  print_gl_attrib(glconfig, "Gdk::GL::DOUBLEBUFFER",     Gdk::GL::DOUBLEBUFFER,     true);
  print_gl_attrib(glconfig, "Gdk::GL::STEREO",           Gdk::GL::STEREO,           true);
  print_gl_attrib(glconfig, "Gdk::GL::AUX_BUFFERS",      Gdk::GL::AUX_BUFFERS,      false);
  print_gl_attrib(glconfig, "Gdk::GL::RED_SIZE",         Gdk::GL::RED_SIZE,         false);
  print_gl_attrib(glconfig, "Gdk::GL::GREEN_SIZE",       Gdk::GL::GREEN_SIZE,       false);
  print_gl_attrib(glconfig, "Gdk::GL::BLUE_SIZE",        Gdk::GL::BLUE_SIZE,        false);
  print_gl_attrib(glconfig, "Gdk::GL::ALPHA_SIZE",       Gdk::GL::ALPHA_SIZE,       false);
  print_gl_attrib(glconfig, "Gdk::GL::DEPTH_SIZE",       Gdk::GL::DEPTH_SIZE,       false);
  print_gl_attrib(glconfig, "Gdk::GL::STENCIL_SIZE",     Gdk::GL::STENCIL_SIZE,     false);
  print_gl_attrib(glconfig, "Gdk::GL::ACCUM_RED_SIZE",   Gdk::GL::ACCUM_RED_SIZE,   false);
  print_gl_attrib(glconfig, "Gdk::GL::ACCUM_GREEN_SIZE", Gdk::GL::ACCUM_GREEN_SIZE, false);
  print_gl_attrib(glconfig, "Gdk::GL::ACCUM_BLUE_SIZE",  Gdk::GL::ACCUM_BLUE_SIZE,  false);
  print_gl_attrib(glconfig, "Gdk::GL::ACCUM_ALPHA_SIZE", Gdk::GL::ACCUM_ALPHA_SIZE, false);

  std::cout << std::endl;
}


//
// Gears scene.
//

class GearsScene : public Gtk::GL::DrawingArea
{
public:
  explicit GearsScene(bool is_sync = true);
  virtual ~GearsScene();

protected:
  void gear(GLfloat inner_radius,
            GLfloat outer_radius,
            GLfloat width,
            GLint   teeth,
            GLfloat tooth_depth);

protected:
  // signal handlers:
  virtual void on_realize();
  virtual bool on_configure_event(GdkEventConfigure* event);
  virtual bool on_expose_event(GdkEventExpose* event);
  virtual bool on_map_event(GdkEventAny* event);
  virtual bool on_unmap_event(GdkEventAny* event);
  virtual bool on_visibility_notify_event(GdkEventVisibility* event);
  virtual bool on_idle();

public:
  // Invalidate whole window.
  void invalidate() {
    get_window()->invalidate_rect(get_allocation(), false);
  }

  // Update window synchronously (fast).
  void update()
  { get_window()->process_updates(false); }

protected:
  // idle signal connection:
  sigc::connection m_ConnectionIdle;

public:
  // get & set view rotation values.
  void get_view_rot(GLfloat& x, GLfloat& y, GLfloat& z)
  { x = m_ViewRotX; y = m_ViewRotY; z = m_ViewRotZ; }

  void set_view_rot(GLfloat x, GLfloat y, GLfloat z)
  { m_ViewRotX = x; m_ViewRotY = y; m_ViewRotZ = z; }

protected:
  // OpenGL scene related variables:
  GLint m_Gear1;
  GLint m_Gear2;
  GLint m_Gear3;

  GLfloat m_ViewRotX;
  GLfloat m_ViewRotY;
  GLfloat m_ViewRotZ;

  GLfloat m_Angle;

  bool m_IsSync;

protected:
  // frame rate evaluation stuff:
  Glib::Timer m_Timer;
  int m_Frames;
};

GearsScene::GearsScene(bool is_sync)
  : m_Gear1(0), m_Gear2(0), m_Gear3(0),
    m_ViewRotX(20.0), m_ViewRotY(30.0), m_ViewRotZ(0.0),
    m_Angle(0.0), m_IsSync(is_sync),
    m_Frames(0)
{
  //
  // Configure OpenGL-capable visual.
  //

  Glib::RefPtr<Gdk::GL::Config> glconfig;

  // Try double-buffered visual
  glconfig = Gdk::GL::Config::create(Gdk::GL::MODE_RGB    |
                                     Gdk::GL::MODE_DEPTH  |
                                     Gdk::GL::MODE_DOUBLE);
  if (!glconfig)
    {
      std::cerr << "*** Cannot find the double-buffered visual.\n"
                << "*** Trying single-buffered visual.\n";

      // Try single-buffered visual
      glconfig = Gdk::GL::Config::create(Gdk::GL::MODE_RGB   |
                                         Gdk::GL::MODE_DEPTH);
      if (!glconfig)
        {
          std::cerr << "*** Cannot find any OpenGL-capable visual.\n";
          std::exit(1);
        }
    }

  // print frame buffer attributes.
  GLConfigUtil::examine_gl_attrib(glconfig);

  //
  // Set OpenGL-capability to the widget.
  //

  set_gl_capability(glconfig);

  // Add events.
  add_events(Gdk::VISIBILITY_NOTIFY_MASK);
}

GearsScene::~GearsScene()
{
}

/*
 * Draw a gear wheel.  You'll probably want to call this function when
 * building a display list since we do a lot of trig here.
 *
 * Input:  inner_radius - radius of hole at center
 * outer_radius - radius at center of teeth
 * width - width of gear
 * teeth - number of teeth
 * tooth_depth - depth of tooth
 */

void GearsScene::gear(GLfloat inner_radius,
                      GLfloat outer_radius,
                      GLfloat width,
                      GLint   teeth,
                      GLfloat tooth_depth)
{
  GLint i;
  GLfloat r0, r1, r2;
  GLfloat angle, da;
  GLfloat u, v, len;

  r0 = inner_radius;
  r1 = outer_radius - tooth_depth / 2.0;
  r2 = outer_radius + tooth_depth / 2.0;

  da = 2.0 * G_PI / teeth / 4.0;

  glShadeModel(GL_FLAT);

  glNormal3f(0.0, 0.0, 1.0);

  /* draw front face */
  glBegin(GL_QUAD_STRIP);
  for (i = 0; i <= teeth; i++) {
    angle = i * 2.0 * G_PI / teeth;
    glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
    glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
    if (i < teeth) {
      glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
      glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
    }
  }
  glEnd();

  /* draw front sides of teeth */
  glBegin(GL_QUADS);
  da = 2.0 * G_PI / teeth / 4.0;
  for (i = 0; i < teeth; i++) {
    angle = i * 2.0 * G_PI / teeth;

    glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
    glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
    glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), width * 0.5);
    glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
  }
  glEnd();

  glNormal3f(0.0, 0.0, -1.0);

  /* draw back face */
  glBegin(GL_QUAD_STRIP);
  for (i = 0; i <= teeth; i++) {
    angle = i * 2.0 * G_PI / teeth;
    glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
    glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
    if (i < teeth) {
      glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5);
      glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
    }
  }
  glEnd();

  /* draw back sides of teeth */
  glBegin(GL_QUADS);
  da = 2.0 * G_PI / teeth / 4.0;
  for (i = 0; i < teeth; i++) {
    angle = i * 2.0 * G_PI / teeth;

    glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5);
    glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), -width * 0.5);
    glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
    glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
  }
  glEnd();

  /* draw outward faces of teeth */
  glBegin(GL_QUAD_STRIP);
  for (i = 0; i < teeth; i++) {
    angle = i * 2.0 * G_PI / teeth;

    glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
    glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
    u = r2 * cos(angle + da) - r1 * cos(angle);
    v = r2 * sin(angle + da) - r1 * sin(angle);
    len = sqrt(u * u + v * v);
    u /= len;
    v /= len;
    glNormal3f(v, -u, 0.0);
    glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
    glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
    glNormal3f(cos(angle), sin(angle), 0.0);
    glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), width * 0.5);
    glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), -width * 0.5);
    u = r1 * cos(angle + 3 * da) - r2 * cos(angle + 2 * da);
    v = r1 * sin(angle + 3 * da) - r2 * sin(angle + 2 * da);
    glNormal3f(v, -u, 0.0);
    glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
    glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5);
    glNormal3f(cos(angle), sin(angle), 0.0);
  }

  glVertex3f(r1 * cos(0), r1 * sin(0), width * 0.5);
  glVertex3f(r1 * cos(0), r1 * sin(0), -width * 0.5);

  glEnd();

  glShadeModel(GL_SMOOTH);

  /* draw inside radius cylinder */
  glBegin(GL_QUAD_STRIP);
  for (i = 0; i <= teeth; i++) {
    angle = i * 2.0 * G_PI / teeth;
    glNormal3f(-cos(angle), -sin(angle), 0.0);
    glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
    glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
  }
  glEnd();

}

void GearsScene::on_realize()
{
  // We need to call the base on_realize()
  Gtk::DrawingArea::on_realize();

  //
  // Get GL::Drawable.
  //

  Glib::RefPtr<Gdk::GL::Drawable> gldrawable = get_gl_drawable();

  //
  // GL calls.
  //

  // *** OpenGL BEGIN ***
  if (!gldrawable->gl_begin(get_gl_context()))
    return;

  static GLfloat pos[4] = {5.0, 5.0, 10.0, 0.0};
  static GLfloat red[4] = {0.8, 0.1, 0.0, 1.0};
  static GLfloat green[4] = {0.0, 0.8, 0.2, 1.0};
  static GLfloat blue[4] = {0.2, 0.2, 1.0, 1.0};

  glLightfv(GL_LIGHT0, GL_POSITION, pos);
  glEnable(GL_CULL_FACE);
  glEnable(GL_LIGHTING);
  glEnable(GL_LIGHT0);
  glEnable(GL_DEPTH_TEST);

  // Make the gears.
  m_Gear1 = glGenLists(1);
  glNewList(m_Gear1, GL_COMPILE);
  glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red);
  gear(1.0, 4.0, 1.0, 20, 0.7);
  glEndList();

  m_Gear2 = glGenLists(1);
  glNewList(m_Gear2, GL_COMPILE);
  glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green);
  gear(0.5, 2.0, 2.0, 10, 0.7);
  glEndList();

  m_Gear3 = glGenLists(1);
  glNewList(m_Gear3, GL_COMPILE);
  glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue);
  gear(1.3, 2.0, 0.5, 10, 0.7);
  glEndList();

  glEnable(GL_NORMALIZE);

  std::cout << "GL_RENDERER   = " << glGetString(GL_RENDERER)   << std::endl;
  std::cout << "GL_VERSION    = " << glGetString(GL_VERSION)    << std::endl;
  std::cout << "GL_VENDOR     = " << glGetString(GL_VENDOR)     << std::endl;
  std::cout << "GL_EXTENSIONS = " << glGetString(GL_EXTENSIONS) << std::endl;
  std::cout << std::endl;

  gldrawable->gl_end();
  // *** OpenGL END ***

  // Start timer.
  m_Timer.start();
}

bool GearsScene::on_configure_event(GdkEventConfigure* event)
{
  //
  // Get GL::Drawable.
  //

  Glib::RefPtr<Gdk::GL::Drawable> gldrawable = get_gl_drawable();

  //
  // GL calls.
  //

  // *** OpenGL BEGIN ***
  if (!gldrawable->gl_begin(get_gl_context()))
    return false;

  GLfloat h = (GLfloat)(get_height()) / (GLfloat)(get_width());

  glViewport(0, 0, get_width(), get_height());
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  glFrustum(-1.0, 1.0, -h, h, 5.0, 60.0);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
  glTranslatef(0.0, 0.0, -40.0);

  gldrawable->gl_end();
  // *** OpenGL END ***

  return true;
}

bool GearsScene::on_expose_event(GdkEventExpose* event)
{
  //
  // Get GL::Drawable.
  //

  Glib::RefPtr<Gdk::GL::Drawable> gldrawable = get_gl_drawable();

  //
  // GL calls.
  //

  // *** OpenGL BEGIN ***
  if (!gldrawable->gl_begin(get_gl_context()))
    return false;

  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

  glPushMatrix();
    glRotatef(m_ViewRotX, 1.0, 0.0, 0.0);
    glRotatef(m_ViewRotY, 0.0, 1.0, 0.0);
    glRotatef(m_ViewRotZ, 0.0, 0.0, 1.0);

    glPushMatrix();
      glTranslatef(-3.0, -2.0, 0.0);
      glRotatef(m_Angle, 0.0, 0.0, 1.0);
      glCallList(m_Gear1);
    glPopMatrix();

    glPushMatrix();
      glTranslatef(3.1, -2.0, 0.0);
      glRotatef(-2.0 * m_Angle - 9.0, 0.0, 0.0, 1.0);
      glCallList(m_Gear2);
    glPopMatrix();

    glPushMatrix();
      glTranslatef(-3.1, 4.2, 0.0);
      glRotatef(-2.0 * m_Angle - 25.0, 0.0, 0.0, 1.0);
      glCallList(m_Gear3);
    glPopMatrix();

  glPopMatrix();

  // Swap buffers.
  if (gldrawable->is_double_buffered())
    gldrawable->swap_buffers();
  else
    glFlush();

  gldrawable->gl_end();
  // *** OpenGL END ***

  //
  // Print frame rate.
  //

  ++m_Frames;

  double seconds = m_Timer.elapsed();
  if (seconds >= 5.0)
    {
      // std::cout.setf(std::ios_base::fixed, std::ios_base::floatfield);
      std::cout.setf(std::ios::fixed, std::ios::floatfield);
      std::cout.precision(3);
      std::cout << m_Frames << " frames in "
                << seconds << " seconds = "
                << (m_Frames / seconds) << " FPS\n";
      m_Timer.reset();
      m_Frames = 0;
    }

  return true;
}

bool GearsScene::on_map_event(GdkEventAny* event)
{
  if (!m_ConnectionIdle.connected())
    m_ConnectionIdle = Glib::signal_idle().connect(
      sigc::mem_fun(*this, &GearsScene::on_idle), GDK_PRIORITY_REDRAW);

  return true;
}

bool GearsScene::on_unmap_event(GdkEventAny* event)
{
  if (m_ConnectionIdle.connected())
    m_ConnectionIdle.disconnect();

  return true;
}

bool GearsScene::on_visibility_notify_event(GdkEventVisibility* event)
{
  if (event->state == GDK_VISIBILITY_FULLY_OBSCURED)
    {
      if (m_ConnectionIdle.connected())
        m_ConnectionIdle.disconnect();
    }
  else
    {
      if (!m_ConnectionIdle.connected())
        m_ConnectionIdle = Glib::signal_idle().connect(
          sigc::mem_fun(*this, &GearsScene::on_idle), GDK_PRIORITY_REDRAW);
    }

  return true;
}

bool GearsScene::on_idle()
{
  m_Angle += 2.0;

  // Invalidate the whole window.
  invalidate();

  // Update window synchronously (fast).
  if (m_IsSync)
    update();

  return true;
}


//
// The application class.
//

class Gears : public Gtk::Window
{
public:
  explicit Gears(bool is_sync = true);
  virtual ~Gears();

protected:
  // signal handlers:
  void on_button_quit_clicked();
  virtual bool on_key_press_event(GdkEventKey* event);

protected:
  // member widgets:
  Gtk::VBox m_VBox;
  GearsScene m_GearsScene;
  Gtk::Button m_ButtonQuit;
};

Gears::Gears(bool is_sync)
  : m_VBox(false, 0), m_GearsScene(is_sync), m_ButtonQuit("Quit")
{
  //
  // Top-level window.
  //

  set_title("Gears");

  // Get automatically redrawn if any of their children changed allocation.
  set_reallocate_redraws(true);

  add(m_VBox);

  //
  // Gears scene.
  //

  m_GearsScene.set_size_request(300, 300);

  m_VBox.pack_start(m_GearsScene);

  //
  // Simple quit button.
  //

  m_ButtonQuit.signal_clicked().connect(
    sigc::mem_fun(*this, &Gears::on_button_quit_clicked));

  m_VBox.pack_start(m_ButtonQuit, Gtk::PACK_SHRINK, 0);

  //
  // Show window.
  //

  show_all();
}

Gears::~Gears()
{
}

void Gears::on_button_quit_clicked()
{
  Gtk::Main::quit();
}

bool Gears::on_key_press_event(GdkEventKey* event)
{
  GLfloat x, y, z;

  m_GearsScene.get_view_rot(x, y, z);

  switch (event->keyval)
    {
    case GDK_z:
      z += 5.0;
      break;
    case GDK_Z:
      z -= 5.0;
      break;
    case GDK_Up:
      x += 5.0;
      break;
    case GDK_Down:
      x -= 5.0;
      break;
    case GDK_Left:
      y += 5.0;
      break;
    case GDK_Right:
      y -= 5.0;
      break;
    case GDK_Escape:
      Gtk::Main::quit();
      break;
    default:
      return true;
    }

  m_GearsScene.set_view_rot(x, y, z);

  m_GearsScene.invalidate();

  return true;
}


//
// Main.
//

int main(int argc, char** argv)
{
  Gtk::Main kit(argc, argv);

  //
  // Init gtkglextmm.
  //

  Gtk::GL::init(argc, argv);

  //
  // Parse arguments.
  //

  bool is_sync = true;

  for (int i = 1; i < argc; ++i) {
    if (std::strcmp(argv[i], "--async") == 0)
      is_sync = false;
  }

  //
  // Instantiate and run the application.
  //

  Gears gears(is_sync);

  kit.run(gears);

  return 0;
}



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

Re: Is it a bug of gtkglext?

by Braden McDaniel :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Wed, 2009-05-13 at 15:09 +0800, 明覺 wrote:
> I compiled  the example gtkglextmm program gears.cc(attached)

There's no reason to attach source code that is part of the GtkGLExt
distribtion to mailing list messages.  We know where to find it. :-)

>  to
> a.out, it can start and display successfully, but if i resize the
> window, a segmentation fault error will occur, here is the error info
> from valgrind. any advice to solve it? thanks

The actual failure is happening inside of Mesa (presumably) code.
glXWaitX isn't reasonably close to line 659 in trunk Mesa; so you'll
need to track this down in the source to whatever version you're using.

You should probably try turning up the verbosity in valgrind to see if
it will tell you *what* value was uninitialized; though looking at the
right line 659 might make that apparent.

--
Braden McDaniel <braden@...>

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

Re: Is it a bug of gtkglext?

by 明覺 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Wed, May 13, 2009 at 11:14 PM, Braden McDaniel <braden@...> wrote:

> On Wed, 2009-05-13 at 15:09 +0800, 明覺 wrote:
>> I compiled  the example gtkglextmm program gears.cc(attached)
>
> There's no reason to attach source code that is part of the GtkGLExt
> distribtion to mailing list messages.  We know where to find it. :-)
>
>>  to
>> a.out, it can start and display successfully, but if i resize the
>> window, a segmentation fault error will occur, here is the error info
>> from valgrind. any advice to solve it? thanks
>
> The actual failure is happening inside of Mesa (presumably) code.
> glXWaitX isn't reasonably close to line 659 in trunk Mesa; so you'll
> need to track this down in the source to whatever version you're using.
>
> You should probably try turning up the verbosity in valgrind to see if
> it will tell you *what* value was uninitialized; though looking at the
> right line 659 might make that apparent.

thank you for the information, here is the ouput of valgrind, how
could i solve it? and someone said that it's caused by video driver
error, is that possible?
-----------------------------------------------------------------------------------------
==3503== ERROR SUMMARY: 3 errors from 2 contexts (suppressed: 275 from 5)
==3503==
==3503== 1 errors in context 1 of 2:
==3503== Conditional jump or move depends on uninitialised value(s)
==3503==    at 0x5F8BF98: glXWaitGL (glxcmds.c:620)
==3503==    by 0x5AD6730: _gdk_gl_context_destroy (gdkglcontext-x11.c:95)
==3503==    by 0x5ABA8B1: gdk_gl_context_destroy (gdkglcontext.c:118)
==3503==    by 0x5243BC1: gtk_gl_widget_unrealize (gtkglwidget.c:149)
==3503==    by 0x9CB211C: g_closure_invoke (gclosure.c:767)
==3503==    by 0x9CC5C2A: signal_emit_unlocked_R (gsignal.c:3247)
==3503==    by 0x9CC7021: g_signal_emit_valist (gsignal.c:2980)
==3503==    by 0x9CC74F2: g_signal_emit (gsignal.c:3037)
==3503==    by 0x792ED61: gtk_widget_unrealize (in
/usr/lib/libgtk-x11-2.0.so.0.1600.1)
==3503==    by 0x7934ABC: gtk_widget_unparent (in
/usr/lib/libgtk-x11-2.0.so.0.1600.1)
==3503==    by 0x783C257: (within /usr/lib/libgtk-x11-2.0.so.0.1600.1)
==3503==    by 0x9CB211C: g_closure_invoke (gclosure.c:767)
==3503==  Uninitialised value was created by a heap allocation
==3503==    at 0x4C2391E: malloc (vg_replace_malloc.c:207)
==3503==    by 0x5FACEFD: driCreateScreen (drisw_glx.c:362)
==3503==    by 0x5F8DDEE: __glXInitialize (glxext.c:622)
==3503==    by 0x5F8918C: GetGLXPrivScreenConfig (glxcmds.c:183)
==3503==    by 0x5F8A00E: glXChooseVisual (glxcmds.c:1304)
==3503==    by 0x5AD60CB: gdk_gl_config_new_common (gdkglconfig-x11.c:519)
==3503==    by 0x5ABA1EE: gdk_gl_config_new_rgb (gdkglconfig.c:193)
==3503==    by 0x5ABA316: gdk_gl_config_new_by_mode_common (gdkglconfig.c:210)
==3503==    by 0x503A75A: Gdk::GL::Config::create(Gdk::GL::ConfigMode)
(in /usr/lib/libgdkglextmm-x11-1.2.so.0.0.0)
==3503==    by 0x4149FB: SurfaceView::SurfaceView(bool) (SurfaceView.cc:81)
==3503==    by 0x415171: MechanicalSystemUi::MechanicalSystemUi() (Ui.cc:19)
==3503==    by 0x40E1D0: main (main.cc:66)
==3503==
==3503== 2 errors in context 2 of 2:
==3503== Conditional jump or move depends on uninitialised value(s)
==3503==    at 0x5F8BE57: glXWaitX (glxcmds.c:659)
==3503==    by 0x9CB211C: g_closure_invoke (gclosure.c:767)
==3503==    by 0x9CC5C2A: signal_emit_unlocked_R (gsignal.c:3247)
==3503==    by 0x9CC7021: g_signal_emit_valist (gsignal.c:2980)
==3503==    by 0x9CC74F2: g_signal_emit (gsignal.c:3037)
==3503==    by 0x792D269: gtk_widget_size_allocate (in
/usr/lib/libgtk-x11-2.0.so.0.1600.1)
==3503==    by 0x783F157: (within /usr/lib/libgtk-x11-2.0.so.0.1600.1)
==3503==    by 0x9CB206E: g_closure_invoke (gclosure.c:767)
==3503==    by 0x9CC5512: signal_emit_unlocked_R (gsignal.c:3177)
==3503==    by 0x9CC7021: g_signal_emit_valist (gsignal.c:2980)
==3503==    by 0x9CC74F2: g_signal_emit (gsignal.c:3037)
==3503==    by 0x792D269: gtk_widget_size_allocate (in
/usr/lib/libgtk-x11-2.0.so.0.1600.1)
==3503==  Uninitialised value was created by a heap allocation
==3503==    at 0x4C2391E: malloc (vg_replace_malloc.c:207)
==3503==    by 0x5FACEFD: driCreateScreen (drisw_glx.c:362)
==3503==    by 0x5F8DDEE: __glXInitialize (glxext.c:622)
==3503==    by 0x5F8918C: GetGLXPrivScreenConfig (glxcmds.c:183)
==3503==    by 0x5F8A00E: glXChooseVisual (glxcmds.c:1304)
==3503==    by 0x5AD60CB: gdk_gl_config_new_common (gdkglconfig-x11.c:519)
==3503==    by 0x5ABA1EE: gdk_gl_config_new_rgb (gdkglconfig.c:193)
==3503==    by 0x5ABA316: gdk_gl_config_new_by_mode_common (gdkglconfig.c:210)
==3503==    by 0x503A75A: Gdk::GL::Config::create(Gdk::GL::ConfigMode)
(in /usr/lib/libgdkglextmm-x11-1.2.so.0.0.0)
==3503==    by 0x4149FB: SurfaceView::SurfaceView(bool) (SurfaceView.cc:81)
==3503==    by 0x415171: MechanicalSystemUi::MechanicalSystemUi() (Ui.cc:19)
==3503==    by 0x40E1D0: main (main.cc:66)

>
> --
> Braden McDaniel <braden@...>
>
> _______________________________________________
> gtkglext-list mailing list
> gtkglext-list@...
> http://mail.gnome.org/mailman/listinfo/gtkglext-list
>



--
我的操作系統是Gnu/Linux Debian/gNewSense Gnome Mozilla Gmail/Evolution
Gtkmm/Gtkglextmm Scim Totem Pidgin.
_______________________________________________
gtkglext-list mailing list
gtkglext-list@...
http://mail.gnome.org/mailman/listinfo/gtkglext-list

Re: Is it a bug of gtkglext?

by Braden McDaniel :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Fri, 2009-05-15 at 11:58 +0800, 明覺 wrote:

> On Wed, May 13, 2009 at 11:14 PM, Braden McDaniel <braden@...> wrote:
> > On Wed, 2009-05-13 at 15:09 +0800, 明覺 wrote:
> >> I compiled  the example gtkglextmm program gears.cc(attached)
> >
> > There's no reason to attach source code that is part of the GtkGLExt
> > distribtion to mailing list messages.  We know where to find it. :-)
> >
> >>  to
> >> a.out, it can start and display successfully, but if i resize the
> >> window, a segmentation fault error will occur, here is the error info
> >> from valgrind. any advice to solve it? thanks
> >
> > The actual failure is happening inside of Mesa (presumably) code.
> > glXWaitX isn't reasonably close to line 659 in trunk Mesa; so you'll
> > need to track this down in the source to whatever version you're using.
> >
> > You should probably try turning up the verbosity in valgrind to see if
> > it will tell you *what* value was uninitialized; though looking at the
> > right line 659 might make that apparent.
>
> thank you for the information, here is the ouput of valgrind, how
> could i solve it? and someone said that it's caused by video driver
> error, is that possible?

As I suggest above, inspect the source for whatever version of Mesa
you're using.  Find the variable that valgrind is claiming is
uninitialized.

--
Braden McDaniel <braden@...>

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

Re: Is it a bug of gtkglext?

by Jean Bréfort :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Might be https://bugs.freedesktop.org/show_bug.cgi?id=21053

Le vendredi 15 mai 2009 à 02:35 -0400, Braden McDaniel a écrit :

> On Fri, 2009-05-15 at 11:58 +0800, 明覺 wrote:
> > On Wed, May 13, 2009 at 11:14 PM, Braden McDaniel <braden@...> wrote:
> > > On Wed, 2009-05-13 at 15:09 +0800, 明覺 wrote:
> > >> I compiled  the example gtkglextmm program gears.cc(attached)
> > >
> > > There's no reason to attach source code that is part of the GtkGLExt
> > > distribtion to mailing list messages.  We know where to find it. :-)
> > >
> > >>  to
> > >> a.out, it can start and display successfully, but if i resize the
> > >> window, a segmentation fault error will occur, here is the error info
> > >> from valgrind. any advice to solve it? thanks
> > >
> > > The actual failure is happening inside of Mesa (presumably) code.
> > > glXWaitX isn't reasonably close to line 659 in trunk Mesa; so you'll
> > > need to track this down in the source to whatever version you're using.
> > >
> > > You should probably try turning up the verbosity in valgrind to see if
> > > it will tell you *what* value was uninitialized; though looking at the
> > > right line 659 might make that apparent.
> >
> > thank you for the information, here is the ouput of valgrind, how
> > could i solve it? and someone said that it's caused by video driver
> > error, is that possible?
>
> As I suggest above, inspect the source for whatever version of Mesa
> you're using.  Find the variable that valgrind is claiming is
> uninitialized.
>

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

Re: Is it a bug of gtkglext?

by 明覺 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Fri, May 15, 2009 at 2:35 PM, Braden McDaniel <braden@...> wrote:

> On Fri, 2009-05-15 at 11:58 +0800, 明覺 wrote:
>> On Wed, May 13, 2009 at 11:14 PM, Braden McDaniel <braden@...> wrote:
>> > On Wed, 2009-05-13 at 15:09 +0800, 明覺 wrote:
>> >> I compiled  the example gtkglextmm program gears.cc(attached)
>> >
>> > There's no reason to attach source code that is part of the GtkGLExt
>> > distribtion to mailing list messages.  We know where to find it. :-)
>> >
>> >>  to
>> >> a.out, it can start and display successfully, but if i resize the
>> >> window, a segmentation fault error will occur, here is the error info
>> >> from valgrind. any advice to solve it? thanks
>> >
>> > The actual failure is happening inside of Mesa (presumably) code.
>> > glXWaitX isn't reasonably close to line 659 in trunk Mesa; so you'll
>> > need to track this down in the source to whatever version you're using.
>> >
>> > You should probably try turning up the verbosity in valgrind to see if
>> > it will tell you *what* value was uninitialized; though looking at the
>> > right line 659 might make that apparent.
>>
>> thank you for the information, here is the ouput of valgrind, how
>> could i solve it? and someone said that it's caused by video driver
>> error, is that possible?
>
> As I suggest above, inspect the source for whatever version of Mesa
> you're using.  Find the variable that valgrind is claiming is
> uninitialized.

I'm using the mesa from its git, that the latest code,(I also used
7.4, 7.5 and 7.6 of mesa, all the similar error), the variable not
uninitialized should be psc->driScreen->waitX
in line 659 of glxcmds.c    if (psc->driScreen->waitX != NULL)
any advice? thanks

>
> --
> Braden McDaniel <braden@...>
>
> _______________________________________________
> gtkglext-list mailing list
> gtkglext-list@...
> http://mail.gnome.org/mailman/listinfo/gtkglext-list
>



--
我的操作系統是Gnu/Linux Debian/gNewSense Gnome Mozilla Gmail/Evolution
Gtkmm/Gtkglextmm Scim Totem Pidgin.
_______________________________________________
gtkglext-list mailing list
gtkglext-list@...
http://mail.gnome.org/mailman/listinfo/gtkglext-list

Re: Is it a bug of gtkglext?

by 明覺 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Fri, May 15, 2009 at 2:54 PM, Jean Bréfort
<jean.brefort@...> wrote:
> Might be https://bugs.freedesktop.org/show_bug.cgi?id=21053

not sure, for the bug is not fixed in the lastest mesa code.

>
> Le vendredi 15 mai 2009 à 02:35 -0400, Braden McDaniel a écrit :
>> On Fri, 2009-05-15 at 11:58 +0800, 明�X wrote:
>> > On Wed, May 13, 2009 at 11:14 PM, Braden McDaniel <braden@...> wrote:
>> > > On Wed, 2009-05-13 at 15:09 +0800, 明�X wrote:
>> > >> I compiled  the example gtkglextmm program gears.cc(attached)
>> > >
>> > > There's no reason to attach source code that is part of the GtkGLExt
>> > > distribtion to mailing list messages.  We know where to find it. :-)
>> > >
>> > >>  to
>> > >> a.out, it can start and display successfully, but if i resize the
>> > >> window, a segmentation fault error will occur, here is the error info
>> > >> from valgrind. any advice to solve it? thanks
>> > >
>> > > The actual failure is happening inside of Mesa (presumably) code.
>> > > glXWaitX isn't reasonably close to line 659 in trunk Mesa; so you'll
>> > > need to track this down in the source to whatever version you're using.
>> > >
>> > > You should probably try turning up the verbosity in valgrind to see if
>> > > it will tell you *what* value was uninitialized; though looking at the
>> > > right line 659 might make that apparent.
>> >
>> > thank you for the information, here is the ouput of valgrind, how
>> > could i solve it? and someone said that it's caused by video driver
>> > error, is that possible?
>>
>> As I suggest above, inspect the source for whatever version of Mesa
>> you're using.  Find the variable that valgrind is claiming is
>> uninitialized.
>>
>
> _______________________________________________
> gtkglext-list mailing list
> gtkglext-list@...
> http://mail.gnome.org/mailman/listinfo/gtkglext-list
>


--
我的操作系�y是Gnu/Linux Debian/gNewSense Gnome Mozilla Gmail/Evolution
Gtkmm/Gtkglextmm Scim Totem Pidgin.

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

Re: Is it a bug of gtkglext?

by Braden McDaniel :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Fri, 2009-05-15 at 08:54 +0200, Jean Bréfort wrote:
> Might be https://bugs.freedesktop.org/show_bug.cgi?id=21053

That does look suspicious.  Apparently that problem is being observed in
Mesa 7.4.  I'm running 7.2 (where I'm not observing the problem).

I'm also using Nvidia drivers--and so I am probably not impacted by
Mesa's DRI code paths anyway.

--
Braden McDaniel <braden@...>

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

Re: Is it a bug of gtkglext?

by Braden McDaniel :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Fri, 2009-05-15 at 18:38 +0800, 明覺 wrote:

> On Fri, May 15, 2009 at 2:35 PM, Braden McDaniel <braden@...> wrote:
> > On Fri, 2009-05-15 at 11:58 +0800, 明覺 wrote:
> >> On Wed, May 13, 2009 at 11:14 PM, Braden McDaniel <braden@...> wrote:
> >> > On Wed, 2009-05-13 at 15:09 +0800, 明覺 wrote:
> >> >> I compiled  the example gtkglextmm program gears.cc(attached)
> >> >
> >> > There's no reason to attach source code that is part of the GtkGLExt
> >> > distribtion to mailing list messages.  We know where to find it. :-)
> >> >
> >> >>  to
> >> >> a.out, it can start and display successfully, but if i resize the
> >> >> window, a segmentation fault error will occur, here is the error info
> >> >> from valgrind. any advice to solve it? thanks
> >> >
> >> > The actual failure is happening inside of Mesa (presumably) code.
> >> > glXWaitX isn't reasonably close to line 659 in trunk Mesa; so you'll
> >> > need to track this down in the source to whatever version you're using.
> >> >
> >> > You should probably try turning up the verbosity in valgrind to see if
> >> > it will tell you *what* value was uninitialized; though looking at the
> >> > right line 659 might make that apparent.
> >>
> >> thank you for the information, here is the ouput of valgrind, how
> >> could i solve it? and someone said that it's caused by video driver
> >> error, is that possible?
> >
> > As I suggest above, inspect the source for whatever version of Mesa
> > you're using.  Find the variable that valgrind is claiming is
> > uninitialized.
>
> I'm using the mesa from its git, that the latest code,(I also used
> 7.4, 7.5 and 7.6 of mesa, all the similar error), the variable not
> uninitialized should be psc->driScreen->waitX
> in line 659 of glxcmds.c    if (psc->driScreen->waitX != NULL)
> any advice? thanks

That sounds like it's almost certainly the bug that Jean pointed out.  I
suggest applying the patch attached to that bug report.

--
Braden McDaniel <braden@...>

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

Re: Is it a bug of gtkglext?

by 明覺 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Fri, May 15, 2009 at 10:17 PM, Braden McDaniel <braden@...> wrote:

> On Fri, 2009-05-15 at 18:38 +0800, 明覺 wrote:
>> On Fri, May 15, 2009 at 2:35 PM, Braden McDaniel <braden@...> wrote:
>> > On Fri, 2009-05-15 at 11:58 +0800, 明覺 wrote:
>> >> On Wed, May 13, 2009 at 11:14 PM, Braden McDaniel <braden@...> wrote:
>> >> > On Wed, 2009-05-13 at 15:09 +0800, 明覺 wrote:
>> >> >> I compiled  the example gtkglextmm program gears.cc(attached)
>> >> >
>> >> > There's no reason to attach source code that is part of the GtkGLExt
>> >> > distribtion to mailing list messages.  We know where to find it. :-)
>> >> >
>> >> >>  to
>> >> >> a.out, it can start and display successfully, but if i resize the
>> >> >> window, a segmentation fault error will occur, here is the error info
>> >> >> from valgrind. any advice to solve it? thanks
>> >> >
>> >> > The actual failure is happening inside of Mesa (presumably) code.
>> >> > glXWaitX isn't reasonably close to line 659 in trunk Mesa; so you'll
>> >> > need to track this down in the source to whatever version you're using.
>> >> >
>> >> > You should probably try turning up the verbosity in valgrind to see if
>> >> > it will tell you *what* value was uninitialized; though looking at the
>> >> > right line 659 might make that apparent.
>> >>
>> >> thank you for the information, here is the ouput of valgrind, how
>> >> could i solve it? and someone said that it's caused by video driver
>> >> error, is that possible?
>> >
>> > As I suggest above, inspect the source for whatever version of Mesa
>> > you're using.  Find the variable that valgrind is claiming is
>> > uninitialized.
>>
>> I'm using the mesa from its git, that the latest code,(I also used
>> 7.4, 7.5 and 7.6 of mesa, all the similar error), the variable not
>> uninitialized should be psc->driScreen->waitX
>> in line 659 of glxcmds.c          if (psc->driScreen->waitX != NULL)
>> any advice? thanks
>
> That sounds like it's almost certainly the bug that Jean pointed out.  I
> suggest applying the patch attached to that bug report.

thank you, I have add a command to that bug, and now I solved my
problem by installing the non-free video driver from Nivida company,
which contains its own opengl library implementation. :(

>
> --
> Braden McDaniel <braden@...>
>
> _______________________________________________
> gtkglext-list mailing list
> gtkglext-list@...
> http://mail.gnome.org/mailman/listinfo/gtkglext-list
>



--
我的操作系統是Gnu/Linux Debian/gNewSense Gnome Mozilla Gmail/Evolution
Gtkmm/Gtkglextmm Scim Totem Pidgin.
_______________________________________________
gtkglext-list mailing list
gtkglext-list@...
http://mail.gnome.org/mailman/listinfo/gtkglext-list

Parent Message unknown Re: Is it a bug of gtkglext?

by 明覺 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Sun, May 17, 2009 at 11:11 PM, Mitchell Laks <mlaks@...> wrote:

> Dear shi minjue,
>
>
> I understand you dont like using the nvidia drivers.
> I think that you simply have no DRI without them.
> I wish I understood this a little better.
>
> I believe that ati is doing some work to make some? of their drivers open source, but  not completely.
>
> see this  long article
>
> http://www.anandtech.com/video/showdoc.aspx?i=3108
>
>
>
> i think some older nvidia cards have open source drivers as well.
> https://help.ubuntu.com/community/RadeonDriver
>
> however you must  read all this :)
>
> http://nouveau.freedesktop.org/wiki/FrontPage#Docs
>
> http://wiki.x.org/wiki/Development/Documentation/HowVideoCardsWork
>
> what do you plan to do that you like to use gtkglext?
>
> Mitchell
>

thank you for the useful information, I have read some of them, and
can understand a little part of them now, learning 3d programming is a
long way to go.... :)



--
我的操作系統是Gnu/Linux Debian/gNewSense Gnome Mozilla Gmail/Evolution
Gtkmm/Gtkglextmm Scim Totem Pidgin.
_______________________________________________
gtkglext-list mailing list
gtkglext-list@...
http://mail.gnome.org/mailman/listinfo/gtkglext-list