【发布时间】:2020-01-15 05:05:11
【问题描述】:
vkEnumerateDeviceExtensionProperties() 调用时“返回”0。
我正在关注 Khronos Group 的 Vulkan 教程:https://vulkan-tutorial.com/
我知道函数的实际return 值是错误代码。我说的是第三个parameter,在这种情况下是正在写入的IntBuffer。 IntBuffer 总是返回为 0。此外,到目前为止我所做的一切都有效,包括实例创建、验证层、表面创建和创建逻辑设备(实际上是在这部分代码之后,但它在我之前工作实现了这个)。
代码如下:
private fun checkDeviceExtensionSupport(device: VkPhysicalDevice): Boolean {
val pExtensionCount = memAllocInt(1)
vkEnumerateDeviceExtensionProperties(device,null.toString(),pExtensionCount,null)
val availableExtensions = VkExtensionProperties.mallocStack(pExtensionCount.get(0))
vkEnumerateDeviceExtensionProperties(device,null.toString(),pExtensionCount,availableExtensions)
println("ExtensionCount: ${pExtensionCount.get()}") //this is 0
println("Available extensions: ${availableExtensions.get(0)}") //which results in an out of bounds here
memFree(pExtensionCount)
availableExtensions.free()
return true
}
我注意到其他人一开始甚至都不调用此方法。有必要吗?我相当确定您必须稍后在逻辑设备创建信息中指定设备扩展名。难道只是我的物理设备不支持任何扩展?不过对我来说听起来有点奇怪。
是的,我知道 Kotlin 可能不是编程引擎和游戏的最佳选择,如果我被困在这里,我愿意回到 C++,但现在我实际上对 Kotlin 很满意。
【问题讨论】:
-
val pExtensionCount = memAllocInt(1) vkEnumerateDeviceExtensionProperties(device,null.toString(),pExtensionCount,null)应该是这样的吗?我想你忘了换行和缩进。 -
您也可以在该设备上运行 VkPhysicalDeviceProperties 吗?它可能不是您认为的设备。您可以尝试将
null放入null.toString()吗?它可能找不到扩展名,因为它认为您正在尝试命名图层。 -
哦,这些行实际上应该是分开的。我想我只是格式错误。 null.toString() 是必要的,因为否则将有 2 种可能的方法可以被调用。一个想要一个 ByteBuffer,另一个想要一个 CharSequence。我将尝试获取设备属性!好主意!
-
好吧,事实证明我实际上弄错了设备。我不知道是哪一个,但该方法现在返回 78,这很好(我猜?)。非常感谢!你在这里做上帝的工作。
-
您可能应该对此做出自我回答,我会赞成它,它会帮助其他人。评论是临时的。