Пример #1
0
        protected override void initFbo()
        {
            if (!GL.IsTexture(tex))
            {
                tex = new Tetra.Texture(width, height);
            }
            if (!GL.IsTexture(evenTex))
            {
                evenTex = new Tetra.Texture(width, height);
            }

            GL.GenFramebuffers(1, out fbo);

            GL.BindFramebuffer(FramebufferTarget.Framebuffer, fbo);

            GL.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment0,
                                    TextureTarget.Texture2D, tex, 0);
            GL.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment1,
                                    TextureTarget.Texture2D, evenTex, 0);

            if (GL.CheckFramebufferStatus(FramebufferTarget.Framebuffer) != FramebufferErrorCode.FramebufferComplete)
            {
                throw new Exception(GL.CheckFramebufferStatus(FramebufferTarget.Framebuffer).ToString());
            }

            GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0);
        }
Пример #2
0
        protected virtual void configureFbo()
        {
            Tetra.Texture.DefaultTarget   = TextureTarget.Texture2DMultisample;
            Tetra.Texture.GenerateMipMaps = false;
            colorTex = new Tetra.Texture()
            {
                Width          = CacheSize.Width,
                Height         = CacheSize.Height,
                InternalFormat = PixelInternalFormat.Rgba8,
                PixelFormat    = PixelFormat.Rgba,
                PixelType      = PixelType.UnsignedByte,
                Samples        = Magic.numSamples
            }; colorTex.Create();

            int depthBuf = GL.GenRenderbuffer();

            GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, depthBuf);
            GL.RenderbufferStorageMultisample(RenderbufferTarget.Renderbuffer,
                                              Magic.numSamples, RenderbufferStorage.DepthComponent24, CacheSize.Width, CacheSize.Height);
            GL.FramebufferRenderbuffer(FramebufferTarget.Framebuffer, FramebufferAttachment.DepthAttachment,
                                       RenderbufferTarget.Renderbuffer, depthBuf);
            GL.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment0,
                                    TextureTarget.Texture2DMultisample, colorTex, 0);

            Tetra.Texture.ResetToDefaultLoadingParams();

            GL.ActiveTexture(TextureUnit.Texture2);
            GL.BindTexture(TextureTarget.Texture2DMultisample, colorTex);
        }
Пример #3
0
        void initGridFbo()
        {
            Tetra.Texture.DefaultMagFilter = TextureMagFilter.Nearest;
            Tetra.Texture.DefaultMinFilter = TextureMinFilter.Nearest;
            Tetra.Texture.GenerateMipMaps  = false;
            {
                colorTexId     = new Tetra.Texture(CacheSize.Width, CacheSize.Height);
                selectionTexId = new Tetra.Texture(CacheSize.Width, CacheSize.Height);
            }
            Tetra.Texture.ResetToDefaultLoadingParams();

            // Create Depth Renderbuffer
            GL.GenTextures(1, out gridDepthTex);
            GL.BindTexture(TextureTarget.Texture2D, gridDepthTex);
            GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.DepthComponent32f, CacheSize.Width, CacheSize.Height, 0, OpenTK.Graphics.OpenGL.PixelFormat.DepthComponent, PixelType.Float, IntPtr.Zero);
//			GL.GenerateMipmap(GenerateMipmapTarget.Texture2D);
            GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
            GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
            GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureWrapMode.ClampToEdge);
            GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureWrapMode.ClampToEdge);
            //GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureCompareMode, (int)TextureCompareMode.CompareRToTexture);
            //GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureCompareFunc, (int)All.Lequal);
            //GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.DepthTextureMode, (int)All.Luminance);


            GL.GenFramebuffers(1, out fboGrid);

            GL.BindFramebuffer(FramebufferTarget.Framebuffer, fboGrid);
            GL.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.DepthAttachment,
                                    TextureTarget.Texture2D, gridDepthTex, 0);
            GL.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment0,
                                    TextureTarget.Texture2D, colorTexId, 0);
            GL.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment1,
                                    TextureTarget.Texture2D, selectionTexId, 0);

            GL.DrawBuffers(2, dbe);

            if (GL.CheckFramebufferStatus(FramebufferTarget.Framebuffer) != FramebufferErrorCode.FramebufferComplete)
            {
                throw new Exception(GL.CheckFramebufferStatus(FramebufferTarget.Framebuffer).ToString());
            }

            GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0);
        }
Пример #4
0
        void initGridFbo()
        {
            Tetra.Texture.DefaultMagFilter = TextureMagFilter.Nearest;
            Tetra.Texture.DefaultMinFilter = TextureMinFilter.Nearest;
            Tetra.Texture.GenerateMipMaps = false;
            {
                colorTexId = new Tetra.Texture (CacheSize.Width, CacheSize.Height);
                selectionTexId = new Tetra.Texture (CacheSize.Width, CacheSize.Height);
            }
            Tetra.Texture.ResetToDefaultLoadingParams ();

            // Create Depth Renderbuffer
            GL.GenTextures(1, out gridDepthTex);
            GL.BindTexture(TextureTarget.Texture2D, gridDepthTex);
            GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.DepthComponent32f, CacheSize.Width, CacheSize.Height, 0, OpenTK.Graphics.OpenGL.PixelFormat.DepthComponent, PixelType.Float, IntPtr.Zero);
            //			GL.GenerateMipmap(GenerateMipmapTarget.Texture2D);
            GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
            GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
            GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureWrapMode.ClampToEdge);
            GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureWrapMode.ClampToEdge);
            //GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureCompareMode, (int)TextureCompareMode.CompareRToTexture);
            //GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureCompareFunc, (int)All.Lequal);
            //GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.DepthTextureMode, (int)All.Luminance);

            GL.GenFramebuffers(1, out fboGrid);

            GL.BindFramebuffer(FramebufferTarget.Framebuffer, fboGrid);
            GL.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.DepthAttachment,
                TextureTarget.Texture2D, gridDepthTex, 0);
            GL.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment0,
                TextureTarget.Texture2D, colorTexId, 0);
            GL.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment1,
                TextureTarget.Texture2D, selectionTexId, 0);

            GL.DrawBuffers(2, dbe);

            if (GL.CheckFramebufferStatus(FramebufferTarget.Framebuffer) != FramebufferErrorCode.FramebufferComplete)
            {
                throw new Exception(GL.CheckFramebufferStatus(FramebufferTarget.Framebuffer).ToString());
            }

            GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0);
        }
Пример #5
0
        protected override void initFbo()
        {
            if (!GL.IsTexture (tex))
                tex = new Tetra.Texture (width, height);
            if (!GL.IsTexture (evenTex))
                evenTex = new Tetra.Texture (width, height);

            GL.GenFramebuffers(1, out fbo);

            GL.BindFramebuffer(FramebufferTarget.Framebuffer, fbo);

            GL.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment0,
                TextureTarget.Texture2D, tex, 0);
            GL.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment1,
                TextureTarget.Texture2D, evenTex, 0);

            if (GL.CheckFramebufferStatus(FramebufferTarget.Framebuffer) != FramebufferErrorCode.FramebufferComplete)
            {
                throw new Exception(GL.CheckFramebufferStatus(FramebufferTarget.Framebuffer).ToString());
            }

            GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0);
        }