相关文章推荐
发呆的花生  ·  com.fasterxml.jackson. ...·  1 年前    · 
高大的小摩托  ·  石川 - 知乎·  1 年前    · 
眉毛粗的木瓜  ·  IMS error in logs: ...·  1 年前    · 


VkSurfaceKHR surface

vulkan管线学习4_窗口句柄

这个貌似算封装了窗口句柄吧 然后不同平台创建窗口不同,怪麻烦。

于是 我们借助glfw 创建他

void createSurface() {
if (glfwCreateWindowSurface(instance, window, nullptr, &surface) != VK_SUCCESS) {
throw std::runtime_error("failed to create window surface!");
}
}
vkDestroySurfaceKHR(instance, surface, nullptr);

这个要手动删除。

vulkan管线学习4_vulkan_02

然后这里描述可能某个设备的某个queue family他可能支持图形命令但是不支持呈现。。好诡异。所以要判断设备对于presentation的支持情况。

然后找到支持绘制且支持呈现的设备,就是找两个queuefamily presentation和graphic。

vulkan管线学习4_窗口句柄_03

就找所有的family 看看是不是两个东西都支持 然后把索引记下来 OK

QueueFamilyIndices findQueueFamilies(VkPhysicalDevice device) {
QueueFamilyIndices indices;

uint32_t queueFamilyCount = 0;
vkGetPhysicalDeviceQueueFamilyProperties(device, &queueFamilyCount, nullptr);

std::vector<VkQueueFamilyProperties> queueFamilies(queueFamilyCount);
vkGetPhysicalDeviceQueueFamilyProperties(device, &queueFamilyCount, queueFamilies.data());

int i = 0;
for (const auto& queueFamily : queueFamilies) {
if (queueFamily.queueFlags & VK_QUEUE_GRAPHICS_BIT) {
indices.graphicsFamily = i;
}

VkBool32 presentSupport = false;
vkGetPhysicalDeviceSurfaceSupportKHR(device, i, surface, &presentSupport);

if (presentSupport) {
indices.presentFamily = i;
}

if (indices.isComplete()) {
break;
}

i++;
}

return indices;
}

最后创建就填充好createInfo 创建两个queue

vkGetDeviceQueue(device, indices.graphicsFamily.value(), 0, &graphicsQueue);
vkGetDeviceQueue(device, indices.presentFamily.value(), 0, &presentQueue);

javascript 获得一类元素 js按类获取元素

//此方法可以区分class相同的不同元素(功能相对齐全,理解起来也相对复杂一些) function getElementsByClassName( parent,tag,className ){   //获取所有父节点下的tag元素   var aEls = parent.getElementsByTagName(tag);   var arr = [];   //循环所有tag元素