Exemple #1
0
        public override void ClearDepthStencil(float depth, byte stencil)
        {
            VkClearValue clearValue = new VkClearValue {
                depthStencil = new VkClearDepthStencilValue(depth, stencil)
            };

            if (_activeRenderPass != VkRenderPass.Null)
            {
                VkClearAttachment clearAttachment = new VkClearAttachment
                {
                    aspectMask = VkImageAspectFlags.Depth | VkImageAspectFlags.Stencil,
                    clearValue = clearValue
                };

                Texture     depthTex  = _currentFramebuffer.DepthTarget.Value.Target;
                VkClearRect clearRect = new VkClearRect
                {
                    baseArrayLayer = 0,
                    layerCount     = 1,
                    rect           = new VkRect2D(0, 0, depthTex.Width, depthTex.Height)
                };

                vkCmdClearAttachments(_cb, 1, ref clearAttachment, 1, ref clearRect);
            }
            else
            {
                // Queue up the clear value for the next RenderPass.
                _depthClearValue = clearValue;
            }
        }
Exemple #2
0
        protected override void ClearColorTargetCore(uint index, RgbaFloat clearColor)
        {
            VkClearValue clearValue = new VkClearValue
            {
                color = new VkClearColorValue(clearColor.R, clearColor.G, clearColor.B, clearColor.A)
            };

            if (_activeRenderPass != VkRenderPass.Null)
            {
                VkClearAttachment clearAttachment = new VkClearAttachment
                {
                    colorAttachment = index,
                    aspectMask      = VkImageAspectFlags.Color,
                    clearValue      = clearValue
                };

                Texture     colorTex  = _currentFramebuffer.ColorTargets[(int)index].Target;
                VkClearRect clearRect = new VkClearRect
                {
                    baseArrayLayer = 0,
                    layerCount     = 1,
                    rect           = new VkRect2D(0, 0, colorTex.Width, colorTex.Height)
                };

                vkCmdClearAttachments(_cb, 1, ref clearAttachment, 1, ref clearRect);
            }
            else
            {
                // Queue up the clear value for the next RenderPass.
                _clearValues[index]           = clearValue;
                _validColorClearValues[index] = true;
            }
        }
Exemple #3
0
        public override void ClearDepthTarget(float depth)
        {
            VkClearValue clearValue = new VkClearValue {
                depthStencil = new VkClearDepthStencilValue(depth, 0)
            };
            VkClearAttachment clearAttachment = new VkClearAttachment
            {
                aspectMask = VkImageAspectFlags.Depth,
                clearValue = clearValue
            };

            Texture     depthTex  = _currentFramebuffer.DepthTexture;
            VkClearRect clearRect = new VkClearRect
            {
                baseArrayLayer = 0,
                layerCount     = 1,
                rect           = new VkRect2D(0, 0, depthTex.Width, depthTex.Height)
            };

            vkCmdClearAttachments(_cb, 1, ref clearAttachment, 1, ref clearRect);
        }
Exemple #4
0
        protected override void ClearDepthStencilCore(float depth, byte stencil)
        {
            VkClearValue clearValue = new VkClearValue {
                depthStencil = new VkClearDepthStencilValue(depth, stencil)
            };

            if (_activeRenderPass != VkRenderPass.Null)
            {
                VkImageAspectFlags aspectMask = VkImageAspectFlags.Depth;
                if (FormatHelpers.IsStencilFormat(_currentFramebuffer.DepthTarget.Value.Target.Format))
                {
                    aspectMask |= VkImageAspectFlags.Stencil;
                }
                VkClearAttachment clearAttachment = new VkClearAttachment
                {
                    aspectMask = aspectMask,
                    clearValue = clearValue
                };

                Texture depthTex         = _currentFramebuffer.DepthTarget.Value.Target;
                uint    renderableWidth  = _currentFramebuffer.RenderableWidth;
                uint    renderableHeight = _currentFramebuffer.RenderableHeight;
                if (renderableWidth > 0 && renderableHeight > 0)
                {
                    VkClearRect clearRect = new VkClearRect
                    {
                        baseArrayLayer = 0,
                        layerCount     = 1,
                        rect           = new VkRect2D(0, 0, renderableWidth, renderableHeight)
                    };

                    vkCmdClearAttachments(_cb, 1, ref clearAttachment, 1, ref clearRect);
                }
            }
            else
            {
                // Queue up the clear value for the next RenderPass.
                _depthClearValue = clearValue;
            }
        }
Exemple #5
0
        public override void ClearColorTarget(uint index, RgbaFloat clearColor)
        {
            VkClearValue clearValue = new VkClearValue {
                color = new VkClearColorValue(clearColor.R, clearColor.G, clearColor.B, clearColor.A)
            };
            VkClearAttachment clearAttachment = new VkClearAttachment
            {
                colorAttachment = index,
                aspectMask      = VkImageAspectFlags.Color,
                clearValue      = clearValue
            };

            Texture     colorTex  = _currentFramebuffer.ColorTextures[(int)index];
            VkClearRect clearRect = new VkClearRect
            {
                baseArrayLayer = 0,
                layerCount     = 1,
                rect           = new VkRect2D(0, 0, colorTex.Width, colorTex.Height)
            };

            vkCmdClearAttachments(_cb, 1, ref clearAttachment, 1, ref clearRect);
        }
Exemple #6
0
 public void CmdClearAttachments(
     [FromProperty("this")] GenCommandBuffer commandBuffer,
     int attachmentCount,
     VkClearAttachment* pAttachments,
     int rectCount,
     VkClearRect* pRects)
 { }
Exemple #7
0
 public void CmdClearAttachments(int attachmentCount, VkClearAttachment attachments, int rectCount, VkClearRect rects)
 {
     var _commandBuffer = Handle;
     var _attachmentCount = attachmentCount;
     var _pAttachments = &attachments;
     var _rectCount = rectCount;
     var _pRects = &rects;
     Direct.CmdClearAttachments(_commandBuffer, _attachmentCount, _pAttachments, _rectCount, _pRects);
 }