コード例 #1
0
        /// <summary>
        /// Attaches a render buffer to the render target.
        /// </summary>
        /// <param name="buffer">The render buffer to attach to the render target.</param>
        private void AttachRenderBuffer(OpenGLRenderBuffer2D buffer)
        {
            switch (buffer.Format)
            {
                case RenderBufferFormat.Color:
                    AttachColorBuffer(buffer);
                    break;

                case RenderBufferFormat.Depth32:
                case RenderBufferFormat.Depth16:
                    AttachDepthBuffer(buffer);
                    break;

                case RenderBufferFormat.Depth24Stencil8:
                    AttachDepthStencilBuffer(buffer);
                    break;

                case RenderBufferFormat.Stencil8:
                    AttachStencilBuffer(buffer);
                    break;

                default:
                    throw new NotSupportedException();
            }

            UpdateDrawBuffers();
        }
コード例 #2
0
        /// <summary>
        /// Attaches a stencil buffer to the render target.
        /// </summary>
        /// <param name="buffer">The stencil buffer to attach to the render target.</param>
        private void AttachStencilBuffer(OpenGLRenderBuffer2D buffer)
        {
            Contract.Ensure(stencilAttachments == 0, OpenGLStrings.RenderBufferExceedsTargetCapacity);

            if (buffer.WillNotBeSampled)
            {
                gl.NamedFramebufferRenderbuffer(framebuffer, gl.GL_FRAMEBUFFER, gl.GL_STENCIL_ATTACHMENT, gl.GL_RENDERBUFFER, buffer.OpenGLName);
                gl.ThrowIfError();
            }
            else
            {
                if (!glFramebufferTextureIsSupported)
                {
                    gl.FramebufferTexture2D(gl.GL_FRAMEBUFFER, gl.GL_STENCIL_ATTACHMENT, gl.GL_TEXTURE_2D, buffer.OpenGLName, 0);
                    gl.ThrowIfError();
                }
                else
                {
                    gl.NamedFramebufferTexture(framebuffer, gl.GL_FRAMEBUFFER, gl.GL_STENCIL_ATTACHMENT, buffer.OpenGLName, 0);
                    gl.ThrowIfError();
                }
            }

            stencilAttachments++;
        }
コード例 #3
0
        /// <summary>
        /// Attaches a color buffer to the render target.
        /// </summary>
        /// <param name="buffer">The color buffer to attach to the render target.</param>
        private void AttachColorBuffer(OpenGLRenderBuffer2D buffer)
        {
            Contract.Ensure(colorAttachments < 16, OpenGLStrings.RenderBufferExceedsTargetCapacity);

            if (buffer.WillNotBeSampled)
            {
                gl.NamedFramebufferRenderbuffer(framebuffer, gl.GL_FRAMEBUFFER,
                    (uint)(gl.GL_COLOR_ATTACHMENT0 + colorAttachments), gl.GL_RENDERBUFFER, buffer.OpenGLName);
                gl.ThrowIfError();
            }
            else
            {
                if (!glFramebufferTextureIsSupported)
                {
                    gl.FramebufferTexture2D(gl.GL_FRAMEBUFFER,
                        (uint)(gl.GL_COLOR_ATTACHMENT0 + colorAttachments), gl.GL_TEXTURE_2D, buffer.OpenGLName, 0);
                    gl.ThrowIfError();
                }
                else
                {
                    gl.NamedFramebufferTexture(framebuffer, gl.GL_FRAMEBUFFER,
                        (uint)(gl.GL_COLOR_ATTACHMENT0 + colorAttachments), buffer.OpenGLName, 0);
                    gl.ThrowIfError();
                }
            }

            colorAttachments++;
        }