如何解决如何在Erupted-V2中定义vkCreateXcbSurfaceKHR?
我正在尝试将XCB与Vulkan绑定Erupted-V2结合使用,但出现错误:
source/gfxdevicevulkan.d(231,24): Error: undefined identifier vkCreateXcbSurfaceKHR
这是我的dub.json:
{
"name": "dvulkanbase","targettype": "executable","description": "Vulkan boilerplate","license": "MIT","configurations": [
{
"name": "linux","platforms": ["linux"],"versions": ["VK_USE_PLATFORM_XCB_KHR"],"libs": [ "X11","Xi","Xrandr","pthread","Xxf86vm","GL","glu","Xinerama","Xcursor" ],"dependencies": {
"bindbc-sdl": "~>0.19.0","erupted_v2": ">=1.1.71","xlib-d": "~>0.1.1","xcb-d": "~>2.1.0"
}
},{
"name": "windows","platforms": ["windows"],"versions": ["VK_USE_PLATFORM_WIN32_KHR"],"erupted_v2": ">=1.1.71"
}
}
]
}
这是我在使用vkCreateXcbSurfaceKHR的文件中导入的内容:
import core.stdc.string;
import erupted;
import erupted.vulkan_lib_loader;
import matrix4x4;
import std.conv;
import std.exception;
import std.stdio;
version(linux)
{
import X11.Xlib_xcb;
public import xcb.xcb;
import erupted.platform_extensions;
mixin Platform_Extensions!VK_USE_PLATFORM_XCB_KHR;
}
class GfxDeviceVulkan
{
this( int width,int height,void* windowHandleOrWindow,void* display,uint window )
{
loadGlobalLevelFunctions();
VkApplicationInfo appinfo;
appinfo.pApplicationName = "VulkanBase";
appinfo.apiVersion = VK_MAKE_VERSION( 1,2 );
version(linux)
{
const(char*)[3] extensionNames = [
"VK_KHR_surface","VK_KHR_xcb_surface","VK_EXT_debug_utils",];
}
uint extensionCount = 0;
vkEnumerateInstanceExtensionProperties( null,&extensionCount,null );
auto extensionProps = new VkExtensionProperties[]( extensionCount );
vkEnumerateInstanceExtensionProperties( null,extensionProps.ptr );
uint layerCount = 0;
vkEnumerateInstanceLayerProperties( &layerCount,null );
auto layerProps = new VkLayerProperties[]( layerCount );
vkEnumerateInstanceLayerProperties( &layerCount,layerProps.ptr );
const(char*)[1] validationLayers = ["VK_LAYER_KHRONOS_validation"];
VkInstanceCreateInfo createinfo;
createinfo.sType = VkStructureType.VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
createinfo.pApplicationInfo = &appinfo;
createinfo.enabledExtensionCount = isDebug ? cast(uint)extensionNames.length : 2;
createinfo.ppEnabledExtensionNames = extensionNames.ptr;
createinfo.enabledLayerCount = isDebug ? validationLayers.length : 0;
createinfo.ppEnabledLayerNames = isDebug ? validationLayers.ptr : null;
enforceVk( vkCreateInstance( &createinfo,null,&instance ) );
loadInstanceLevelFunctions( instance );
version(linux)
{
auto xcbInfo = VkXcbSurfaceCreateInfoKHR(
VkStructureType.VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR,XGetXCBConnection( cast(xcb_connection_t*)display ),window
);
enforceVk( vkCreateXcbSurfaceKHR( instance,&xcbInfo,&surface ) );
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。