Exemplo n.º 1
0
void VulkanBase::prepare() {
	if (enableValidation)
		vkDebug::setupDebugging(instance, VK_DEBUG_REPORT_ERROR_BIT_EXT | VK_DEBUG_REPORT_WARNING_BIT_EXT, NULL);
	createCommandPool();
	createSetupCommandBuffer();
	setupSwapChain();
	createCommandBuffers();
	setupDepthStencil();
	setupRenderPass();
	createPipelineCache();
	setupFrameBuffer();
	flushSetupCommandBuffer();
	// Recreate setup command buffer for derived class
	createSetupCommandBuffer();
	// Create a simple texture loader class
	textureLoader = new vkTools::VulkanTextureLoader(physicalDevice, device, queue, cmdPool);
}
            bool VKRenderPass::Initialize(const std::string& fileName)
            {
                ////Load resources
                m_renderPassResourceHandle = Resource::RenderPass::GetHandleFromFileName(fileName);

                if (!m_renderPassResourceHandle.IsValid())
                {
                    HT_DEBUG_PRINTF("Error: Tried to load VKRenderPass but the resource handle was invalid!\n");
                    return false;
                }
                
                std::vector<Resource::RenderPass::InputTarget> inputTargets = m_renderPassResourceHandle->GetInputTargets();
                std::vector<std::string> outputPaths = m_renderPassResourceHandle->GetOutputPaths();

                //Create a structure to map set index to maps of binding indicies and render target handles
                std::map<uint32_t, std::map<uint32_t, VKRenderTargetHandle>> mappedInputTargets;

                for (size_t i = 0; i < inputTargets.size(); i++)
                {
                    std::string targetPath = inputTargets[i].path;
                    uint32_t targetSetIndex = inputTargets[i].set;
                    uint32_t targetBindingIndex = inputTargets[i].binding;

                    VKRenderTargetHandle inputTargetHandle = VKRenderTarget::GetHandle(targetPath, targetPath);

                    mappedInputTargets[targetSetIndex][targetBindingIndex] = inputTargetHandle;
                }

                for (size_t i = 0; i < outputPaths.size(); i++)
                {
                    IRenderTargetHandle outputTargetHandle = VKRenderTarget::GetHandle(outputPaths[i], outputPaths[i]).StaticCastHandle<IRenderTarget>();
                    m_outputRenderTargets.push_back(outputTargetHandle);
                }

                if (!setupAttachmentImages())
                    return false;
                if (!setupRenderPass())
                    return false;
                if (!setupFramebuffer())
                    return false;
                if (!setupDescriptorSets(mappedInputTargets))
                    return false;

                return true;
            }