Example #1
0
BuildCommandTask::BuildCommandTask(const vkts::IUpdateThreadContext& updateContext, const vkts::IInitialResourcesSP& initialResources, const vkts::IGraphicsPipelineSP& pipeline, const vkts::ISceneSP& scene, const uint32_t& objectOffset, const uint32_t& objectStep) :
	ITask(), updateContext(updateContext), initialResources(initialResources), pipeline(pipeline), scene(scene), objectOffset(objectOffset), objectStep(objectStep), commandBufferInheritanceInfo(nullptr), extent{0, 0}, commandPool(nullptr), cmdBuffer(nullptr)
{
	// This pool will contain secondary command buffers, which will be reseted.
	commandPool = vkts::commandPoolCreate(initialResources->getDevice()->getDevice(), VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, initialResources->getQueue()->getQueueFamilyIndex());

	if (!commandPool.get())
	{
		vkts::logPrint(VKTS_LOG_ERROR, "BuildCommandTask: Could not get command pool.");
	}

	//

	cmdBuffer = vkts::commandBuffersCreate(initialResources->getDevice()->getDevice(), commandPool->getCmdPool(), VK_COMMAND_BUFFER_LEVEL_SECONDARY, 1);

	if (!cmdBuffer.get())
	{
		vkts::logPrint(VKTS_LOG_ERROR, "BuildCommandTask: Could not create command buffer.");

		commandPool->destroy();
	}
}