[ANN] OpenGL-0.32g for Apple MacOS X

J

James Adam

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 <[email protected]>
2006-01-28 :: (Updated to rb-opengl-0.32g)

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

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'
=3D> 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/news2/comp.lang.ruby/23917

Or the quick fix, detailed here:

http://ruby-talk.org/cgi-bin/scat.rb/~poffice/news2/comp.lang.ruby/24004
 
J

Joe Van Dyk

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
 
B

Bill Kelly

From: "Joe Van Dyk said:
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_follow_ghost.jpg



This is looking like an awesome library.


Regards,

Bill
 
T

tsuraan

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.


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 <[email protected]>
2006-01-28 :: (Updated to rb-opengl-0.32g)

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

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'
=3D> 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/news2/comp.lang.ruby/2391= 7

Or the quick fix, detailed here:

http://ruby-talk.org/cgi-bin/scat.rb/~poffice/news2/comp.lang.ruby/2400= 4
 
J

James Adam

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

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.


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 <[email protected]>
2006-01-28 :: (Updated to rb-opengl-0.32g)

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

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'
=3D> 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/news2/comp.lang.ruby/23= 917

Or the quick fix, detailed here:

http://ruby-talk.org/cgi-bin/scat.rb/~poffice/news2/comp.lang.ruby/24= 004
 
T

tsuraan

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?
 
G

George Moschovitis

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.
 
J

James Adam

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! :-(
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,901
Latest member
Noble71S45

Latest Threads

Top