65,206
社区成员
发帖
与我相关
我的任务
分享#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)
, 感謝, 結帖[/quote]
每次改名都要逐个地方改, 说明你的函数命名有问题, 可以考虑用namespace[/quote]我想不到函數或者變量叫甚麼名好就隨便打, 改天想到更適合的就想改, 但全部有引用過的地方, 聲明和定義都要改一遍
[/quote]
名字尽量短, 怕重名外面包个namespace, 函数名一般是动词, 类名是名词.
而且c++有函数重载, 可以同名。
比如上面这三个函数, 可以都改名为load
, 感謝, 結帖[/quote]
每次改名都要逐个地方改, 说明你的函数命名有问题, 可以考虑用namespace[/quote]我想不到函數或者變量叫甚麼名好就隨便打, 改天想到更適合的就想改, 但全部有引用過的地方, 聲明和定義都要改一遍
, 感謝, 結帖[/quote]
每次改名都要逐个地方改, 说明你的函数命名有问题, 可以考虑用namespace
, 感謝, 結帖
[/quote]
[/quote]
直接源代码才叫同Project, 你有编译loadVulkan.cpp, 光include头文件只是骗过编译器而已, 链接时就找不到了