Vulkan がリリースされたので、(趣味として) Vulkan ベースの GUI を書くことにしました。しかし、私は現在、最初のステップである Vulkan 関数のロードで立ち往生しています。私が見る限り、Vulkan 関数をグローバルにロードする必要がある Nvidia の C++ Vulkan ラッパーを使用しています。
ローカル関数を正常にロードできますが、::vkCreateInstance
失敗します:
void loadInstanceFunctions() {
PFN_vkCreateInstance vkCreateInstance = (PFN_vkCreateInstance)vkGetInstanceProcAddr(nullptr, "vkCreateInstance"); //works
::vkCreateInstance = (PFN_vkCreateInstance)vkGetInstanceProcAddr(nullptr, "vkCreateInstance"); //does not work
}
新しい関数ポインターをグローバルに割り当てようとすると、コンパイル時に 2 つのエラーが発生します (VS2015 を使用してコンパイル):
- 式は変更可能な左辺値でなければなりません。
- '=': 左オペランドとして機能します。
vulkan.h
ヘッダーで宣言された関数プロトタイプがあります。次に例を示します。
VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
const VkInstanceCreateInfo* pCreateInfo,
const VkAllocationCallbacks* pAllocator,
VkInstance* pInstance);
これが、関数をグローバルにロードできない原因です。もし私が を定義するとしたらVK_NO_PROTOTYPES
、これらのプロトタイプはスキップされ、私はそれらを as などと再宣言することができると信じていPFN_vkCreateInstance vkCreateInstance = nullptr;
ます。しかし、これは正しい方法ですか?
それで、私の質問 - Vulkan 関数をグローバルにロードする正しい方法は何ですか?