我按照 Vulkan-LoaderAndValidationLayers github 上的说明进行操作: https: //github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/blob/master/layers/README.md
我已经构建了图层,将 DLL 复制到可执行文件旁边(出于测试目的,稍后将设置路径),创建了 vk_layer_settings.txt (也在我的可执行文件旁边),并在我的 VK_INSTANCE_LAYERS 环境中设置图层名称。变种
但无论我做什么, vkEnumerateInstanceLayerProperties 返回的数组都不包含任何验证层。
我错过了什么神奇的步骤?这是在 Nvidia 970M 上运行的 Windows 8.1
我使用 Unreal 作为模拟服务器。现在我可以从 Python 客户端连接到它并通过 UDP 传输/接收数据。但是我仍然没有找到一种正确的方法来捕获帧并将其流式传输到 Python 客户端以在 OpenCV 中进行处理。
我试图制作屏幕截图并将其保存到文件中,但这种方式太慢了。
我也尝试渲染到纹理目标,但这对我来说也不是最佳方式,因为我需要渲染 2 次(对于相机和 2d 捕捉器)。
现在我找到了一种访问 Vulkan 帧缓冲区的方法(我在 Linux 上),但我找不到任何文档或示例,以及如何操作。
如何在自定义 C++ 演员中获取原始帧缓冲区字节数组?
我知道着色器中的浮点颜色值范围 [0..1] 映射到 UCHAR 缓冲区中的 [0..255] 范围。
据此,我预计 UCHAR 缓冲区中的每次更改的着色器颜色值的步长为 1/255。
但结果却出人意料地不同。这是前两个步骤:
Shader 中的红色浮点值 -> 读取缓冲区中的 UCHAR 值
0.000000 -> 0
0.002197 -> 0
0.002198 -> 1
0.006102 -> 1
0.006105 -> 2
前两个步长约为 0.002197 和 0.006102,与预期步长 0.00392 和 0.00784 不同。
那么映射公式是什么呢?
根据Vulkan 规范,
以下功能已被删除:
- 默认制服(不在统一块内的统一变量)
例如,GLSL 中禁止以下行为:
layout(set = 0, binding = 0) uniform mat4 projectionMatrix;
Run Code Online (Sandbox Code Playgroud)
相反,似乎鼓励程序员创建一个统一的块:
layout(set = 0, binding = 0) uniform Projection {
mat4 matrix;
} projection;
Run Code Online (Sandbox Code Playgroud)
使用单值制服有时对于较小的应用程序很有用。删除该功能的理由是什么?
我正在尝试了解 SPIR-V 规范,例如了解 for 循环。在 1.6 修订版 2 规范的开头,有以下示例(为了一致性,仅取部分内容)
for (int i = 0; i < 4; ++i)
color *= multiplier;
Run Code Online (Sandbox Code Playgroud)
变成:
%49 = OpLabel
OpLoopMerge %51 %52 None ; structured loop
OpBranch %53
%53 = OpLabel
%54 = OpLoad %16 %48
%56 = OpSLessThan %25 %54 %55 ; i < 4 ?
OpBranchConditional %56 %50 %51 ; body or break
%50 = OpLabel ; body
%58 = OpLoad %7 %57
%59 = OpLoad %7 %31
%60 = OpFMul %7 …Run Code Online (Sandbox Code Playgroud) 我正在将 RGBA PNG 图片加载到 vulkan 中。我在这个过程中没有出现任何错误,但我的着色器向我显示了白色纹理。
我很快发现,如果将采样像素乘以 0.00390625(即 1/256),我就会得到正确的颜色。所以在这个过程中,vulkan 似乎只是将我的 8 位值复制到浮点版本而不进行转换。我缺少什么?
我在 GLSL 中使用组合图像采样器和使用 VK_FORMAT_R8G8B8A8_UINT 格式创建的图像。我不知道在哪里告诉 Vulkan 转换数据?
好的,我们有队列,我们将命令缓冲区提交到队列,我们将渲染通道记录到命令缓冲区,我们将子通道添加到渲染通道。为什么这么复杂。据我所知,我们可以使用子通道来有效地同步我们的命令,并且我们可以一次性将整个队列发送到 GPU。但为什么要使用命令缓冲区和渲染通道。这还不是全部,还有命令池来创建命令缓冲区。为什么我需要多个队列,每个队列有多个命令缓冲区,每个队列有多个渲染通道,每个队列有多个子通道。
命令池对于多线程很有用。好的。所以我可以在我的线程中创建命令缓冲区,为什么我需要两个。如果我可以在子通道中完成所有操作,为什么我需要两个渲染通道,我是否遗漏了一些东西?
需要明确的是,我正在为我的引擎围绕 Vulkan 制作一个包装器或抽象,并试图掌握这些概念。也许这才是真正的问题,我试图在没有足够知识的情况下抽象一切并进行纯粹的 Vulkan 项目,但在我看来,这种方式更容易学习。
我尝试在网上寻找一些解释,但没有任何可以满足我的需要。
我是计算机图形学和游戏开发的新手,想知道什么更容易学习 - Directx 12或Vulkan?
更简单的是我指的是函数名,类名,命名约定,如何设置/启动vulkan项目vs directx 12等.
最近我想知道一个游戏,如果有很多模型,每个模型都需要顶点缓冲区来绘制.如下三个选项,哪一个最有效?
我目前正在用C++构建一个游戏引擎,它使用vulkan进行渲染.在实现地形渲染器时,我达到了硬件限制,maxMemoryAllocationCount限制了分配的内存块数量.我检查了https://vulkan.gpuinfo.org/,看看不同GPU上的这个值有多高.在查看"GeForce GTX 1080 Ti"时,Windows的值为4096,而arch/manjaro的值为4294967296.为什么这些操作系统之间存在差异,何时这应该是硬件限制?
我尝试在 Windows 10 上安装官方 Vulkan SDK。不幸的是,安装程序要求管理员权限,而我显然没有。
尽管如此:到底为什么呢?SDK不只是一堆与库和一些热门示例混合在一起的头文件吗?
我正在寻找一种使用 MinGW 开始使用 Vulkan 的方法。有我可以使用的 .zip 文件吗?某种预编译?或者我至少能够自己编译 Vulkan 吗?
我只是想知道你是否会推荐未来学习OpenGL或等待Vulkan api.我目前正在从learnopengl.com学习OpenGL,并且想知道如果将来是vulkan,我是否应该继续使用它.
2018-03-07,新版API(Vulkan 1.1)发布。
我想知道:
$ /usr/bin/vulkaninfo | head -n 5
===========
VULKAN INFO
===========
Vulkan Instance Version: 1.1.70
WARNING: radv is not a conformant vulkan implementation, testing use only.
Run Code Online (Sandbox Code Playgroud)