我试着将我的生活vulkanize.这样我就可以使用Vulkan计算.但是创建一个简单的示例失败的每一种方法,我尝试.
下面是代码:
#include <vulkan/vulkan.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char * argv[])
{
VkApplicationInfo vkAppInfo;
vkAppInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
vkAppInfo.apiVersion = VK_API_VERSION_1_0;
VkInstanceCreateInfo vkCreateInfo;
vkCreateInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
vkCreateInfo.pApplicationInfo = &vkAppInfo;
VkInstance instance = VK_NULL_HANDLE;
VkResult result = vkCreateInstance(&vkCreateInfo, NULL, &instance);
return -1;
if (result != VK_SUCCESS) {
return -2;
} else {
return -3;
}
return 0;
}
我尝试了Vulkan Tutorial(没有图形功能GLFW)
1条答案
按热度按时间evrscar21#
这里的问题是你假设你没有填写的字段会自动地被一些有效的数据所填充,但事实并非如此,它将被垃圾所填充,不要忘记这在C和C++中是非常普遍的事情:每个没有显式初始化的内存都是垃圾。
我建议您编写一些 Package 器函数来填充Vulkan结构体,例如
VkApplicationInfo
。对于
VkApplicationInfo
来说,这似乎不值得,但您将更经常地需要Vulkan结构。编写了
fill_app_info
的最详细版本之后,可以使用两个强大的工具来简化编写过程:默认参数和重载:正如你所看到的,
example3
是在只指定一个参数的情况下创建的。如果你为所有的Vulkan结构体创建这样的函数,这会使你的整个代码更短。在Vulkan中,我们经常需要填充结构体的所有成员,即使有些成员并没有真正使用。我还建议启用验证层来检查你是否正确使用了API。另外,阅读Vulkan文档。他们告诉你如何正确填写每个结构体:https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkApplicationInfo.html