예제 #1
0
        protected virtual void DestroyFrameBuffer()
        {
            AssertValid();
            AssertContext();
            EAGLContext oldContext = EAGLContext.CurrentContext;

            if (!GraphicsContext.IsCurrent)
            {
                MakeCurrent();
            }

            gl.DeleteFramebuffers(1, ref framebuffer);
            gl.DeleteRenderbuffers(1, ref renderbuffer);
            framebuffer = renderbuffer = 0;

            if (oldContext != EAGLContext)
            {
                EAGLContext.SetCurrentContext(oldContext);
            }
            else
            {
                EAGLContext.SetCurrentContext(null);
            }

            GraphicsContext.Dispose();
            GraphicsContext = null;
            gl = null;
        }
예제 #2
0
        protected virtual void CreateFrameBuffer()
        {
            AssertValid();
            if (LayerColorFormat == null)
            {
                throw new InvalidOperationException("Set the LayerColorFormat property to an EAGLColorFormat value before calling Run().");
            }

            CAEAGLLayer eaglLayer = (CAEAGLLayer)Layer;

            eaglLayer.DrawableProperties = NSDictionary.FromObjectsAndKeys(
                new NSObject [] { NSNumber.FromBoolean(LayerRetainsBacking), LayerColorFormat },
                new NSObject [] { EAGLDrawableProperty.RetainedBacking, EAGLDrawableProperty.ColorFormat }
                );
            ConfigureLayer(eaglLayer);

            GraphicsContext = Utilities.CreateGraphicsContext(ContextRenderingApi);
            gl = GLCalls.GetGLCalls(ContextRenderingApi);

            int oldFramebuffer = 0, oldRenderbuffer = 1;

            gl.GetInteger(All.FramebufferBindingOes, ref oldFramebuffer);
            gl.GetInteger(All.RenderbufferBindingOes, ref oldRenderbuffer);

            gl.GenRenderbuffers(1, ref renderbuffer);
            gl.BindRenderbuffer(All.RenderbufferOes, renderbuffer);

            if (!EAGLContext.RenderBufferStorage((uint)All.RenderbufferOes, eaglLayer))
            {
                gl.DeleteRenderbuffers(1, ref renderbuffer);
                renderbuffer = 0;
                gl.BindRenderbuffer(All.RenderbufferBindingOes, oldRenderbuffer);
                throw new InvalidOperationException("Error with EAGLContext.RenderBufferStorage!");
            }

            gl.GenFramebuffers(1, ref framebuffer);
            gl.BindFramebuffer(All.FramebufferOes, framebuffer);
            gl.FramebufferRenderbuffer(All.FramebufferOes, All.ColorAttachment0Oes, All.RenderbufferOes, renderbuffer);

            Size newSize = new Size(
                (int)Math.Round(eaglLayer.Bounds.Size.Width),
                (int)Math.Round(eaglLayer.Bounds.Size.Height));

            Size = newSize;

            gl.Viewport(0, 0, newSize.Width, newSize.Height);
            gl.Scissor(0, 0, newSize.Width, newSize.Height);

            frameBufferWindow = new WeakReference(Window);
            frameBufferLayer  = new WeakReference(Layer);
        }
예제 #3
0
        protected virtual void CreateFrameBuffer()
        {
            AssertValid();
            if (LayerColorFormat == null)
            {
                throw new InvalidOperationException("Set the LayerColorFormat property to an EAGLColorFormat value before calling Run().");
            }

            CAEAGLLayer eaglLayer = (CAEAGLLayer)Layer;

            eaglLayer.DrawableProperties = NSDictionary.FromObjectsAndKeys(
                new NSObject [] { NSNumber.FromBoolean(LayerRetainsBacking), LayerColorFormat },
                new NSObject [] { EAGLDrawableProperty.RetainedBacking, EAGLDrawableProperty.ColorFormat }
                );
            ConfigureLayer(eaglLayer);

            int major = 0, minor = 0;

            switch (ContextRenderingApi)
            {
            case EAGLRenderingAPI.OpenGLES1: major = 1; minor = 1; break;

            case EAGLRenderingAPI.OpenGLES2: major = 2; minor = 0; break;

            case EAGLRenderingAPI.OpenGLES3: major = 3; minor = 0; break;

            default:
                throw new ArgumentException("Unsupported EAGLRenderingAPI version: " + ContextRenderingApi);
            }
            GraphicsContext = new GraphicsContext(GraphicsMode.Default, WindowInfo, major, minor, GraphicsContextFlags.Embedded);
            GraphicsContext.MakeCurrent(WindowInfo);
            gl = GLCalls.GetGLCalls(ContextRenderingApi);

            int oldFramebuffer = 0;

            gl.GetInteger(All.FramebufferBindingOes, out oldFramebuffer);
            gl.GenFramebuffers(1, out framebuffer);

            CreateFrameBuffer(eaglLayer);

            frameBufferWindow = new WeakReference(Window);
            frameBufferLayer  = new WeakReference(Layer);
        }
예제 #4
0
        protected virtual void DestroyFrameBuffer()
        {
            AssertValid();
            AssertContext();
            EAGLContext oldContext = EAGLContext.CurrentContext;
            if (!GraphicsContext.IsCurrent)
                MakeCurrent();

            gl.DeleteFramebuffers (1, ref framebuffer);
            gl.DeleteRenderbuffers (1, ref renderbuffer);
            framebuffer = renderbuffer = 0;

            if (oldContext != EAGLContext)
                EAGLContext.SetCurrentContext(oldContext);
            else
                EAGLContext.SetCurrentContext(null);

            GraphicsContext.Dispose();
            GraphicsContext = null;
            gl = null;
        }
