vulkan 订阅
Vulkan是一个跨平台的2D和3D绘图应用程序接口(API),最早由科纳斯组织(Khronos Group) [1]  在2015年游戏开发者大会(GDC)上发表。科纳斯最先把VulkanAPI称为“次世代OpenGL行动”(next generation OpenGL initiative)或“glNext”, [2]  但在正式宣布Vulkan之后这些名字就没有再使用了。就像OpenGL,Vulkan针对实时3D程序(如电子游戏)设计,Vulkan并计划提供高性能和低CPU管理负担(overhead),这也是Direct3D12和AMD的Mantle的目标。Vulkan兼容Mantle的一个分支,并使用了Mantle的一些组件。 [2-3] 展开全文
Vulkan是一个跨平台的2D和3D绘图应用程序接口(API),最早由科纳斯组织(Khronos Group) [1]  在2015年游戏开发者大会(GDC)上发表。科纳斯最先把VulkanAPI称为“次世代OpenGL行动”(next generation OpenGL initiative)或“glNext”, [2]  但在正式宣布Vulkan之后这些名字就没有再使用了。就像OpenGL,Vulkan针对实时3D程序(如电子游戏)设计,Vulkan并计划提供高性能和低CPU管理负担(overhead),这也是Direct3D12和AMD的Mantle的目标。Vulkan兼容Mantle的一个分支,并使用了Mantle的一些组件。 [2-3]
信息
外文名
Vulkan
开发商
Khronos Group [1]
中文名
Vulkan
Vulkan特性
同 OpenGL® 一样,Vulkan™ 也由 Khronos 集团开发。它是 AMD Mantle 的后续版本,继承了前者强大的低开销架构,使软件开发人员能够全面获取 Radeon™ GPU 与多核 CPU 的性能、效率和功能。 [4]  相对于 OpenGL,Vulkan™ 大幅降低了 CPU 在提供重要特性、性能 和影像质量时的“API 开销” [2]  (CPU 在分析游戏的硬件需求时所执行的后台工作),而且可以使用通常通过 OpenGL 无法访问的 GPU 硬件特性。 [4]  独特的跨 OS 支持Vulkan™ 能够支持深入硬件底层的控制,为 Windows® 7、Windows® 8.1、Windows® 10 和 Linux® [4]  带来更快的性能和更高的影像质量。Vulkan™ API 还提供超高的 OS 兼容性、渲染特性和硬件效率。 [4]  自动兼容 GCN 架构只有基于GCN架构 的Radeon™ 显卡拥有强大的“异步计算”功能,使显卡得以并行处理3D几何图形与计算工作量。例如,当游戏需要同时计算复杂照明与渲染人物时,这种功能就找到了用武之地。这些任务并不需要在Radeon™ 显卡上串行运行,因此可以节约时间、提升整体帧速率。设计Vulkan应用的游戏开发者可以在所有近期版本的Windows和Linux系统中利用这种独特硬件特性。 [4] 
收起全文
精华内容
下载资源
问答
  • vulkan

    2020-12-29 16:33:56
    <div><p>Is there any plans on supporting vulkan?</p><p>该提问来源于开源项目:pyglet/pyglet</p></div>
  • Vulkan

    2018-11-22 17:56:00
    程序丨ARM 李陈鲁:怎么通过Unity使用Vulkan API? https://www.sohu.com/a/143780024_466876 初识Vulkan https://www.cnblogs.com/cxchanpin/p/7258249.html Vulkan ...

    程序丨ARM 李陈鲁:怎么通过Unity使用Vulkan API?

    https://www.sohu.com/a/143780024_466876

    初识Vulkan

    https://www.cnblogs.com/cxchanpin/p/7258249.html

    Vulkan

    https://baike.baidu.com/item/Vulkan/17543632?fr=aladdin

    没有任何秘密的 API:Vulkan* 简介第 0 部分:前言

    https://software.intel.com/zh-cn/articles/api-without-secrets-introduction-to-vulkan-preface?cid=prc:bai|dzone_cn_game_vulkan|cn2A99|s&utm_source=baidu&utm_medium=cpc&utm_term=CV_IDZ_Game_2713&utm_campaign=Dzone_CN_Game_Vulkan(S)&utm_content=cid=prc:bai|dzone_cn_game_vulkan|cn2A99|s&intel_term=vulkan

    转载于:https://www.cnblogs.com/javalzy/p/10002676.html

    展开全文
  • vulkan:Nim的Vulkan绑定
  • vulkanvulkan探索-源码

    2021-02-07 17:51:46
    了解Vulkan及其使用方法 附加评论和详细信息 我想在Vulkan中尝试的其他实验和功能 未来目标 我正在研究游戏/游戏渲染技术,在尝试抽象其功能之前,我希望对Vulkan有扎实的了解。 处理: [x]设置[x]实例[x]验证和...
  • Learning Vulkan

    2018-07-10 22:48:59
    Learning Vulkan Vulkan是一个跨平台的2D和3D绘图应用程序接口
  • Vulkan Cookbook

    2017-07-17 15:24:40
    Vulkan cookbook英文原版,现在比较好的vulkan教材(至少比programming guide有干货)
  • vulkan-lessons:Vulkan API教程样本
  • Vulkan生态系统组件 该项目提供了用于Windows,Linux和MacOS的Khronos官方Vulkan ICD桌面加载程序。 CI构建状态 介绍 Vulkan是一个显式API,可直接控制GPU的实际工作方式。 因此,Vulkan支持具有多个GPU的系统,每个...
  • Vulkan教程:LineByLine的VulkanAPI教程
  • Vulkan Tutorial

    2017-09-04 16:57:59
    Vulkan 官方手册,英文原版。 Vulkan是一个跨平台的2D和3D绘图应用程序接口(API) 同 OpenGL® 一样,Vulkan™ 也由 Khronos 集团开发。它是 AMD Mantle 的后续版本,继承了前者强大的低开销架构,使软件开发人员...
  • Vulkan support

    2020-12-01 12:22:25
    <div><p>Support for Vulkan functions. Compatibility with https://github.com/vulkan-go/vulkan would be very nice. Could Vulkan handles be transferred between packages as uintptrs? I'm not sure how ...
  • Vulkan:创建Vulkan实例

    2020-04-07 10:22:00
    大家好,接下来将为大家介绍Vulkan:创建Vulkan实例。 与Vulkan打交道,通常的步骤是创建一个intance去初始化Vulkan library。这个instance是您的应用程序与Vulkan库之间的连接桥梁,通常创建过程中,需要向驱动...

    大家好,接下来将为大家介绍Vulkan:创建Vulkan实例。

    Vulkan打交道,通常的步骤是创建一个intance去初始化Vulkan library。这个instance是您的应用程序与Vulkan库之间的连接桥梁,通常创建过程中,需要向驱动程序提供一些应用层的信息。

    1、创建实例基本介绍

    Vulkan API使用vkInstance对象来存储所有每个应用的状态。应用程序在执行任何其他Vulkan操作之前必须创建一个Vulkan实例,基本的Vulkan架构看起来是这样的:

    上面的图显示了一个Vulkan应用程序链接到一个被称为加载器(Loader)的Vulkan库。创建实例会初始化这个装载器Loader。加载器还会加载并初始化低层级的图形驱动程序Driver,通常由GPU硬件的供应商提供。

    请注意在图表中提到的layers,它们也是被loader加载的。layers通常被用来执行validation验证操作。validation是驱动的错误校验。在Vulkan中,驱动程序比OpenGL等其他的API更加的轻量化,这正是因为驱动将validation功能交给layers代理的结果。同时layers也并不是必须的,而且在每一次创建实例的时候,layers可以被选择性的加载。

     

    2、相关API介绍

    vkCreateInstance

    vkCreateInstance函数的原型为:

    VkResult vkCreateInstance(const VkInstanceCreateInfo* pCreateInfo,
             const VkAllocationCallbacks* pAllocator, VkInstance* pInstance);

    参数说明:

    VkResult - 函数的返回状态。
    VkInstanceCreateInfo - 创建一个实例所需要的额外的信息,这是一个相当重要的结构体。
    VkAllocationCallbacks - 用户可以设定自定义的内存分配函数,不指定的话,Vulkan会使用默认的NULL。
    VkInstance - 如果instance实例能够被顺利的创建,这个就是实例的句柄。

     

    VkInstanceCreateInfo 结构体

    Vulkan创建对象的时候,总会有一个VkObjectCreateInfo参数。创建instance对象时,对应VkInstanceCreateInfo参数。

    typedef struct VkInstanceCreateInfo{
      VkStructureType                sType;
      const void*                    pNext;
      VkInstanceCreateFlags          flags;
      const VkApplicationInfo*       pApplicationInfo;
      uint32_t                       enabledLayerCount;
      const char* const*             ppEnableLayerNames;
      uint32_t                       enabledExtensionCount;
      const char* const*             ppEnabledExtensionNames;
    }VkInstanceCreateInfo;

    sType - 指明这个结构体的类型。既然这是一个VkInstanceCreateInfo 结构体,你需要将其设置为VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO。其目的如下:

    • driver层,validation layer层或者其他的该结构体的消费者,能够通过该字段做一些校验。
    • 结构体可以通过void*指针来传递给使用这个结构体的对象,然后还是能够识别出这个指针该有的类型。

    由于sType总是结构体的第一个字段,该结构体的消费者总是能够轻易的确定它的类型,然后决定来如何处理它。

    pNext - 用于传递扩展指定的消息,该字段通常被设置为NULL

    flags - 当前没有flags被定义,将其设置为0。

    pApplicationInfo - 应用相关的结构体信息。

    enabledLayerCount 和 ppEnabledLayerNames - 本节接下来内容会讲。

    enabledExtensionCount 和 ppEnabledExtensionNames - 本节内容暂时不涉及。

     

    VkApplicationInfo 结构体

    这个结构体提供了应用的一些由Vulkan实现的基本的信息。

    typedef struct VkApplicationInfo {
        VkStructureType    sType;
        const void*        pNext;
        const char*        pApplicationName;
        uint32_t           applicationVersion;
        const char*        pEngineName;
        uint32_t           engineVersion;
        uint32_t           apiVersion;
    } VkApplicationInfo;

    sType 和 pNext - 同 vkInstanceCreateInfo 结构体一样

    pApplicationNameapplicationVersionpEngineNameengineVersion - 这些是非必要填写的字段。如果需要的话,这些是应用程序可以提供的自由字段。 一些 tools, loaders, layers, 或者 drivers 的实现可能会用这些字段进行debugging或者出报告。driver甚至可以使用这些字段来更改自身的行为,这取决于当前的应用程序。

    apiVersion - vulkan API的版本。

     

    3、一个简单的示例程序

    // 01_instance_creation.cpp
    #define GLFW_INCLUDE_VULKAN
    #include <GLFW/glfw3.h>
    
    #include <iostream>
    #include <stdexcept>
    #include <cstdlib>
    
    const int WIDTH = 800;
    const int HEIGHT = 600;
    
    class HelloTriangleApplication {
    public:
        void run() {
            initWindow();
            initVulkan();
            mainLoop();
            cleanup();
        }
    
    private:
        GLFWwindow* window;
    
        VkInstance instance;
    
        void initWindow() {
            glfwInit();
    
            glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
            glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE);
    
            window = glfwCreateWindow(WIDTH, HEIGHT, "Vulkan", nullptr, nullptr);
        }
    
        void initVulkan() {
            createInstance();
        }
    
        void mainLoop() {
            while (!glfwWindowShouldClose(window)) {
                glfwPollEvents();
            }
        }
    
        void cleanup() {
            vkDestroyInstance(instance, nullptr);
    
            glfwDestroyWindow(window);
    
            glfwTerminate();
        }
    
        void createInstance() {
            VkApplicationInfo appInfo = {};
            appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
            appInfo.pApplicationName = "Hello Triangle";
            appInfo.applicationVersion = VK_MAKE_VERSION(1, 0, 0);
            appInfo.pEngineName = "No Engine";
            appInfo.engineVersion = VK_MAKE_VERSION(1, 0, 0);
            appInfo.apiVersion = VK_API_VERSION_1_0;
    
            VkInstanceCreateInfo createInfo = {};
            createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
            createInfo.pApplicationInfo = &appInfo;
    
            uint32_t glfwExtensionCount = 0;
            const char** glfwExtensions;
            glfwExtensions = glfwGetRequiredInstanceExtensions(&glfwExtensionCount);
    
            createInfo.enabledExtensionCount = glfwExtensionCount;
            createInfo.ppEnabledExtensionNames = glfwExtensions;
    
            createInfo.enabledLayerCount = 0;
    
            if (vkCreateInstance(&createInfo, nullptr, &instance) != VK_SUCCESS) {
                throw std::runtime_error("failed to create instance!");
            }
        }
    };
    
    int main() {
        HelloTriangleApplication app;
    
        try {
            app.run();
        } catch (const std::exception& e) {
            std::cerr << e.what() << std::endl;
            return EXIT_FAILURE;
        }
    
        return EXIT_SUCCESS;
    }
    C++
    

     

    代码详细介绍如下:

    a:声明一个VKInstance对象,添加一个createInstance函数,并在initVulkan函数中调用。

    private:
    VkInstance instance;
    
    void initVulkan() {
        createInstance();
    }

    b:接下来创建VkApplicationInfo这个数据结构对象:

    VkApplicationInfo appInfo = {};
    appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;appInfo.pNext = nullptr;
    appInfo.pApplicationName = "Hello Triangle";
    appInfo.applicationVersion = VK_MAKE_VERSION(1, 0, 0);
    appInfo.pEngineName = "No Engine";
    appInfo.engineVersion = VK_MAKE_VERSION(1, 0, 0);
    appInfo.apiVersion = VK_API_VERSION_1_0;

    c:创建VkInstanceCreateInfo结构体对象如下:

    VkInstanceCreateInfo createInfo = {};
    createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
    createInfo.pApplicationInfo = &appInfo;
    
    unsigned int glfwExtensionCount = 0;
    const char** glfwExtensions;
    
    glfwExtensions = glfwGetRequiredInstanceExtensions(&glfwExtensionCount);
    
    createInfo.enabledExtensionCount = glfwExtensionCount;
    createInfo.ppEnabledExtensionNames = glfwExtensions;
    createInfo.enabledLayerCount = 0;

    d:创建vulkan实例对象:

    VkResult result = vkCreateInstance(&createInfo, nullptr, &instance);

    e:检查instance是否已经成功创建,我们不需要保存结果,仅仅使用 VK_SUCCESS 值来检测即可:

    if (vkCreateInstance(&createInfo, nullptr, &instance) != VK_SUCCESS) {
        throw std::runtime_error("failed to create instance!");
    }

    f:扩展的详细信息,我们首先需要知道有多少个扩展存在。可以通过将后一个参数置空来获取扩展数量:

    uint32_t extensionCount = 0;
    vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount, nullptr);
    
    std::vector<VkExtensionProperties> extensions(extensionCount);
    
    vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount, extensions.data());
    
    std::cout << "available extensions:" << std::endl;
    
    for (const auto& extension : extensions) {
        std::cout << "\t" << extension.extensionName << std::endl;
    }

    g:正确销毁VkInstance:

    void cleanup() {
        vkDestroyInstance(instance, nullptr);
    
        glfwDestroyWindow(window);
    
        glfwTerminate();
    }

     

     

     

     

     

     

     

     

     

     

    展开全文
  • Vulkan文档

    2018-01-14 13:45:13
    Vulkan文档,最新最全最方便的图形图形编程API,欢迎下载
  • Vulkan GUI

    2020-11-30 14:36:02
    <div><p>This PR aims to add some basic Vulkan functionality. All I want this PR to do at the moment is support Vita3K's gui and provide a decent groundwork for the game renderer. <p><img width=...
  • Vulkan crashes

    2021-01-12 08:55:10
    [ERROR] [Vulkan]: Failed to create Vulkan context. [INFO] [Vulkan]: Detecting screen resolution 320x240. [INFO] [Vulkan]: Using resolution 320x240 [INFO] [Vulkan]: Using RGB565 format. [INFO] [Vulkan]...
  • nanovg vulkan

    2020-12-08 19:46:05
    <div><p>hi, could you please fix your sample for nanovg vulkan? It could be good to add vulkan backend to https://github.com/dalerank/nanogui thanks</p><p>该提问来源于开源项目:nyorain/vpp</p></...
  • Vulkan compatibility

    2020-12-25 18:51:01
    <div><p>It would make sense for this library to support both OpenGL and Vulkan coordinate systems. One difference that comes to mind is that screen coordinates in Vulkan range from 0 to 1 instead of -...
  • VULKAN support

    2021-01-10 14:55:44
    <div><p>Is there any plan for VULKAN support? as far as I know, VULKAN is multi-platform and be used as well for graphics rendering as for computing. It has more granularity, allows to use several ...
  • Vulkan资源包

    2018-10-24 15:34:36
    vulkan资料大礼包,包括1-Vulkan-Tutorial_English.pdf Vulkan® 1.1.88 - A Specification (with all registered Vulkan extensions).pdf Vulkan® 1.1.88 - A Specification.pdf,学习vulkan不二资料
  • vulkan-runtime

    2018-11-07 14:35:15
    vulkan-runtime是window下的vulkan运行时库,是运行vulkan应用程序的依赖
  • Vulkan沙盒-源码

    2021-02-15 16:52:51
    Vulkan沙盒
  • Vulkan CookBook

    2018-08-31 11:26:56
    Vulkan also represents the new approach, a low-level access to the graphics hardware, but unlike the other libraries it is available for everyone on multiple operating systems and hardware platforms...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,692
精华内容 3,476
热门标签
关键字:

vulkan