微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Erupted-V2中定义vkCreateXcbSurfaceKHR?

如何解决如何在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 举报,一经查实,本站将立刻删除。