[MacRuby-devel] Porting Cocoa OpenGL sample code

Brian Chapados chapbr at gmail.com
Wed Feb 25 10:13:07 PST 2009


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


More information about the MacRuby-devel mailing list