Ejemplo n.º 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;
            }
        }
Ejemplo n.º 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;
            }
        }
Ejemplo n.º 3
0
        public void VkClearValueTypeLoad()
        {
            // float values as ints
            const uint oneF   = 0x3f800000u;
            const uint twoF   = 0x40000000u;
            const uint threeF = 0x40400000u;
            const uint fourF  = 0x40800000u;

            // structural composition
            var ca = new VkClearAttachment {
                aspectMask = VkImageAspectFlags.VK_IMAGE_ASPECT_COLOR_BIT,
                clearValue = new VkClearValue {
                    color = new VkClearColorValue()
                },
                colorAttachment = 0
            };

            ref var color = ref ca.clearValue.color;
Ejemplo n.º 4
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);
        }
Ejemplo n.º 5
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;
            }
        }
Ejemplo n.º 6
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);
        }
Ejemplo n.º 7
0
 public void CmdClearAttachments(
     [FromProperty("this")] GenCommandBuffer commandBuffer,
     int attachmentCount,
     VkClearAttachment* pAttachments,
     int rectCount,
     VkClearRect* pRects)
 { }