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); }
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); }
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); }
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); }
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); }