예제 #5
0
        protected virtual void CreateFrameBuffer()
        {
            AssertValid();
            if (LayerColorFormat == null)
                throw new InvalidOperationException("Set the LayerColorFormat property to an EAGLColorFormat value before calling Run().");

            CAEAGLLayer eaglLayer = (CAEAGLLayer) Layer;
            eaglLayer.DrawableProperties = NSDictionary.FromObjectsAndKeys (
                    new NSObject [] {NSNumber.FromBoolean(LayerRetainsBacking), LayerColorFormat},
                    new NSObject [] {EAGLDrawableProperty.RetainedBacking,      EAGLDrawableProperty.ColorFormat}
            );
            ConfigureLayer(eaglLayer);

            GraphicsContext = Utilities.CreateGraphicsContext(ContextRenderingApi);
            gl = GLCalls.GetGLCalls(ContextRenderingApi);

            int oldFramebuffer = 0, oldRenderbuffer = 1;
            gl.GetInteger(All.FramebufferBindingOes, ref oldFramebuffer);
            gl.GetInteger(All.RenderbufferBindingOes, ref oldRenderbuffer);

            gl.GenRenderbuffers(1, ref renderbuffer);
            gl.BindRenderbuffer(All.RenderbufferOes, renderbuffer);

            if (!EAGLContext.RenderBufferStorage((uint) All.RenderbufferOes, eaglLayer)) {
                gl.DeleteRenderbuffers(1, ref renderbuffer);
                renderbuffer = 0;
                gl.BindRenderbuffer(All.RenderbufferBindingOes, oldRenderbuffer);
                throw new InvalidOperationException("Error with EAGLContext.RenderBufferStorage!");
            }

            gl.GenFramebuffers (1, ref framebuffer);
            gl.BindFramebuffer (All.FramebufferOes, framebuffer);
            gl.FramebufferRenderbuffer (All.FramebufferOes, All.ColorAttachment0Oes, All.RenderbufferOes, renderbuffer);

            Size newSize = new Size(
                    (int) Math.Round(eaglLayer.Bounds.Size.Width),
                    (int) Math.Round(eaglLayer.Bounds.Size.Height));
            Size = newSize;

            gl.Viewport(0, 0, newSize.Width, newSize.Height);
            gl.Scissor(0, 0, newSize.Width, newSize.Height);

            frameBufferWindow = new WeakReference(Window);
            frameBufferLayer = new WeakReference(Layer);
        }
예제 #6
0
        protected virtual void CreateFrameBuffer()
        {
            AssertValid();
            if (LayerColorFormat == null)
            {
                throw new InvalidOperationException("Set the LayerColorFormat property to an EAGLColorFormat value before calling Run().");
            }

            CAEAGLLayer eaglLayer = (CAEAGLLayer)Layer;

            eaglLayer.DrawableProperties = NSDictionary.FromObjectsAndKeys(
                new NSObject [] { NSNumber.FromBoolean(LayerRetainsBacking), LayerColorFormat },
                new NSObject [] { EAGLDrawableProperty.RetainedBacking, EAGLDrawableProperty.ColorFormat }
                );
            ConfigureLayer(eaglLayer);

            int major = 0, minor = 0;

            switch (ContextRenderingApi)
            {
            case EAGLRenderingAPI.OpenGLES1: major = 1; minor = 1; break;

            case EAGLRenderingAPI.OpenGLES2: major = 2; minor = 0; break;

            case EAGLRenderingAPI.OpenGLES3: major = 3; minor = 0; break;

            default:
                throw new ArgumentException("Unsupported EAGLRenderingAPI version: " + ContextRenderingApi);
            }
            GraphicsContext = new GraphicsContext(GraphicsMode.Default, WindowInfo, major, minor, GraphicsContextFlags.Embedded);
            GraphicsContext.MakeCurrent(WindowInfo);
            gl = GLCalls.GetGLCalls(ContextRenderingApi);

            int oldFramebuffer = 0, oldRenderbuffer = 1;

            gl.GetInteger(All.FramebufferBindingOes, out oldFramebuffer);
            gl.GetInteger(All.RenderbufferBindingOes, out oldRenderbuffer);

            gl.GenRenderbuffers(1, out renderbuffer);
            gl.BindRenderbuffer(All.RenderbufferOes, renderbuffer);

            if (!EAGLContext.RenderBufferStorage((uint)All.RenderbufferOes, eaglLayer))
            {
                gl.DeleteRenderbuffers(1, ref renderbuffer);
                renderbuffer = 0;
                gl.BindRenderbuffer(All.RenderbufferBindingOes, oldRenderbuffer);
                throw new InvalidOperationException("Error with EAGLContext.RenderBufferStorage!");
            }

            gl.GenFramebuffers(1, out framebuffer);
            gl.BindFramebuffer(All.FramebufferOes, framebuffer);
            gl.FramebufferRenderbuffer(All.FramebufferOes, All.ColorAttachment0Oes, All.RenderbufferOes, renderbuffer);

            Size newSize = new Size(
                (int)Math.Round(eaglLayer.Bounds.Size.Width),
                (int)Math.Round(eaglLayer.Bounds.Size.Height));

            Size = newSize;

            gl.Viewport(0, 0, newSize.Width, newSize.Height);
            gl.Scissor(0, 0, newSize.Width, newSize.Height);

            frameBufferWindow = new WeakReference(Window);
            frameBufferLayer  = new WeakReference(Layer);
        }