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/A... 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@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@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel