Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add sample script for the Gtk::GLArea widget #499

Merged
merged 6 commits into from Aug 11, 2015

Conversation

cedlemo
Copy link
Contributor

@cedlemo cedlemo commented Aug 1, 2015

Here is the first example of the Gtk::GLArea. I plan to do 2 or 3 more examples (for fun).

It could be great to put a reference of the OpenGL bindings we support in th README.

when :OPENGL_PLATFORM_MACOSX
OpenGL.load_lib("libGL.dylib", "/System/Library/Frameworks/OpenGL.framework/Libraries")
when :OPENGL_PLATFORM_LINUX
OpenGL.load_lib("libGL.so", "/usr/lib")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also I'm worrying about #500 (comment).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:) I will work on it !

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Merci! ;)

@cosmo0920
Copy link
Member

Perhaps, in this PR, you should be fix like: cedlemo@23bf3af.

@cosmo0920
Copy link
Member

Oops, just one step behind...
Your work is very fast! Thanks!!

# /usr/lib /usr/lib64 slackware
# /usr/lib/i386.. /usr/lib/x86_64..debian
libs = Dir.glob("/usr/lib*/libGL.so") # libs in /usr/lib or /usr/lib64 for most distribs
libs = Dir.glob("/usr/lib*/*/libGL.so") if libs.empty? == 0 # debian like
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Array#empty? returns Boolean value.
So, it is needless comparing to zero.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This comment means libs.size == 0 can rewrite libs.empty?.

@cedlemo
Copy link
Contributor Author

cedlemo commented Aug 2, 2015

I did it too fast that is why I made an error. As I had already done it in the previous pull request I didn't focus enought on it thinking it was easy. すみません !

@cosmo0920
Copy link
Member

