在vulkan中,指令池vkCommandPool
分配指令缓冲vkCommandBuffer
,而指令缓冲用于记录计算、渲染指令
,记录完后,把该指令缓冲提交给指令队列vkQueue
,然后等待执行。
实际上就可以简单理解为:
vkCommandBuffer
<=> 一个函数vkQueue
<=> 一个队列,每个元素是一个函数指针class CommandQueue
{
public:
// 提交指令到队列
void Submit(std::function<void()> command)
{
commandQueue.push(command);
}
// 处理队列中的指令
void ExecuteCommands()
{
while (!commandQueue.empty())
{
auto command = commandQueue.front();
command();
commandQueue.pop();
}
}
private:
std::queue<std::function<void()>> commandQueue;
};
int main()
{
CommandQueue commandQueue;
// 提交3个指令缓冲到队列,每个指令缓冲相当于一个函数,这里用lambda表达式
commandQueue.Submit([]() { std::cout << "Command 1 executed." << std::endl; });
commandQueue.Submit([]() { std::cout << "Command 2 executed." << std::endl; });
commandQueue.Submit([]() { std::cout << "Command 3 executed." << std::endl; });
// 处理队列中的指令
commandQueue.ExecuteCommands();
return 0;
}