65,189
社区成员




#pragma once
#include <vector>
#include "loadVulkanAPI.h"
void createInstance();
void createDevice();
... // 省略
#include "context.h"
#include "config.h"
#include <FreeImage.h>
void createInstance()
{
loadVulkanBaseAPI();
... // 省略
vkSuccessOrDie(vkCreateInstance(&instanceCreateInfo, NULL, &instance), "Failed to create instance");
loadVulkanInstanceAPI(instance);
... // 省略
}
void createDevice()
{
... // 省略
vkSuccessOrDie(vkCreateDevice(gpu, &deviceCreateInfo, NULL, &device), "Failed to create Vulkan Device");
loadVulkanDeviceAPI(device);
// Gather physical device memory properties
vkGetPhysicalDeviceMemoryProperties(gpu, &deviceMemProps);
vkGetDeviceQueue(device, 0, 0, &graphicsQueue);
}
... // 省略
#pragma once
#define VK_USE_PLATFORM_WIN32_KHR
#define VK_NO_PROTOTYPES
#include "vulkan/vulkan.h"
#include "NativeLibrary.h"
#include "debugOutput.h"
bool loadVulkanBaseAPI();
bool loadVulkanInstanceAPI(VkInstance instance);
bool loadVulkanDeviceAPI(VkDevice device);
... // 省略
#include "loadVulkanAPI.h"
#define PVR_STR(x) #x
#define PVR_VULKAN_GET_INSTANCE_POINTER(instance, function_name) vk##function_name = (PFN_vk##function_name)vkGetInstanceProcAddr(instance, "vk" PVR_STR(function_name));
#define PVR_VULKAN_GET_DEVICE_POINTER(device, function_name) vk##function_name = (PFN_vk##function_name)vkGetDeviceProcAddr(device, "vk" PVR_STR(function_name));
static NativeLibrary vkLib("vulkan-1.dll");
bool initVulkan()
{
vkGetInstanceProcAddr = (PFN_vkGetInstanceProcAddr)vkLib.getFunction("vkGetInstanceProcAddr");
vkEnumerateInstanceExtensionProperties = (PFN_vkEnumerateInstanceExtensionProperties)vkLib.getFunction("vkEnumerateInstanceExtensionProperties");
vkEnumerateInstanceLayerProperties = (PFN_vkEnumerateInstanceLayerProperties)vkLib.getFunction("vkEnumerateInstanceLayerProperties");
vkCreateInstance = (PFN_vkCreateInstance)vkLib.getFunction("vkCreateInstance");
vkDestroyInstance = (PFN_vkDestroyInstance)vkLib.getFunction("vkDestroyInstance");
return true;
}
bool initVulkanInstance(VkInstance instance)
{
PVR_VULKAN_GET_INSTANCE_POINTER(instance, EnumerateDeviceLayerProperties);
... // 省略
return true;
}
bool initVulkanDevice(VkDevice device)
{
PVR_VULKAN_GET_DEVICE_POINTER(device, CreateRenderPass);
... // 省略
return true;
}
...// 省略
1>context.obj : error LNK2019: unresolved external symbol "bool __cdecl loadVulkanBaseAPI(void)" (?loadVulkanBaseAPI@@YA_NXZ) referenced in function "void __cdecl createInstance(void)" (?createInstance@@YAXXZ)
1>context.obj : error LNK2019: unresolved external symbol "bool __cdecl loadVulkanInstanceAPI(struct VkInstance_T *)" (?loadVulkanInstanceAPI@@YA_NPAUVkInstance_T@@@Z) referenced in function "void __cdecl createInstance(void)" (?createInstance@@YAXXZ)
1>context.obj : error LNK2019: unresolved external symbol "bool __cdecl loadVulkanDeviceAPI(struct VkDevice_T *)" (?loadVulkanDeviceAPI@@YA_NPAUVkDevice_T@@@Z) referenced in function "void __cdecl createDevice(void)" (?createDevice@@YAXXZ)