2017-06-14 44 views
0

我一直在修補Vulkan Triangle演示。我想要獲得漸變背景而不是純色。在OpenGL中,這很容易通過渲染四邊形並保留背景像素來完成。當我在Vulkan中這樣做時,四邊形覆蓋了三角形。任何人都有一個想法如何做到這一點?我嘗試了單獨的渲染通道,但不知道如何保持第一渲染通道(背景)的像素任何幫助或示例代碼將不勝感激。謝謝,如何在Vulkan中創建漸變背景?

託尼

回答

0

好吧,我得到了深度緩衝區清除工作正常。這是代碼片段。將此命令放在背景和三角形的渲染之間。

VkClearDepthStencilValue val; 
     val.depth = 1.0f; 
     val.stencil = 0; 
     VkImageSubresourceRange range; 
     range.layerCount = 1; 
     range.levelCount = 1; 
     range.aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT; 
     range.baseArrayLayer = 0; 
     range.baseMipLevel = 0; 
     vkCmdClearDepthStencilImage(m_drawCmdBuffers[i], m_depthStencil.image, VK_IMAGE_LAYOUT_GENERAL, &val, 1, &range); 
0

沒有必要單獨的渲染過程,如果你只是想要一個全屏幕的四顯示梯度。實際上,它與OpenGL中的相同。渲染一個覆蓋整個屏幕的三角形或四邊形,然後繪製三角形。如果四邊形隱藏了三角形,即使三角形靠近觀察者(在z軸上),也可能已禁用深度測試。

+0

如何在不清除顏色緩衝區的情況下手動清除Vulkan中的深度緩衝區。在OpenGL中,它是glClear(GL_DEPTH_BUFFER_BIT); –

+0

[vkCmdClearDepthStencilImage](https://www.khronos.org/registry/vulkan/specs/1.0/man/html/vkCmdClearDepthStencilImage.html)可用於此目的。請注意,這需要爲用作附件的深度/模板圖像設置TRANSFER_DST,因此您需要在調用該命令之前將其轉移到適當的佈局。 –

+0

VkClearDepthStencilValue val; \t \t \t val.depth = 0.0f; \t \t \t val.stencil = 1; \t \t \t VkImageSubresourceRange range; \t \t \t vkCmdClearDepthStencilImage(m_drawCmdBuffers [i],m_depthStencil.image,VK_IMAGE_LAYOUT_GENERAL,&val,1,&range); –

0

不需要單獨的通道,您可以像hello三角形之前那樣渲染梯度四邊形。

如果你有一個單獨的着色器,那麼你可以綁定它。如果數據位於單獨的VBO中,則根據需要將其綁定。