VkSurfaceKHR surface
这个貌似算封装了窗口句柄吧 然后不同平台创建窗口不同,怪麻烦。
于是 我们借助glfw 创建他
void createSurface() {
if (glfwCreateWindowSurface(instance, window, nullptr, &surface) != VK_SUCCESS) {
throw std::runtime_error("failed to create window surface!");
}
}
vkDestroySurfaceKHR(instance, surface, nullptr);
这个要手动删除。
然后这里描述可能某个设备的某个queue family他可能支持图形命令但是不支持呈现。。好诡异。所以要判断设备对于presentation的支持情况。
然后找到支持绘制且支持呈现的设备,就是找两个queuefamily presentation和graphic。
就找所有的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元素