[MacRuby-devel] Porting Cocoa OpenGL sample code

Matt Aimonetti mattaimonetti at gmail.com
Wed Feb 25 11:11:55 PST 2009


Brian, what's up with this syntax: info =
Pointer.new_with_type("^{_CGLRendererInfoObject=}")
Can you explain: "^{_CGLRendererInfoObject=}"? is that some secret
incantation only known by the MacRuby/Obj overlords?

Thanks,

- Matt


On Wed, Feb 25, 2009 at 10:13 AM, Brian Chapados <chapbr at gmail.com> wrote:

> CGLRendererInfo is a pointer to a struct:
>    typedef struct _CGLRendererInfoObject *CGLRendererInfoObj;
>
> try creating a pointer to void or to the struct:
>
> info = Pointer.new_with_type("^v")  # void *info;
>
> or
>
> info = Pointer.new_with_type("^{_CGLRendererInfoObject=}") #
> CGLRendererInfo *info
>
> I think the second one is effectively the same as what you were trying
> to do with:
> info = Pointer.new_with_type("CGLRendererInfoObj")
>
> except that the runtime doesn't know what to do with
> "CGLRendererInfo".  The argument to Pointer.new_with_type must be a
> valid Objective-C type encoding[1].
>
> [1]:
> http://developer.apple.com/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/chapter_7_section_1.html#//apple_ref/doc/uid/TP40008048-CH100-SW1
>
> If you are ever in doubt about what encoding to use, you can always
> compile a small Objective-C program that prints out the output of
> @encode().  For example:
>
> #import <Foundation/Foundation.h>
> #import <OpenGL/OpenGL.h>
>
> int main(int argc, char *argv[])
> {
>    char *encoding = @encode(CGLRendererInfoObj);
>    printf("\nencoding => %s\n\n", encoding);
>    return 0;
> }
>
> compile with:
> gcc -Wall -o encode encode.m -framework Foundation -framework OpenGL
>
> then run:
> ./encode
>
> Maybe there is an easier way to obtain the output of @encode(). I'm not
> sure.
>
> Brian
>
> On Wed, Feb 25, 2009 at 1:42 AM, Julien Jassaud <julien at collectapply.jp>
> wrote:
> > Hello,
> > I am trying to port the Cocoa OpenGL sample to MacRuby and encountered a
> few
> > problems.
> >
> > First, I can't access some constants defined in an enum in GLTypes.h. Do
> I
> > need to port those constants to ruby by hand ? Is that related
> > to gen_bridge_metadata ?
> >
> > Second, I need to use CGLQueryRendererInfo
> > and CGLDescribeRenderer functions. The first one requires a pointer to
> > a CGLRendererInfoObj structure but the second requires the object to be
> > passed directly. I tried some C style pointer arithmetic :
> > info = Pointer.new_with_type("CGLRendererInfoObj")
> > count = Pointer.new_with_type("l")
> > CGLQueryRendererInfo(caps[:cgl_display_mask], info, count) <- works fine,
> > but CGLRendererInfoObj is opaque so I can't check it in irb.
> > CGLDescribeRenderer(info[0], 0, kCGLRPRendererCount, count) <- I naively
> > tried to dereference the pointer, but it doesn't work.
> > CGLDescribeRenderer(info, 0, kCGLRPRendererCount, count) <- No
> complaints,
> > but the value for count[0] is not consistent (100468704 renderers).
> > I see in MacIRB that there is a CGLRendererInfoObj class but I
> > can't instantiate it.
> > This is all new to me and I may be overlooking something obvious. If
> anyone
> > has an idea, please help.
> > Thanks,
> > Julien Jassaud
> > _______________________________________________
> > 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/20090225/f12ef1e3/attachment.html>


More information about the MacRuby-devel mailing list