Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ VK_定义非可调度句柄是什么意思_C++_Vulkan - Fatal编程技术网

C++ VK_定义非可调度句柄是什么意思

C++ VK_定义非可调度句柄是什么意思,c++,vulkan,C++,Vulkan,我知道VK_DEFINE_NON_DISPATCHABLE_HANDLE是struct object##T*object或uint64_T object,具体取决于体系结构 我不理解的是为什么使用它以及它有什么好处和/或效果 例如,如果我想从我的VkShaderModule获取pCode,为什么我不能直接转到myShaderModule.pCode VK_定义非可调度句柄是什么意思 根据对话,这里的要点是: 句柄类型的大小必须为64位 如果可能,句柄类型应该是唯一的 在64位平台上,您可以利用6

我知道
VK_DEFINE_NON_DISPATCHABLE_HANDLE
struct object##T*object
uint64_T object
,具体取决于体系结构

不理解的是为什么使用它以及它有什么好处和/或效果

例如,如果我想从我的
VkShaderModule
获取
pCode
,为什么我不能直接转到
myShaderModule.pCode

VK_定义非可调度句柄是什么意思

根据对话,这里的要点是:

  • 句柄类型的大小必须为64位
  • 如果可能,句柄类型应该是唯一的
  • 在64位平台上,您可以利用64位指针创建许多不同的、独特的类型;因此,手柄类型不能互换

    否则,最好的方法就是
    uint64\t
    ,这并不是很安全的类型

    在C++11中,我们可能会使用
    enum类句柄###t:uint64_t{}
    来充分利用这两个方面


    例如,如果我想从VkShaderModule获取pCode,为什么我不能直接转到myShaderModule.pCode


    不知道这意味着什么,抱歉。

    在许多领域,Vulkan API实现了不透明句柄。本质上,这意味着实现者几乎可以做他们喜欢做的任何事情,并且在对象的内存布局方面,甚至在作为真正指针的句柄方面,不受客户机的任何契约的约束

    如果您想从
    VkShaderModule
    中获取
    pCode
    ,我建议您在创建它时自己存储它,而不是依赖实现来存储它


    Vulkan的意图是消除图形API的负担并消除膨胀。存储用户提供的数据并提供API以获取所述用户数据是膨胀的。如果你想保留这些东西,就把
    VkShaderModules
    映射到你想从
    VkShaderModuleCreateInfo
    中保留的任何参数。谢谢,这对Vulkan API背后的整体主题来说是有意义的
    glGetShaderSource
    是OpenGL的等价物。这是一个毫无意义的函数调用。如果客户需要这些信息,他们可以自己存储,就像他们一开始提供的那样!实际上,由于驱动程序必须存储这些字符串,系统中的每个图形应用程序都会产生内存浪费。GL中有很多类似的废话,它是从Vulkan中删除的。Vulkan中的不可分派句柄不要求是唯一的。这允许实现直接将有关对象的所有信息存储在句柄本身中(例如,可能对VkSampler有用),而不是分配一个单独的对象。@JesseHall:没有说是这样。@BoundaryImposition:“句柄应尽可能唯一”听起来句柄应该是唯一的。@Nicolas:
    assert(strcmp(“应该是”,“需要是”)!=0)VK\u DEFINE\u NON\u DISPATCHABLE\u HANDLE
    是这样定义的。显然我错了,但我认为OP(似乎接受了一个不相关的答案)是在问这个问题。@JesseHall你能解释一下它的意思吗“这允许实现直接将对象的所有信息存储在句柄本身中”。我已经读了第二遍(规范中的第一遍),但实际上我不明白这意味着什么。道具作为位标志编码到句柄中?还是作为不同位字段中的值?