毕设要用Vulkan做个渲染模块,最近几天才开始学习....
一个典型的Vulkan程序框架如下所示:
class VulkanApplication
{
public:
void run()
{
initWindow();
initVulkan();
mainLoop();
}
private:
void initWindow()
{
glfwInit();
glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE);
window = glfwCreateWindow(WINDOW_HEIGHT, WINDOW_WIDTH, WINDOW_TITLE, nullptr, nullptr);
}
void initVulkan()
{
createInstance();
setUpDebugCallback();
createSurface();
pickPhysicalDevice();
createLogicalDevice();
createSwapChain();
createImageViews();
createRenderPass();
createGriphicsPipeline();
createFragmentBuffer();
createCommandPool();
createCommandBuffer();
createSemaphores();
}
void mainLoop()
{
while (!glfwWindowShouldClose(window))
{
glfwPollEvents();
drawFrame();
}
vkDeviceWaitIdle(device);
glfwDestroyWindow(window);
glfwTerminate();
}
}
一.Vulkan创建流程的回顾:
1.使用GLFW初始化Window,设置ClientAPI类型,窗口是否可以拉伸,最后创建窗口。
2.初始化Vulkan部分:
(1)创建VkInstance
使用VkInstanceCreateInfo初始化信息,其包含VkApplicationInfo以及Extension的Validation Layer的信息。由于Vulkan是平台独立的API,与特定的窗口系统交互时需要引入额外的Extension,使用glfwGetReqiuredInstanceExtension获取窗口系统需要的Extension,使用vkEnumerateInstanceExtensi
1.使用GLFW初始化Window,设置ClientAPI类型,窗口是否可以拉伸,最后创建窗口。
2.初始化Vulkan部分:
(1)创建VkInstance
使用VkInstanceCreateInfo初始化信息,其包含VkApplicationInfo以及Extension的Validation Layer的信息。由于Vulkan是平台独立的API,与特定的窗口系统交互时需要引入额外的Extension,使用glfwGetReqiuredInstanceExtension获取窗口系统需要的Extension,使用vkEnumerateInstanceExtensi