Example #1
0
        public void MakeCurrent()
        {
            if (mContext.IsCurrent == false)
            {
                mContext.MakeCurrent(mWindowInfo);
            }

            GL.Viewport(0, 0, Width, Height);

            mDisplay.SetupGLOrtho(Rectangle.FromLTRB(0, Height, Width, 0));
        }
Example #2
0
        public override void BeginRender()
        {
            if (mWindow.Context.VSync != mDisplay.VSync)
            {
                mWindow.Context.VSync = mDisplay.VSync;
            }

            MakeCurrent();

            mDisplay.SetupGLOrtho(Rectangle.FromLTRB(0, 0, Width, Height));
        }
Example #3
0
        public override void BeginRender()
        {
            GL.Viewport(0, 0, SurfaceWidth, SurfaceHeight);

            mDisplay.SetupGLOrtho(Rectangle.FromLTRB(0, SurfaceHeight, SurfaceWidth, 0));

            if (mDisplay.SupportsFramebuffer)
            {
                // generate the frame buffer
                GL.Ext.GenFramebuffers(1, out mFramebufferID);
                GL.Ext.BindFramebuffer(FramebufferTarget.FramebufferExt, mFramebufferID);

                // generate a depth buffer to render to
                GL.Ext.GenRenderbuffers(1, out mDepthBuffer);
                GL.Ext.BindRenderbuffer(RenderbufferTarget.RenderbufferExt, mDepthBuffer);

                // hack here because RenderbufferStorage enum is incomplete.
                GL.Ext.RenderbufferStorage(RenderbufferTarget.RenderbufferExt,
                                           (RenderbufferStorage)OTKPixelFormat.DepthComponent,
                                           mTextureSize.Width, mTextureSize.Height);

                // attach the depth buffer
                GL.Ext.FramebufferRenderbuffer(FramebufferTarget.FramebufferExt,
                                               FramebufferAttachment.DepthAttachmentExt, RenderbufferTarget.RenderbufferExt,
                                               mDepthBuffer);

                // attach the texture
                GL.Ext.FramebufferTexture2D(FramebufferTarget.FramebufferExt,
                                            FramebufferAttachment.ColorAttachment0Ext, TextureTarget.Texture2D,
                                            mTextureID, 0);

                FramebufferErrorCode code =
                    GL.Ext.CheckFramebufferStatus(FramebufferTarget.FramebufferExt);

                if (code != FramebufferErrorCode.FramebufferCompleteExt)
                {
                    throw new AgateException(
                              "Could not complete framebuffer object.");
                }

                GL.Ext.BindFramebuffer(FramebufferTarget.FramebufferExt, mFramebufferID);
                GL.PushAttrib(AttribMask.ViewportBit);
            }
            else
            {
                // clear the framebuffer and draw this texture to it.
                GL.ClearColor(0, 0, 0, 0);
                GL.Clear(ClearBufferMask.ColorBufferBit |
                         ClearBufferMask.DepthBufferBit);

                GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter,
                                (int)TextureMinFilter.Linear);
                GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter,
                                (int)TextureMagFilter.Linear);

                Draw();

                GL.TexParameter(TextureTarget.Texture2D,
                                TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
                GL.TexParameter(TextureTarget.Texture2D,
                                TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
            }
        }