Exemple #1
0
        public void AttachRenderTexture(RenderTexture texture, FramebufferAttachment?attachmentType = null)
        {
            Rendering.CheckGLErrors($"At the start of '{nameof(Framebuffer)}.{nameof(AttachRenderTexture)}'.");

            Bind(this);

            var attachment = attachmentType ?? nextDefaultAttachment++;

            GL.FramebufferTexture2D(FramebufferTarget.Framebuffer, attachment, TextureTarget.Texture2D, texture.Id, 0);

            renderTextures.Add(texture);

            textureToAttachment[texture] = attachment;

            var drawBuffersEnum = (DrawBuffersEnum)attachment;

            if (Enum.IsDefined(typeof(DrawBuffersEnum), drawBuffersEnum))
            {
                ArrayUtils.Add(ref drawBuffers, drawBuffersEnum);
            }

            maxTextureWidth  = Math.Max(maxTextureWidth, texture.Width);
            maxTextureHeight = Math.Max(maxTextureHeight, texture.Height);

            Rendering.CheckFramebufferStatus();

            Rendering.CheckGLErrors($"At the end of '{nameof(Framebuffer)}.{nameof(AttachRenderTexture)}'.");
        }
Exemple #2
0
        private static void ParseJsonFramebuffers(Json jsonSettings, List <Framebuffer> framebuffers)
        {
            //Framebuffers
            foreach (var fbPair in jsonSettings.framebuffers)
            {
                string fbName = fbPair.Key;
                var    fb     = fbPair.Value;

                var framebuffer = Framebuffer.Create(fbName);

                Framebuffer.Bind(framebuffer);

                foreach (var texPair in fb.textures)
                {
                    //bool noWrite = false;
                    string texName = texPair.Key;
                    var    tex     = texPair.Value;

                    switch (tex.type)
                    {
                    case TextureAttachmentType.Color:
                        break;

                    case TextureAttachmentType.Depth:
                        //noWrite = true;
                        break;

                    case TextureAttachmentType.DepthStencil: {
                        framebuffer.AttachRenderbuffer(new Renderbuffer(texName, RenderbufferStorage.Depth24Stencil8), FramebufferAttachment.DepthStencilAttachment);
                        continue;
                    }

                    default:
                        throw new NotImplementedException();
                    }

                    framebuffer.AttachRenderTexture(new RenderTexture(texName, Screen.Width, Screen.Height, textureFormat: tex.format));

                    Rendering.CheckFramebufferStatus();
                }

                framebuffers.Add(framebuffer);
            }
        }
Exemple #3
0
        public void AttachRenderbuffer(Renderbuffer renderbuffer, FramebufferAttachment?attachmentType = null)
        {
            Bind(this);

            var attachment = attachmentType ?? nextDefaultAttachment++;

            GL.FramebufferRenderbuffer(FramebufferTarget.Framebuffer, attachment, RenderbufferTarget.Renderbuffer, Id);

            Rendering.CheckFramebufferStatus();

            ArrayUtils.Add(ref renderbuffers, renderbuffer);

            var drawBuffersEnum = (DrawBuffersEnum)attachment;

            if (Enum.IsDefined(typeof(DrawBuffersEnum), drawBuffersEnum))
            {
                ArrayUtils.Add(ref drawBuffers, drawBuffersEnum);
            }
        }