impriving architecture
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
#include <stdlib.h>
|
||||
|
||||
#define VK_NO_PROTOTYPES
|
||||
#include <vulkan/vulkan.h>
|
||||
#include <vulkan/vulkan_core.h>
|
||||
|
||||
#include <dlfcn.h>
|
||||
|
||||
@@ -10,15 +10,38 @@
|
||||
#define LIBVK "vulkan"
|
||||
#endif
|
||||
|
||||
#define CheckVk(x) \
|
||||
do { \
|
||||
if((x) != VK_SUCCESS) \
|
||||
{ \
|
||||
fprintf(stderr, "Vulkan call failed\n"); \
|
||||
abort(); \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
int main(void)
|
||||
{
|
||||
printf("openning ./zig-out/lib/lib" LIBVK ".so\n");
|
||||
puts("openning ./zig-out/lib/lib" LIBVK ".so");
|
||||
void* lib = dlopen("./zig-out/lib/lib" LIBVK ".so", RTLD_NOW | RTLD_LOCAL);
|
||||
|
||||
PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr = dlsym(lib, "vkGetInstanceProcAddr");
|
||||
|
||||
printf("test %p\n", vkGetInstanceProcAddr);
|
||||
printf("test %p\n", vkGetInstanceProcAddr(NULL, "vkCreateInstance"));
|
||||
#define VULKAN_GLOBAL_FUNCTION(fn) PFN_##fn fn = (PFN_##fn)vkGetInstanceProcAddr(NULL, #fn);
|
||||
VULKAN_GLOBAL_FUNCTION(vkCreateInstance)
|
||||
|
||||
VkInstanceCreateInfo instance_create_info = { 0 };
|
||||
instance_create_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
|
||||
|
||||
VkInstance instance = VK_NULL_HANDLE;
|
||||
CheckVk(vkCreateInstance(&instance_create_info, NULL, &instance));
|
||||
|
||||
printf("VkInstance %p\n", instance);
|
||||
|
||||
#define VULKAN_INSTANCE_FUNCTION(fn) PFN_##fn fn = (PFN_##fn)vkGetInstanceProcAddr(instance, #fn);
|
||||
VULKAN_INSTANCE_FUNCTION(vkEnumeratePhysicalDevices)
|
||||
VULKAN_INSTANCE_FUNCTION(vkDestroyInstance)
|
||||
|
||||
vkDestroyInstance(instance, NULL);
|
||||
|
||||
dlclose(lib);
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user