[MacRuby-devel] OpenGL/GLUT Bridgesupport

Jonathan Waddilove jonathan at waddilove.net
Sun Jan 24 08:00:56 PST 2010


John,

Thanks very much for the help. The "data = CGBitmapContextGetData(context)" had me confused, I was wondering if the Pointer type need a change, so you view that it's a bug is very helpful. Yes, I now have IcePhage working.

I'll start trying to collate what has been written about Pointer and see if Julian and I can start to publish something that can then be expanded.

Many thanks, Jonathan.


regards,  Jonathan

Jonathan T Waddilove
email: jonathan at waddilove.net 
web: jonathan.waddilove.net

On 24 Jan 2010, at 11:07, John Shea wrote:

> Hi Jonathan,
> 
> yes i discovered that yesterday too.
> 
> Changing all of the "i" s to "I"s was not too hard - i do not know if this is a change in Pointer types or whatever.
> 
> The bigger issue is that this call:
> data = CGBitmapContextGetData(context)
> 
> no longer seems to return the correct data type (type "C" rather than type "v") - perhaps this is a BridgeSupport issue - I do not know, however the fix and the reason why i think its a bug, is that you can get all working (once the first fix with "i" s are done) by replacing the following code in the GLView.load_texture method from:
> 
>   context = Tools.sendTexture(imageRef)
>   data = CGBitmapContextGetData(context)
>   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_STORAGE_HINT_APPLE, GL_STORAGE_SHARED_APPLE)
>   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
>   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); 
>   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE )
>   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE )
>   gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, width, height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, data)
> 
> to
> 
>   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_STORAGE_HINT_APPLE, GL_STORAGE_SHARED_APPLE)
>   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
>   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); 
>   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE )
>   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE )
>   Tools.sendTexture(imageRef)
> 
> and add to the objc class, in class method sendTexture, before the return (which is now superfluous, but i did not change through laziness):
> 
> 	CGContextRelease(context);
> 	gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, width, height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, data);
> 
> the release is there because i know now that CoreGraphics is not garbage collected.
> 
> So the very same opengl mipmap call (with same datatype) works fine now, and so does the game (IcePhage - and its the same code in CarNage).
> 
> Of course you could move most of those opengl calls into the objC method - but that might defeat the purpose of limiting the objc code to the minimum.
> 
> 
> Cheers,
> J
> 
> 
> On Jan 23, 2010, at 3:19 PM, Jonathan Waddilove wrote:
> 
>> John,
>> 
>> I've just started to look at your IcPhage9 and CarNage8. Neither runs 'out of the box' under MacRuby Beta.5(2). There are various problems with the Pointer support having evolved (I think), e.g.: errors like "Pointer of type `i', got `l'" - I'm working to correct these and see if I can make the code function again.
>> 
>> It would be great if we could assemble a web page that documents some of the required knowledge on MAcRuby Pointers for OpenGL.
>> 
>> regards,  Jonathan
>> 
>> 
>> On 22 Jan 2010, at 16:06, John Shea wrote:
>> 
>>> 
>>> 
>>> Thank you again for offering the additional resources. It would be great if you wanted to add them to your idisc.
>>> sure.
>>> 
>>> 
>>> 
>>> I did find a copy of your excellent presentation "Building Games with MacRuby and OpenGL", I must work through the slides again. Did you consider sharing your game tools? The presentation would make a very useful basis for a web tutorial on the MacRuby/openGL topic.
>>> As far as tools are concerned the only one that ended up being useful in the end was canning particle effects, so you run the explosion, fireworks or whatever and then record a series of images, which you can use for animation later. With IcePhage however it was all on the fly particle effects - canned animation was not necessary - it could do with some optimisation (both in look and efficiency) - and macruby speed increases have probably have improved performance.
>>> 
>>> Is that what you meant by tools?
>>> 
>>> The only other software (sans MacRuby) I used was XCode, TextMate and for 3D experiments Cheetah 3D, some Illustrator & Ria for drawing, graphic converter to clean up the PNGs.
>>> 
>>> Let me know if you meant something else regarding tools.
>>> 
>>> Cheers,
>>> 
>>> J
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> Like you, I'm new to both openGL and MacRuby - my interest is in visualisations rather than games. Right now I'm just greatfull that folks like you are willing to share their hard earned skills.
>>> 
>>> Best wishes, Jonathan
>>> 
>>> jonathan 'at' waddilove.net
>>> 
>>> 
>>> On 22 Jan 2010, at 09:28, John Shea wrote:
>>> 
>>>> Jonathan,
>>>> 
>>>> I made some games in opengl this time last year (which now seem quite naive, as i did not know opengl or cocoa, so they could do with a good refactor).
>>>> 
>>>> I do not know if they work with the current version of macruby but they are on my idisk:
>>>> 
>>>> www.johnmacshea.org
>>>> 
>>>> navigate thru MacRuby / Game Related / Mine
>>>> 
>>>> Two 2D games CarNage8 and IcePhage9 are there.
>>>> 
>>>> They do screen setup, texture loading, writing text to opengl scenes (two different ways), canned explosions sometimes and particle effects for other explosions.
>>>> 
>>>> They do not use VAs or VBOs - but I do have some test projects which use VAs and VBOs, and a 3D test (which uses an exported c header file (from Cheetah 3D) holding vertex arrays).
>>>> 
>>>> Let me know if you are interested and I will dig them up and send them to you (only tested on MacRuby 0.4 however).
>>>> 
>>>> In that game related folder you will also see translations from other people's opengl work (also only tested on 0.4)
>>>> 
>>>> Cheers,
>>>> J
>>>> 
>>>> 
>>>> On Fri, 22 Jan 2010 09:32:57 +0100, Jonathan Waddilove <jonathan at waddilove.net> wrote:
>>>> 
>>>>> John,
>>>>> 
>>>>> Thank you for the response. GLUT won't be my first choice but I'm trying to follow the examples in the SuperBible.
>>>>> 
>>>>> I'm wondering what the plan is to support all the 'standard' frameworks in MacRuby is? Should I be able to process the GLUT.framework with gen_bridge_metadata?
>>>>> 
>>>>> Meanwhile I will look at providing my own wrapper class as you suggest. As you say this provides a flexible way of handling any framework that lacks bridge support.
>>>>> 
>>>>> Many thank, Jonathan
>>>>> 
>>>>> On 21 Jan 2010, at 20:56, John Shea wrote:
>>>>> 
>>>>>> Yes as far as I know bridge support does not support GLUT.
>>>>>> 
>>>>>> So you (obviously) have two other options other than gen_bridge_metadata (which I gave up on after a few tries) :
>>>>>> 
>>>>>> - don't use GLUT - use the equivalent (set of) non GLUT openGL calls
>>>>>> - place the GLUT calls in an ObjC class - and call out to that class from MacRuby
>>>>>> 
>>>>>> you might find that the second option is quite quick - i found that for some openGL calls (but not all) that dispatching to my own bridge class which then called opengl functions was quicker than going through BridgeSupport.
>>>>>> 
>>>>>> There are other good reasons to have your own bridge class anyway - i imagine that BridgeSupport is always going to be lagging Cocoa a bit (eg Core Animation constants), and it might just be easier allocating OpenGL texture memory in ObjC (well I still use objC for that)
>>>>>> 
>>>>>> HTH,
>>>>>> J
>>>>>> 
>>>>>> 
>>>>>> On Jan 20, 2010, at 8:14 PM, Jonathan Waddilove wrote:
>>>>>> 
>>>>>>> Hi, I'm back to using MacRuby again and I'm confused about Bridge Support.
>>>>>>> 
>>>>>>> I have been using the excellent sojaster port of the Cocoa OpenGL example to help develop an OpenGL playpen. However, when I started using glut calls (glutBitmapCharacter, glutStrokeString, etc) I started to get problems.
>>>>>>> 
>>>>>>> It seems that the OpenGL glut.framework (10.6.2) doesn't include bridge support. I've tried using gen_bridge_metadata to add bridge support but without success.
>>>>>>> 
>>>>>>> Should glut work in MacRuby? How does one add BridgeSupport to the Apple shipped frameworks?
>>>>>>> 
>>>>>>> Sorry if I have missed some very obvious step.
>>>>>>> 
>>>>>>> regards and thanks,  Jonathan
>>>>>>> 
>>>>>>> _______________________________________________
>>>>>>> MacRuby-devel mailing list
>>>>>>> MacRuby-devel at lists.macosforge.org
>>>>>>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>>>>>> 
>>>>>> _______________________________________________
>>>>>> MacRuby-devel mailing list
>>>>>> MacRuby-devel at lists.macosforge.org
>>>>>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>>>>> 
>>>>> _______________________________________________
>>>>> MacRuby-devel mailing list
>>>>> MacRuby-devel at lists.macosforge.org
>>>>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>>>> 
>>>> _______________________________________________
>>>> MacRuby-devel mailing list
>>>> MacRuby-devel at lists.macosforge.org
>>>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>>> 
>>> 
>>> regards,  Jonathan
>>> 
>>> Jonathan T Waddilove
>>> email: jonathan at waddilove.net 
>>> web: jonathan.waddilove.net
>>> 
>>> 
>>> 
>>> 
>>> _______________________________________________
>>> MacRuby-devel mailing list
>>> MacRuby-devel at lists.macosforge.org
>>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>> 
>> _______________________________________________
>> MacRuby-devel mailing list
>> MacRuby-devel at lists.macosforge.org
>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
> 
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel at lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-devel/attachments/20100124/da11480c/attachment-0001.html>


More information about the MacRuby-devel mailing list