Vulkan中的VKAPI_ATTR和VKAPI_CALL宏

Fri*_*esh 3 c++ vulkan

我一直在寻找,我仍然不是很确定什么 VKAPI_ATTRVKAPI_CALL有.我不确定他们是否是一个我不知道的宏或一些奇特的C++函数声明.

什么是VKAPI_ATTR void VKAPI_CALL vkCommand(void)产品,它void vkCommand(void)不提供?

rat*_*eak 6

它们是用于确保应用正确调用约定的宏.这在64位中不太重要,它们主要是收敛但在32位中有几个不兼容的.

不幸的是,不同的编译器有不同的方法.一个将所需的标记放在另一个放在后面的返回值之前.

所以标题使用两者来确保它可以涵盖所有基础.


krO*_*oze 5

它们在vk_platform.h中定义.

它们是C预处理器宏,可扩展为依赖于平台的(通常是编译器特定的)函数属性.

规范定义了他们应该做的事情.
但基本上每个VKAPI_ATTR,VKAPI_CALL并且VKAPI_PTR由于它必须在函数声明中以满足C(可能依赖于编译器)的语法而被抛弃.
它们的值类似于平台的所选调用约定(例如__stdcall)(在编译时检测到).