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 <[email protected]> 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 <[email protected]> > 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 > > [email protected] > > http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel > > > > > _______________________________________________ > MacRuby-devel mailing list > [email protected] > http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel >
_______________________________________________ MacRuby-devel mailing list [email protected] http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
