Forum: Ruby OpenGL-0.32g for Apple MacOS X

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
05d703f649ef1d07e78d7b479fb4c4ac?d=identicon&s=25 James Adam (Guest)
on 2006-01-29 01:22
(Received via mailing list)
In case anyone needs this, I've uploaded my tweaked version of the
latest rb-opengl bindings to:

  http://www.lazyatom.com/software/opengl-0.32g.tar.gz

You'll need the Developer Tools and probably the GLUT source from
Apple already installed. Here's the README:

2005-04-26 :: James Adam <james@lazyatom.com>
2006-01-28 :: (Updated to rb-opengl-0.32g)

Ruby-OpenGL Bindings for Mac OS X
=================================

So basically here's a tweaked version of the original OpenGL module
for the Mac. To compile, just follow the same instructions as normal:

Build it - don't worry too much about any warnings:
$ ruby extconf.rb
$ make

Test it out:
$ ruby sample/robot.rb
(press the 'e' and 's' keys to make the "robot" move...)

Install it:
$ make install
(or possibly "sudo make install", depending on where your ruby is)



Changes I've made
-----------------

extconf.rb:
Added -framework flags and correct include directories
Hacked to generate GLUT module even without detection of -lGLUT, since
mkmf can't deal with the Mac GLUT framework

*.c:
Edited #includes to use <OpenGL/gl.h> and <GLUT/glut.h>

glut.c:
I've added the function CheckLoop to the GLUT module in line with the
same function in Apple's GLUT. GLUT's MainLoop is blocking and forces
you to perform additoinal processing using GLUT's IdleFunc system,
which can sometimes be very undesirable (particularly if you are using
Ruby as the glue between two libraries which both feature this type of
loop). CheckLoop allows you to cycle through a *single* GLUT
processing loop, and then returns control to the calling
thread/process. Thus, by periodically calling CheckLoop, you can get
the scene to update without having GLUT seize control of the whole
application.

I've also added calls for Glut.GameModeString(mode_string) and
Glut.EnterGameMode(), allowing you to switch your application to
fullscreen.

Finally, a new method GLUT.BitmapCharacterX(char) for displaying
characters, since there seems to be a problem with the default
GLUT.BitmapCharacter method.


Problems
--------

For some reason, including the libraries from the command line fails.
For instance:

$ irb
irb(main):001:0> require 'opengl'; require 'glut'
=> true

... works fine, but:

$ irb -r opengl
/usr/local/lib/ruby/site_ruby/1.8/powerpc-darwin8.0.0/opengl.bundle:
[BUG] Bus Error
ruby 1.8.2 (2004-12-25) [powerpc-darwin8.0.0]

Abort trap

... clearly fails. You can see the discussion of this problem
(something unfortunately inherent with IRB on the mac) here:

  http://ruby-talk.org/cgi-bin/scat.rb/~poffice/news...

Or the quick fix, detailed here:

  http://ruby-talk.org/cgi-bin/scat.rb/~poffice/news...
38a8230ed3d5c685558b4f0aad3fc74b?d=identicon&s=25 Joe Van Dyk (Guest)
on 2006-01-29 05:32
(Received via mailing list)
On 1/28/06, James Adam <james.adam@gmail.com> wrote:
> In case anyone needs this, I've uploaded my tweaked version of the
> latest rb-opengl bindings to:

Has anyone used Ruby + OpenGL for anything of interest?

Joe
4feed660d3728526797edeb4f0467384?d=identicon&s=25 Bill Kelly (Guest)
on 2006-01-29 07:24
(Received via mailing list)
From: "Joe Van Dyk" <joevandyk@gmail.com>
>
> Has anyone used Ruby + OpenGL for anything of interest?

I've been stoked by the librend screenshots:

http://librend.rubyforge.org/wiki/wiki.pl   (Project Page)

For ex:

http://librend.rubyforge.org/screenshots/picking.png
http://librend.rubyforge.org/screenshots/round_cut.png
http://librend.rubyforge.org/screenshots/textured_tram.png
http://librend.rubyforge.org/screenshots/topview_f...



This is looking like an awesome library.


Regards,

Bill
E20e89d58211a3631842daecc1245de2?d=identicon&s=25 Ilmari Heikkinen (Guest)
on 2006-01-29 09:48
(Received via mailing list)
On 1/29/06, Bill Kelly <billk@cts.com> wrote:
> http://librend.rubyforge.org/screenshots/picking.png
> http://librend.rubyforge.org/screenshots/round_cut.png
> http://librend.rubyforge.org/screenshots/textured_tram.png
> http://librend.rubyforge.org/screenshots/topview_f...

Here's a 10MB video of a presentation I made for class using librend:

http://www.cs.helsinki.fi/u/irkheikk/fx_final.avi
Needs an XviD codec of some sort, don't know exactly _what_ sort.

It was more fun than doing the usual powerpoint thing, and a lot more
work too. But now I can extract all the effects and add them to
librend proper :)

Source at http://librend.rubyforge.org/fx/fx.rb but it's against an
old CVS version, and I managed to break stuff in the current CVS, so
it's not going to work until the next release of librend.

> This is looking like an awesome library.

Thanks, appreciate it.

Cheers,
 Ilmari
Ea9037f12dee625cc50ab92b9b7b7102?d=identicon&s=25 tsuraan (Guest)
on 2006-01-29 17:51
(Received via mailing list)
Trying this, I get

