[Mono-osx] [MonoMac] OpenGL OpenTK proposal / compromise
kjpou
kjpou at pt.lu
Mon Feb 14 14:00:35 EST 2011
Geoff
No problem but have family in town and not sure when I will get to it.
It is looking like next week at the earliest.
I already have the changes zipped up and can send them to you if you
would like.
Kenneth
On 2/14/11 6:07 PM, Geoff Norton wrote:
> Kenneth,
>
> I'd like to see this code. I have a opentk repo on github:
>
> http://github.com/kangaroo/opentk
>
> Could you fork it and land your patches?
>
> Thanks
>
> -g
>
> On 2011-02-13, at 9:47 AM, kjpou wrote:
>
>> Hello all
>>
>> Have spent the last two days working on the OpenTK. Ended in
>> frustration basically.
>>
>> Here is what I have:
>>
>> OpenTK.Graphics.CoreOpenGL
>>
>> Basically all the mappings, delegates, helper methods, ErrorHelper. It
>> was a copy from the windows OpenTK.Graphics.OpenGL. The bindings are
>> all there and can load them all from a CglContext which is a new
>> Platform backend OpenGL context I created.
>>
>> There are something like 2700 method bindings that are delivered with
>> the Windows OpenGL implementation of which only about 600 are used on
>> the mac.
>>
>> I have a platform backend hacked together. When I say hacked I mean
>> hacked but it all loads fine. No GUI implementation as it uses the
>> current context created from NSOpenGLContext. That part works.
>>
>> OpenTK.Platform.MacOS
>>
>> -> CocoaBindings
>> ---> Cgl
>>
>> -> CglContext
>> -> CocoaApplication
>> -> CocoaGLNative
>> -> CocoaWindowInfo
>>
>> You can create a context.
>>
>> OpenTK.Platform.IWindowInfo windowInfo
>> =
>> OpenTK.Platform.Utilities.CreateMacOSCocoaWindowInfo( mGLContext.Handle );
>>
>> OpenTK.ContextHandle handle = new
>> OpenTK.ContextHandle( mGLContext.Handle );
>>
>> OpenTK.Graphics.GraphicsContext context =
>> new
>> OpenTK.Graphics.GraphicsContext(handle, windowInfo);
>>
>> context.MakeCurrent( windowInfo );
>>
>> When it starts calling the Delegates for example.
>>
>> ErrorCode theError = ErrorCode.NoError;
>> theError = GL.GetError ();
>> GL.ReadBuffer (ReadBufferMode.Front);
>>
>> It is erroring out with errors for the native bindings which I can not
>> figure out because of the all the Delegate calls. If you call the
>> GLCore methods directly it all works fine but using the OpenTK Delegate
>> way it is not working.
>>
>> If someone wants to take what I have and try to get it all working you
>> are more than welcome. Either way those 600 +/- OpenGL calls are going
>> to have to be gone through and culled out.
>>
>> In about one hour I ripped all the mappings from the OpenTK for Cocoa
>> that I wrote and placed them in a separate project with some small
>> modifications and got two MonoMac OpenGL samples working. One hour vs
>> two days hummmm really a no brainer there for where I would prefer to
>> spend my time.
>>
>> I am in the process of going through by hand and only implementing those
>> 600 or so methods by hand to get a MonoMac.CoreOpenGL bindings working
>> based on that one hours work. Basing it on what I learned from the
>> OpenTK I can have it mapping exactly the same way so if someone gets the
>> OpenTK working it should be just a change of library. What I mean by
>> that is that all one would have to do to use the OpenTK is include it in
>> the project because the naming of the parameters will be exactly the
>> same as those you will already be using for the MonoMac.CoreOpenGL bindings.
>>
>> So the following code below would work with OpenTK as well as the
>> MonoMac.CoreOpenGL bindings. Technically the same code would work for
>> any other OpenTK based program as well.
>>
>> ErrorCode theError = ErrorCode.NoError;
>>
>> // select front buffer as our source for pixel data
>> GL.ReadBuffer (ReadBufferMode.Front);
>>
>> //Read OpenGL context pixels directly.
>>
>> // For extra safety, save& restore OpenGL
>> states that are changed
>> GL.PushClientAttrib
>> (ClientAttribMask.ClientPixelStoreBit);
>>
>> GL.PixelStore
>> (PixelStoreParameter.PackAlignment, 4); /* Force 4-byte alignment */
>> GL.PixelStore
>> (PixelStoreParameter.PackRowLength, 0);
>> GL.PixelStore
>> (PixelStoreParameter.PackSkipRows, 0);
>> GL.PixelStore
>> (PixelStoreParameter.PackSkipPixels, 0);
>> // Read a block of pixels from the frame buffer
>> GL.ReadPixels (0, 0, bufferWidth, bufferHeight,
>> PixelFormat.Bgra, PixelType.UnsignedInt8888Reversed, buffer);
>>
>> GL.PopClientAttrib ();
>>
>> theError = GL.GetError ();
>> if (theError != ErrorCode.NoError)
>> Console.WriteLine ("OpenGL error {0}",
>> theError);
>>
>>
>> Now before I go through with this would like to know if this is an
>> acceptable compromise and would it be worth the effort to be included
>> within the MonoMac bindings.
>>
>> If you want the code that I have begun for OpenTK let me know.
>>
>> Kenneth
>>
>>
>>
>>
>>
>>
>>
>>
>> _______________________________________________
>> Mono-osx mailing list
>> Mono-osx at lists.ximian.com
>> http://lists.ximian.com/mailman/listinfo/mono-osx
>
More information about the Mono-osx
mailing list