Thanks for your fixing! 油断大敵[(pronounce: Yudan'taiteki) Don't be too sure of yourself!] ですね!

@cedlemo
Copy link
Contributor Author

cedlemo commented Aug 2, 2015

油断大敵[(pronounce: Yudan'taiteki) Don't be too sure of yourself!]

I like it! Merci !

@cosmo0920
Copy link
Member

For now, it's @kou's reviewing turn. Let's waiting for his review.

@kou
Copy link
Member

kou commented Aug 6, 2015

Thanks.
I tried it and it crashed on my environment... (Debian GNU/Linux sid)

% gdb --args ruby gtkglarea1.rb
...
(gdb) r
...
realize
render

Program received signal SIGSEGV, Segmentation fault.
0x00007fffe29b2ef7 in ?? () from /usr/lib/x86_64-linux-gnu/dri/nouveau_dri.so
(gdb) bt 10
#0  0x00007fffe29b2ef7 in finalize_textures (st=0x325c450)
    at ../../../../src/mesa/state_tracker/st_atom_texture.c:519
#1  0x00007fffe29afe79 in st_validate_state (st=st@entry=0x325c450)
    at ../../../../src/mesa/state_tracker/st_atom.c:234
#2  0x00007fffe29b5197 in st_BlitFramebuffer (ctx=0x32c15c0, readFB=0x33850c0, drawFB=0x3381e00, srcX0=0, srcY0=0, srcX1=400, srcY1=400, dstX0=0, dstY0=0, dstX1=400, dstY1=400, mask=16384, filter=9728)
    at ../../../../src/mesa/state_tracker/st_cb_blit.c:95
#3  0x00007fffe287a062 in _mesa_BlitFramebuffer (srcX0=<optimized out>, srcY0=<optimized out>, srcX1=<optimized out>, srcY1=<optimized out>, dstX0=<optimized out>, dstY0=<optimized out>, dstX1=400, dstY1=400, mask=16384, filter=9728)
    at ../../../../src/mesa/main/blit.c:527
#4  0x00007fffef8f33e2 in gdk_cairo_draw_from_gl (cr=cr@entry=0x33833e0, window=<optimized out>, source=source@entry=1, source_type=source_type@entry=36161, buffer_scale=buffer_scale@entry=1, x=x@entry=0, y=0, width=400, height=400)
    at /tmp/buildd/gtk+3.0-3.16.6/./gdk/gdkgl.c:441
#5  0x00007fffed740c44 in gtk_gl_area_draw (widget=0x20e0670 [GtkGLArea], cr=0x33833e0) at /tmp/buildd/gtk+3.0-3.16.6/./gtk/gtkglarea.c:710
#6  0x00007fffed782b89 in _gtk_marshal_BOOLEAN__BOXEDv (closure=closure@entry=0x1e01e00, return_value=return_value@entry=0x7fffffffbb70, instance=instance@entry=0x20e0670, args=args@entry=0x7fffffffbc70, marshal_data=marshal_data@entry=0x7fffed740a60 <gtk_gl_area_draw>, n_params=n_params@entry=1, param_types=0xb524a0)
    at /tmp/buildd/gtk+3.0-3.16.6/./gtk/gtkmarshalers.c:130
#7  0x00007fffed8b817c in gtk_widget_draw_marshallerv (closure=0x1e01e00, return_value=0x7fffffffbb70, instance=0x20e0670, args=0x7fffffffbc70, marshal_data=0x7fffed740a60 <gtk_gl_area_draw>, n_params=1, param_types=0xb524a0)
    at /tmp/buildd/gtk+3.0-3.16.6/./gtk/gtkwidget.c:1097
#8  0x00007ffff5c29452 in _g_closure_invoke_va (closure=0x1e01e00, return_value=0x7fffffffbb70, instance=0x20e0670, args=0x7fffffffbc70, n_params=1, param_types=0xb524a0) at /tmp/buildd/glib2.0-2.44.1/./gobject/gclosure.c:831
#9  0x00007ffff5c42a50 in g_signal_emit_valist (instance=0x20e0670, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7fffffffbc70)
    at /tmp/buildd/glib2.0-2.44.1/./gobject/gsignal.c:3214
#10 0x00007ffff5c438ff in g_signal_emit (instance=instance@entry=0x20e0670, signal_id=<optimized out>, detail=detail@entry=0)
    at /tmp/buildd/glib2.0-2.44.1/./gobject/gsignal.c:3361
(gdb) 

Do you know requirements of this script? I'm a GNOME 3 user. So GL will be available on my environment.

Here is my environment information:

% dpkg -l | grep gtk-3-0
ii  libgtk-3-0:amd64           3.16.6-1           amd64              GTK+ graphical user interface library
ii  libgtk-3-0-dbg             3.16.6-1           amd64              GTK+ libraries and debugging symbols
% dpkg -l | grep mesa
ii  libegl1-mesa:amd64         10.6.3-1           amd64              free implementation of the EGL API -- runtime
ii  libegl1-mesa-dev:amd64     10.6.3-1           amd64              free implementation of the EGL API -- development files
ii  libegl1-mesa-drivers:amd64 10.6.3-1           amd64              transitional dummy package
ii  libgl1-mesa-dev:amd64      10.6.3-1           amd64              free implementation of the OpenGL API -- GLX development f
ii  libgl1-mesa-dev:i386       10.6.3-1           i386               free implementation of the OpenGL API -- GLX development f
ii  libgl1-mesa-dri:amd64      10.6.3-1           amd64              free implementation of the OpenGL API -- DRI modules
ii  libgl1-mesa-dri:i386       10.6.3-1           i386               free implementation of the OpenGL API -- DRI modules
ii  libgl1-mesa-glx:amd64      10.6.3-1           amd64              free implementation of the OpenGL API -- GLX runtime
ii  libgl1-mesa-glx:i386       10.6.3-1           i386               free implementation of the OpenGL API -- GLX runtime
ii  libglapi-mesa:amd64        10.6.3-1           amd64              free implementation of the GL API -- shared library
ii  libglapi-mesa:i386         10.6.3-1           i386               free implementation of the GL API -- shared library
ii  libgles1-mesa:amd64        10.6.3-1           amd64              free implementation of the OpenGL|ES 1.x API -- runtime
ii  libgles2-mesa:amd64        10.6.3-1           amd64              free implementation of the OpenGL|ES 2.x API -- runtime
ii  libgles2-mesa-dev:amd64    10.6.3-1           amd64              free implementation of the OpenGL|ES 2.x API -- developmen
ii  libglu1-mesa:amd64         9.0.0-2            amd64              Mesa OpenGL utility library (GLU)
ii  libglu1-mesa:i386          9.0.0-2            i386               Mesa OpenGL utility library (GLU)
ii  libglu1-mesa-dev           9.0.0-2            amd64              Mesa OpenGL utility library -- development files
ii  libopenvg1-mesa:amd64      10.3.2-1           amd64              free implementation of the OpenVG API -- runtime
ii  libosmesa6:i386            10.6.3-1           i386               Mesa Off-screen rendering extension
ii  libosmesa6-dev:i386        10.6.3-1           i386               Mesa Off-screen rendering extension -- development files
ii  libwayland-egl1-mesa:amd64 10.6.3-1           amd64              implementation of the Wayland EGL platform -- runtime
ii  mesa-common-dev:amd64      10.6.3-1           amd64              Developer documentation for Mesa
ii  mesa-common-dev:i386       10.6.3-1           i386               Developer documentation for Mesa
ii  mesa-utils                 8.2.0-1            amd64              Miscellaneous Mesa GL utilities
% dpkg -l | grep nouveau
ii  libdrm-nouveau2:amd64      2.4.62-1           amd64              Userspace interface to nouveau-specific kernel DRM service
ii  libdrm-nouveau2:i386       2.4.62-1           i386               Userspace interface to nouveau-specific kernel DRM service
ii  xserver-xorg-video-nouveau 1:1.0.11-1+b1      amd64              X.Org X server -- Nouveau display driver
% xdpyinfo
name of display:    :0
version number:    11.0
vendor string:    The X.Org Foundation
vendor release number:    11702000
X.Org version: 1.17.2
maximum request size:  16777212 bytes
motion buffer size:  256
bitmap unit, bit order, padding:    32, LSBFirst, 32
image byte order:    LSBFirst
number of supported pixmap formats:    7
supported pixmap formats:
    depth 1, bits_per_pixel 1, scanline_pad 32
    depth 4, bits_per_pixel 8, scanline_pad 32
    depth 8, bits_per_pixel 8, scanline_pad 32
    depth 15, bits_per_pixel 16, scanline_pad 32
    depth 16, bits_per_pixel 16, scanline_pad 32
    depth 24, bits_per_pixel 32, scanline_pad 32
    depth 32, bits_per_pixel 32, scanline_pad 32
keycode range:    minimum 8, maximum 255
focus:  window 0x1e00007, revert to Parent
number of extensions:    29
    BIG-REQUESTS
    Composite
    DAMAGE
    DOUBLE-BUFFER
    DPMS
    DRI2
    GLX
    Generic Event Extension
    MIT-SCREEN-SAVER
    MIT-SHM
    Present
    RANDR
    RECORD
    RENDER
    SECURITY
    SGI-GLX
    SHAPE
    SYNC
    X-Resource
    XC-MISC
    XFIXES
    XFree86-DGA
    XFree86-VidModeExtension
    XINERAMA
    XInputExtension
    XKEYBOARD
    XTEST
    XVideo
    XVideo-MotionCompensation
default screen number:    0
number of screens:    1

screen #0:
  dimensions:    3840x1080 pixels (1016x286 millimeters)
  resolution:    96x96 dots per inch
  depths (7):    24, 1, 4, 8, 15, 16, 32
  root window id:    0x2e3
  depth of root window:    24 planes
  number of colormaps:    minimum 1, maximum 1
  default colormap:    0x20
  default number of colormap cells:    256
  preallocated pixels:    black 0, white 16777215
  options:    backing-store WHEN MAPPED, save-unders NO
  largest cursor:    64x64
  current input event mask:    0xda0033
    KeyPressMask             KeyReleaseMask           EnterWindowMask          
    LeaveWindowMask          StructureNotifyMask      SubstructureNotifyMask   
    SubstructureRedirectMask PropertyChangeMask       ColormapChangeMask       
  number of visuals:    240
  default visual id:  0x21
  visual:
    visual id:    0x21
    class:    TrueColor
    depth:    24 planes
    available colormap entries:    256 per subfield
    red, green, blue masks:    0xff0000, 0xff00, 0xff
    significant bits in color specification:    8 bits
...(other visuals)...

@cedlemo
Copy link
Contributor Author

cedlemo commented Aug 6, 2015

The unique linux environment tested (which was mine) use nvidia.

Check OpenGL on your system:

What is the output of those commands on your system:

glxinfo | grep "OpenGL"
glxinfo| grep "direct rendering"

Find the libs :

find /usr -name "libGL.so*" | xargs ls -rtl

@kou
Copy link
Member

kou commented Aug 8, 2015

Here are outputs:

% glxinfo | grep "OpenGL"
OpenGL vendor string: nouveau
OpenGL renderer string: Gallium 0.4 on NVA8
OpenGL core profile version string: 3.3 (Core Profile) Mesa 10.6.3
OpenGL core profile shading language version string: 3.30
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 3.0 Mesa 10.6.3
OpenGL shading language version string: 1.30
OpenGL context flags: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.0 Mesa 10.6.3
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.00
OpenGL ES profile extensions:
% glxinfo| grep "direct rendering"
direct rendering: Yes
% find /usr -name "libGL.so*" | xargs ls -rtl
lrwxrwxrwx 1 root root     14  7月 28 17:22 /usr/lib/x86_64-linux-gnu/libGL.so.1 -> libGL.so.1.2.0
lrwxrwxrwx 1 root root     14  7月 28 17:22 /usr/lib/x86_64-linux-gnu/libGL.so -> libGL.so.1.2.0
-rw-r--r-- 1 root root 619128  7月 28 17:22 /usr/lib/x86_64-linux-gnu/libGL.so.1.2.0
lrwxrwxrwx 1 root root     14  7月 28 19:05 /usr/lib/i386-linux-gnu/libGL.so.1 -> libGL.so.1.2.0
lrwxrwxrwx 1 root root     14  7月 28 19:05 /usr/lib/i386-linux-gnu/libGL.so -> libGL.so.1.2.0
-rw-r--r-- 1 root root 685756  7月 28 19:05 /usr/lib/i386-linux-gnu/libGL.so.1.2.0

I like nouveau driver rather than nvidia driver for NVIDIA video card. Because nouveau driver is free software.

@cedlemo
Copy link
Contributor Author

cedlemo commented Aug 8, 2015

It seems that your OpenGL version is not very recent:

OpenGL version string: 3.0 Mesa 10.6.3

I have seen that the GtkGLArea needed OpenGL version => 3.2:

source : https://www.bassi.io/articles/2015/02/17/using-opengl-with-gtk/

Things to know before we start

the OpenGL support inside GTK+ requires core GL profiles, and thus it won’t work with the fixed pipeline API that was common until OpenGL 3.2 and later versions. this means that you won’t be able to use API like glRotatef(), or glBegin()/glEnd() pairs, or any of that stuff.

Maybe it is the problem.

I will install nouveau instead of nvidia on my system in order to see if it does the same.

I know that you must be busy but it would be great if you could find the time to just check the OpenGL samples (https://github.com/vaiorabbit/ruby-opengl/tree/master/sample) and send a report like I did here vaiorabbit/ruby-opengl#8 and add you system configuration and environment informations in the README.m.

So far here is what we have (before I send an issue to @vaoirabbit):

  • the getlibdir function must find your library dir
  • your OpenGL is working
  • your OpenGL version is maybe too old
  • It could be a "nouveau issue" (I will test on my system)

Any other ideas?

@cedlemo
Copy link
Contributor Author

cedlemo commented Aug 8, 2015

Ok so I have tested with nouveau and it seems that I have the same issue:

Starting program: /usr/bin/ruby gtkglarea1.rb
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
[New Thread 0x7ffff7ff7700 (LWP 1862)]
realize
render
[New Thread 0x7fffe894b700 (LWP 1863)]

Program received signal SIGSEGV, Segmentation fault.
0x00007fffe33d7097 in ?? () from /usr/lib/xorg/modules/dri/nouveau_dri.so
(gdb) 

I have the same OpenGL version too:

glxinfo | grep "OpenGL"                                                                                                                                                       [19:00:50] 
OpenGL vendor string: nouveau
OpenGL renderer string: Gallium 0.4 on NVC3
OpenGL core profile version string: 3.3 (Core Profile) Mesa 10.6.3
OpenGL core profile shading language version string: 3.30
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 3.0 Mesa 10.6.3
OpenGL shading language version string: 1.30
OpenGL context flags: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.0 Mesa 10.6.3
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.00
OpenGL ES profile extensions:

I am about to tests all the opengl-bindings sample to see if there is no problem with the nouveau driver.

I think that for this script I will use those methods:

Gtk::GLArea.new.methods.grep(/version/)
=> [:required_version, :set_required_version]
irb(main):003:0>

In order to make a test on the OpenGL version or use the opengl bindings to get the current version.

@kou
Copy link
Member

kou commented Aug 9, 2015

I have seen that the GtkGLArea needed OpenGL version => 3.2:

Thanks for the information. It must be the problem on my environment.

  • the getlibdir function must find your library dir

It works but it's needless. We can just use OpenGL.load_lib:

% ruby -r opengl -e 'p OpenGL.load_lib'
#<Fiddle::Handle:0x00000001489300>

dlopen(3) used in Fiddle.dlopen searches shared object from system when argument ("libGL.so" in this case) doesn't have /. It's more portable rather than we find directory that has libGL.so.

I'll merge this sample script when you replace the current OpenGL.load_lib related codes (L27-L57) with just OpenGL.load_lib. If we have any problems with OpenGL.load_lib, we should contribute to opengl-bindings project. If all (or most of) users can just use OpenGL.load_lib, they will be happy. :-)

  • It could be a "nouveau issue" (I will test on my system)

I think so. Your test also says "yes".

In order to make a test on the OpenGL version or use the opengl bindings to get the current version.

"use the opengl bindings to get the current version" is better. Because Gtk::GLArea.set_required_version doesn't report any errors when the system doesn't satisfy the required version.

I know that you must be busy but it would be great if you could find the time to just check the OpenGL samples (https://github.com/vaiorabbit/ruby-opengl/tree/master/sample) and send a report like I did here vaiorabbit/ruby-opengl#8 and add you system configuration and environment informations in the README.md.

You're right. I'll do it in this month.

@cedlemo
Copy link
Contributor Author

cedlemo commented Aug 9, 2015

I'll merge this sample script when you replace the current OpenGL.load_lib related codes (L27-L57) with just OpenGL.load_lib. If we have any problems with OpenGL.load_lib, we should contribute to opengl-bindings project. If all (or most of) users can just use OpenGL.load_lib, they will be happy. :-)

Well I am not sure about that because I already talk with vaiorabbit about this( maybe I wasn't clear enought , english is not my native language). see (vaiorabbit/ruby-opengl#7):

I think any platform-specific lib/path names shouldn't be used as default arguments.
Normally, users are responsible for filling these arguments explicitly.

But I will try again.

@kou
Copy link
Member

kou commented Aug 9, 2015

I'll merge this sample script when you replace the current OpenGL.load_lib related codes (L27-L57) with just OpenGL.load_lib. If we have any problems with OpenGL.load_lib, we should contribute to opengl-bindings project. If all (or most of) users can just use OpenGL.load_lib, they will be happy. :-)

Well I am not sure about that because I already talk with vaiorabbit about this( maybe I wasn't clear enought , english is not my native language). see (vaiorabbit/ruby-opengl#7):

(English is not my native language too. :<)

I'll try to describe again.

The following code works on my environment. (It is crashed but OpenGL.load_lib doesn't raise any error.) If this code works well too on your environment. I want to use this code.

=begin
  gtkglarea1.rb draw a triangle on a grey background
  this script need the opengl-bindings gem from :
  https://github.com/vaiorabbit/ruby-opengl

  gem install opengl-bindings

  sources:
  http://antongerdelan.net/opengl/hellotriangle.html
  opengl-bindings/sample/RedBook/varray
  opengl-bindings/sample/GLES/gles.rb
  http://www.opengl-tutorial.org/beginners-tutorials/tutorial-2-the-first-triangle/
  https://developer.gnome.org/gtk3/stable/GtkGLArea.html
  https://www.bassi.io/articles/2015/02/17/using-opengl-with-gtk/
  http://stackoverflow.com/questions/30337845/gldrawarrays-not-working-using-gtkglarea-in-gtk3
  http://gamedev.stackexchange.com/questions/8042/vertex-array-object-opengl
=end

require "gtk3"
require "opengl"

unless Gtk::Version.or_later?(3, 16, 0)
  puts "This sample requires GTK+ 3.16.0 or later: #{Gtk::Version::STRING}"
  exit
end

OpenGL.load_lib

include OpenGL

window = Gtk::Window.new("OpenGL widget test")

window.set_size_request(400, 400)
glarea = Gtk::GLArea.new

window.add(glarea)

gl_vao = nil

glarea.signal_connect("realize") do |widget|
  widget.make_current
  puts "realize"
  # Define a triangle in a vertex buffer ( Vertex Buffer Object)

  points = [
    0.0, 0.5, 0.0,  # x1, y1, z1
    0.5, -0.5, 0.0, # x2, y2, z2
    -0.5, -0.5, 0.0 # x3, y3, z3
  ]
  # Create a vertex array object (VAO) and "bind" it (set it as the current VAO)
  vao_buf = "    "
  glGenVertexArrays(1, vao_buf)
  gl_vao = vao_buf.unpack("L")[0]
  glBindVertexArray(gl_vao)

  # We copy points onto the graphics card in a unit called vertex buffer object (vbo).
  # Create an empty buffer
  vbo_buf = "    "
  glGenBuffers(1, vbo_buf)
  g_vbo = vbo_buf.unpack("L")[0]
  # Set the empty buffer as the current OpenGL's state machine by "binding"
  glBindBuffer(GL_ARRAY_BUFFER, g_vbo)
  # Copy the points in the currently bound buffer
  glBufferData(GL_ARRAY_BUFFER,
               3 * 4 * Fiddle::SIZEOF_FLOAT,
               points.pack("F*"),
               GL_STATIC_DRAW
              )

  # First attribute buffer : vertices
  glEnableVertexAttribArray(0)
  glVertexAttribPointer(0,        # No particular reason for 0
                        3,        # size
                        GL_FLOAT, # type
                        GL_FALSE, # normalized?
                        0,        # stride
                        0         # array buffer offset
                       )
  # Clear the current VAO
  glBindVertexArray(0)
end

glarea.signal_connect("render") do |_widget, _context|
  puts "render"
  glClearColor(0.3, 0.3, 0.3, 1)
  glClear(GL_COLOR_BUFFER_BIT)
  # Reload the VAO we created previously
  glBindVertexArray(gl_vao)
  glDrawArrays(GL_TRIANGLES, 0, 3)

  # we completed our drawing; the draw commands will be
  # flushed at the end of the signal emission chain, and
  # the buffers will be drawn on the window
  true # to stop other handlers from being invoked for the event.
  # false to propagate the event further.
end

window.signal_connect("destroy") { Gtk.main_quit }

window.show_all

Gtk.main

@cedlemo
Copy link
Contributor Author

cedlemo commented Aug 9, 2015

分かりました!

vaiorabbit/ruby-opengl#22

@kou
Copy link
Member

kou commented Aug 9, 2015

分かりました!

vaiorabbit/ruby-opengl#22

Great! :-)

Could you also update this pull request? I'll merge.

@cedlemo
Copy link
Contributor Author

cedlemo commented Aug 9, 2015

Sorry for the delay.

Modifications done and rebase too.

kou added a commit that referenced this pull request Aug 11, 2015
Add sample script for the Gtk::GLArea widget

Patch by cedlemo. Thanks!!!
@kou kou merged commit 23b9d60 into ruby-gnome:master Aug 11, 2015
@kou
Copy link
Member

kou commented Aug 11, 2015

Thanks.
I've merged and removed needless code.

@cedlemo cedlemo deleted the sample_misc_gtkglarea1_rb branch August 14, 2015 16:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants