Esempio n. 1
0
            static (IHostScreen Screen, FBO Fbo, TextureObject DepthTex, Vector2i Size) Create(int width, int height)
            {
                var screen = Engine.GetValidCurrentContext();
                var size   = new Vector2i(width, height);
                var depth  = TextureObject.Empty;
                var fbo    = FBO.Empty;

                try {
                    depth = TextureObject.Create();
                    TextureObject.Bind2D(depth);
                    TextureObject.DepthImage2DUninitialized(size);
                    TextureObject.Parameter2DMinFilter(TextureShrinkMode.NearestNeighbor, TextureMipmapMode.None);
                    TextureObject.Parameter2DMagFilter(TextureExpansionMode.NearestNeighbor);
                    TextureObject.Parameter2DWrapS(TextureWrapMode.ClampToBorder);
                    TextureObject.Parameter2DWrapT(TextureWrapMode.ClampToBorder);
                    fbo = FBO.Create();
                    FBO.Bind(fbo, FBO.Target.FrameBuffer);
                    FBO.SetTexture2DBuffer(depth, FBO.Attachment.DepthAttachment);
                    GL.DrawBuffer(DrawBufferMode.None);
                    GL.ReadBuffer(ReadBufferMode.None);
                    FBO.ThrowIfInvalidStatus();
                    FBO.Unbind(FBO.Target.FrameBuffer);
                    return(Screen : screen, Fbo : fbo, DepthTex : depth, Size : size);
                }
                catch {
                    TextureObject.Delete(ref depth);
                    FBO.Delete(ref fbo);
                    throw;
                }
            }