编译器错误CS0029:无法隐式转换为uint VulkanSharp开发报错求解
错误原因
你出现报错的核心原因是属性赋值匹配错误:
DeviceCreateInfo类中的QueueCreateInfoCount为uint值类型,作用是标记你传入的队列创建信息的总数量,无法接收DeviceQueueCreateInfo类的实例对象- 存储队列创建信息实例的属性是同属
DeviceCreateInfo类的QueueCreateInfos,该属性为DeviceQueueCreateInfo数组类型,才是你应该赋值的目标 - 你看到的隐式转换报错,本质是尝试将引用类型的
DeviceQueueCreateInfo对象赋值给值类型的uint属性,二者不存在合法的转换路径,因此编译器抛出错误。
修复方案
按照VulkanSharp的结构定义修改赋值逻辑即可,补充必填的缺省参数后可正常运行:
uint _queueFamilyUsedIndex; var _deviceInfo = new DeviceCreateInfo { EnabledExtensionNames = new string[] { "VK_KHR_swapchain" }, // 显式赋值扩展数量,也可依赖VulkanSharp自动根据数组长度计算,显式赋值兼容性更好 EnabledExtensionCount = 1, // 队列创建信息数量对应数组长度,此处仅使用1个队列族所以填1 QueueCreateInfoCount = 1, // 队列创建信息实例存入对应数组属性 QueueCreateInfos = new DeviceQueueCreateInfo[] { new DeviceQueueCreateInfo { QueueFamilyIndex = _queueFamilyUsedIndex, // 补充必填参数:当前队列族下要创建的队列数量 QueueCount = 1, // 补充必填参数:队列优先级,单队列场景直接赋值1.0即可 QueuePriorities = new float[] { 1.0f } } } };
注:Vulkan原生API的所有
*Count字段的作用都是标记后续对应数组的长度,各语言的绑定库都会严格遵循该设计逻辑,赋值时注意不要把计数字段和数组字段混淆。
内容的提问来源于stack exchange,提问作者rafal1137
相关产品推荐
相关产品推荐