objc: failed objc_getClass(NSObject) for GLUTApplication->isa->isa
objc: please link appropriate classes in your program
Trace/BPT trap

I cleaned out the old opengl.bundle and glut.bundle and re-built the
bindings from the new package.  I have no idea what this error means,
so any tips would be appreciated :)  I do have the GLUT.framework and
X-Code installed, so I think I'm good there.
05d703f649ef1d07e78d7b479fb4c4ac?d=identicon&s=25 James Adam (Guest)
on 2006-01-29 21:08
(Received via mailing list)
Hmm.... the addition of "--framework Foundation" should prevent this
and ensure that the Obj-C runtime is initialised. Can you confirm that
your compile includes this flag? (it should be added automatically for
the darwin platform by the appropriate section in extconf.rb

- james
Ea9037f12dee625cc50ab92b9b7b7102?d=identicon&s=25 tsuraan (Guest)
on 2006-01-30 00:18
(Received via mailing list)
> Hmm.... the addition of "--framework Foundation" should prevent this
> and ensure that the Obj-C runtime is initialised. Can you confirm that
> your compile includes this flag? (it should be added automatically for
> the darwin platform by the appropriate section in extconf.rb

The full result of typing 'make' is (sorry for the long ugly post):

Now Making glut extend module
gcc -fno-common -g -O2  -fno-common -pipe -fno-common -I.
-I/System/Library/Frameworks/OpenGL.framework/Headers
-I/System/Library/Frameworks/GLUT.framework/Headers  -I.
-I/usr/lib/ruby/1.8/powerpc-darwin7.9.0
-I/usr/lib/ruby/1.8/powerpc-darwin7.9.0 -I.   -c glut.c
glut.c: In function `glut_KeyboardFunc':
glut.c:157: warning: passing arg 1 of `glutKeyboardFunc' from
incompatible pointer type
cc -dynamic -bundle -undefined suppress -flat_namespace -framework
OpenGL -framework GLUT -framework Foundation  -L"/usr/lib"
-L"/System/Library/Frameworks/OpenGL.framework/Libraries/" -o
glut.bundle glut.o  -lruby -lGLU -lGL  -lpthread -ldl -lobjc   -lruby
Now Making opengl extend module
gcc -fno-common -g -O2  -fno-common -pipe -fno-common -I.
-I/System/Library/Frameworks/OpenGL.framework/Headers
-I/System/Library/Frameworks/GLUT.framework/Headers  -I.
-I/usr/lib/ruby/1.8/powerpc-darwin7.9.0
-I/usr/lib/ruby/1.8/powerpc-darwin7.9.0 -I.   -c glu.c
glu.c: In function `glu_PickMatrix':
glu.c:1185: warning: passing arg 2 of `ary2cint' from incompatible
pointer type
glu.c: In function `glu_Project':
glu.c:1224: warning: passing arg 2 of `ary2cint' from incompatible
pointer type
glu.c: In function `glu_UnProject':
glu.c:1269: warning: passing arg 2 of `ary2cint' from incompatible
pointer type
gcc -fno-common -g -O2  -fno-common -pipe -fno-common -I.
-I/System/Library/Frameworks/OpenGL.framework/Headers
-I/System/Library/Frameworks/GLUT.framework/Headers  -I.
-I/usr/lib/ruby/1.8/powerpc-darwin7.9.0
-I/usr/lib/ruby/1.8/powerpc-darwin7.9.0 -I.   -c ogl.c
gcc -fno-common -g -O2  -fno-common -pipe -fno-common -I.
-I/System/Library/Frameworks/OpenGL.framework/Headers
-I/System/Library/Frameworks/GLUT.framework/Headers  -I.
-I/usr/lib/ruby/1.8/powerpc-darwin7.9.0
-I/usr/lib/ruby/1.8/powerpc-darwin7.9.0 -I.   -c rbogl.c
cc -dynamic -bundle -undefined suppress -flat_namespace -framework
OpenGL -framework GLUT -framework Foundation  -L"/usr/lib"
-L"/System/Library/Frameworks/OpenGL.framework/Libraries/" -o
opengl.bundle glu.o ogl.o rbogl.o  -lruby -lGLU -lGL  -lpthread -ldl
-lobjc   -lruby



So, it looks like I'm using the foundation framework.  Does ruby need
to be compiled with it also?
7a4e995e378ef66de0ceaea5e1381ee1?d=identicon&s=25 George Moschovitis (Guest)
on 2006-01-31 14:03
(Received via mailing list)
> It was more fun than doing the usual powerpoint thing, and a lot more
> work too. But now I can extract all the effects and add them to
> librend proper :)
>
> Source at http://librend.rubyforge.org/fx/fx.rb but it's against an
> old CVS version, and I managed to break stuff in the current CVS, so
> it's not going to work until the next release of librend.

Quite impressive ;-)

-g.
05d703f649ef1d07e78d7b479fb4c4ac?d=identicon&s=25 James Adam (Guest)
on 2006-01-31 18:16
(Received via mailing list)
On 1/29/06, tsuraan <tsuraan@gmail.com> wrote:
> So, it looks like I'm using the foundation framework.  Does ruby need
> to be compiled with it also?

I dont' think so - I just compiled it with the normal options and it
seemed to work fine. I know I've had errors like this in the past, but
I can't for the life of me remember how I got them to go away! :-(
This topic is locked and can not be replied to.