Vulkan的API学习
DBBH
成都有合适webgl/webgpu岗位的请私信我
展开
-
OpenGL/Webgl纹理的落后对比Vulkan的高级设计
VK和OGL纹理上传对比原创 2022-09-22 17:57:51 · 460 阅读 · 1 评论 -
vulkan管线学习13
上一章构造了顶点输入的描述,这里就要填充数据了首先要创建一个VkBuffer,需要手动清除然后申请内存需要借助物理设备然后还要找到合适的内存type这里就拿着需要的东西来填申请信息,然后就可以申请了申请过后bind到vertexbuffer,然后操作vertexbuffermemory就可以了利用下面的API,把vertexbuffermemory的内容填上,具体就是把buffer映射到CPU可以操作的地方去,然后填上,再解除映射但是这里说可能原创 2020-12-16 09:59:52 · 118 阅读 · 0 评论 -
vulkan管线学习12
上一个部分已经把东西画出来了,开始做顶点信息处理和UBO处理的学习了这里先顶点这里教程用的例子 前面2个是position后面三个是rgb一个inputbinding描述,具体如下好像可以bind一个数组,所以这里要指明index,stride和OpenGL那个应该一样的,指一个顶点所有属性加起来多长position2个float32color3个float32,这种inputRate区分是不是instance然后这里是attribute的描述,似乎要给每一个属性进.原创 2020-12-16 09:25:40 · 294 阅读 · 0 评论 -
vulkan管线学习11
装好了commandbuffer之后,就是每一帧提交。但是提交这个就牵扯到同步了,在这之前....先修改renderpassrenderpass的subpass要加一个dependency进行指定dst要比src大,VK_SUBPASS_EXTERNAL应该是最终绘制到哪首先是present的内容可能还在vertexShader好像就可以读了,所以要设置一个等画完了才能把内容拿来present然后就是CPU如果提交比GPU处理的快了,就需要同步一下,不然一直堆积任务,会GG。原创 2020-12-13 17:13:14 · 252 阅读 · 0 评论 -
vulkan管线学习10
然后即将开始绘制了这个绘制大概是这样的,创建一个commandbuffer,然后在初始就把你要做的事情记录下来,在while循环的时候submit就行了就相当于一开始你要清楚你要做啥,才好制作这个commandbuffer先创建一个commandpool,这个用来管理commandbuffer创建commandbuffer这个每一个swapchain的image都要一个然后创建好了就开始录制录制一个commandbuffer的步骤1 begincommandb原创 2020-12-09 10:18:07 · 110 阅读 · 0 评论 -
vulkan管线学习9
pipeline配置完了也有了renderpass,renderpass是需要挂在framebuffer的操作swapchain的imageview需要VkFramebuffer,所以这里创建了一个framebuffer数组这里说这个count和attachments是指定了与renderpass的pattachment的绑定关系,应该就是这个图会利用那个colorattachment来输入吧。layer是图片数组,这里用不上。这里要手动删除...原创 2020-12-08 09:49:19 · 145 阅读 · 0 评论 -
vulkan管线学习8
Renderpass介绍说这个是用来指定绘制的时候,有多少颜色缓冲,深度缓冲,多少次采样,还有他们各自的内容是啥样。然后这个是挂在VkFramebuffer的然后由于这个教程这里只需要colorbuffer,所以只创建了一个color attachmentformat这里保持和swapchain一致,第二个好像关于多重采样,这里用的1loadOp和storeOp看起来有点像clear,用来决定你的绘制内容是否保留?模板设置暂时不管这俩布局参数,可以改变图像内存布局原创 2020-12-06 10:55:06 · 142 阅读 · 0 评论 -
vulkan管线学习7
这个图:虽然渲染管线还是这么个样子,但是。。。这个OpenGL的API:glEnable(GL_DEPTH_TEST)好使吧Vulkan里面写很多代码才能控制这个东西,以及这个graphic pipeline要手动一步步建立教程有挺长的四部分 构造了这么多参数。。最后才create出来shader部分Vulkan需要把shader编译成字节码,你可以用hlsl glsl编译出来只要这边用着不报错都行。这块和OpenGL差不多读进来 create一下塞进sh..原创 2020-11-29 18:02:20 · 197 阅读 · 0 评论 -
vulkan管线学习6
swapchain创建完了,不过他是个容器一样的东西,我们要的是动他里面的图片,也就是std::vector<VkImage> swapChainImages。然后教程提到其实可以用下面这种方式拓建这个vector,因为具体创建几个图片可以通过这两API来查询创建。要使用VKImage,需要借助另外一个叫VkImageView的东西教程讲这是一个image的视图,描述了咋个访问这个image以及具体访问image哪一部分,前面应该指的是通道什么的,后面提及可以打乱..原创 2020-11-27 09:33:10 · 142 阅读 · 0 评论 -
vulkan管线学习5
swap chain这里描述swapchain是一个基础设施,功能用来同步即将被呈现在屏幕上的图片们。然后会有显卡不支持prestentation, 例如是服务器或者奇怪的原因,所以要检查是否支持。教程采取的做法就是枚举该设备所有可用extension,然后找到是不是有这个这里多了extension了,于是逻辑设备的createInfo要修改一下这两个属性这里还要检测更多细节。The swap extent is the resolution of the swap原创 2020-11-25 10:01:15 · 241 阅读 · 0 评论 -
vulkan管线学习4
VkSurfaceKHR surface这个貌似算封装了窗口句柄吧 然后不同平台创建窗口不同,怪麻烦。于是 我们借助glfw 创建他void createSurface() { if (glfwCreateWindowSurface(instance, window, nullptr, &surface) != VK_SUCCESS) { throw std::runtime_error("failed to create window surface!")原创 2020-11-24 19:41:30 · 318 阅读 · 0 评论 -
vulkan管线学习3
instance之后,开始选取设备VkPhysicalDevice,教程说要通过instance找到一个支持我们需要的功能的显卡,这里并且指出其实可以同时创建使用多个VkPhysicalDevice。先枚举出物理设备们,然后判断是否适用,由于入门不需要花里胡哨的,这只需要找出一个适用的就可以采纳了。教程还教了一个给设备估分选出最合适的选取方法。。暂且不管吧,往下走。这里教程就提到queue familiesVK里操作都基于提交到队列,但是不同的queue family支持不同的功能,原创 2020-11-18 10:24:03 · 217 阅读 · 0 评论 -
vulkan管线学习2
instance之后要弄一个验证层,这个根据描述是用来调试的,release的时候就不需要他了,所以可以用宏来开关呐 下面是教程获取可用验证层的方法,是同一个API,克洛罗斯API介绍第二个给NULL会返回可用的Layer的数量。不给NULL就要指定一下要几个属性,然后会装到第二个传入参数里返回给你,如果你传入的数量less than可用数量,就应该是按你传入的数量填给你的第二个参数pProperties里,API看起来会返回VK_SUCCESS,你传太大了就返回一个VK_INCOMPLET原创 2020-11-16 20:44:11 · 281 阅读 · 0 评论 -
vulkan管线学习1
安装教程就随便搜,都是大佬https://download.csdn.net/download/qq_35158695/12700029那些安装包可以这里下VK很先进,那早学晚学早晚要学,把他的思想以及流程学好了,然后就可以继续学习做好看的效果了,以及之后webgpu出来,咱们知识迁移不需要太费劲,如果只会webgl/opengl看这个有点费劲。第一个东西是VkInstance这个。我百度翻译了一下vulkan-tutorial的解释,说是这个是你的应用程序和VK库的桥梁,然后用这个顺便向驱原创 2020-11-16 09:58:25 · 215 阅读 · 0 评论