- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用来自 github 的 Jonno Robson 的 Vulkan 代码库:Vulkan-Terrain-Generator作为更好地理解 Vulkan 的指南和/或学习引用。我对源代码本身没有任何问题,但我的问题或疑虑与将 GLSL 着色器代码编译成 Spir V 代码有关。我是 SpirV 的编译器和工具包的新手。我尝试同时使用:glslangValidator.exe 和 glslc.exe 将着色器文件转换为 Spir V 文件。
在 Jonno 的代码库中,他将每个 GLSL 着色器文件转换为相应的 spirv 文件。我尝试使用他在他的批处理文件中使用的标志选项,唯一的区别是我用我自己的目录替换了指向他的 glslangValidator.exe 的目录。
我正在尝试实现相同的效果,它会将批处理文件目录中的所有着色器文件从 GLSL 编译到 Spir V,并在其中附加 .spv
到每个新的 SpirV 文件的末尾,在将其从 GLSL 转换为受人尊敬的 Spir V 字节代码后,它将在该目录中生成。
这是我的批处理文件的样子:
编译.bat
C:\VulkanSDK\Bin\glslangValidator.exe -V %1 -o %1.spv
pause
但是在我双击批处理文件后它对我不起作用。它会打开并运行,但不会生成预期的 shader_filename.vert.spv
... shader_filename.frag.spv
文件。
我不知道他们是在什么平台上做的,但我运行的是 Windows 7,我不知道这是否会对批处理命令中提供的命令参数或标志产生影响。我不知道他们是否使用了 Vulkan SDK 中的任何其他工具包或一些外部库或工具或其他什么。
我希望能够使用该批处理文件执行的操作是使用最简单的批处理命令将所有着色器文件转换为适当的 Spir V 文件。我不想为每个着色器文件一遍又一遍地编写相同的命令,因为此目录中有 20 多个着色器。
我如何才能实现这一点,或者 glslangValidator 或 glslc 生成所需 SpirV 文件的正确命令参数是什么?
我已阅读此处找到的文档:SPIR-V Toolchain但我仍然不确定如何正确生成所需的批处理文件。
最佳答案
您需要确保为每个文件提供一个输入名称,该示例纯粹使用了 %1,然后作为参数从命令行发出,例如:
mybatch.bat inputfile.frag
如果您打算双击它,我们需要更改它。它将允许您遍历每个要对其执行此操作的文件:
@echo off
for %%i in (*.vert *.frag) do "C:\VulkanSDK\Bin\glslangValidator.exe" -V "%%~i" -o "%%~i.spv"
它所做的是获取每个 .vert
和 .frag
并将其分配给元变量 %%i
然后我们只需发出命令对于每个文件,直到我们循环遍历每个文件。
您可以阅读有关元变量的更多信息,以及如何在 cmd.exe
执行 for/?
时扩展它们
这里是摘录。
您现在可以使用以下可选语法:
%~I - expands %I removing any surrounding quotes (")
%~fI - expands %I to a fully qualified path name
%~dI - expands %I to a drive letter only
%~pI - expands %I to a path only
%~nI - expands %I to a file name only
%~xI - expands %I to a file extension only
%~sI - expanded path contains short names only
%~aI - expands %I to file attributes of file
%~tI - expands %I to date/time of file
%~zI - expands %I to size of file
%~$PATH:I - searches the directories listed in the PATH
environment variable and expands %I to the
fully qualified name of the first one found.
If the environment variable name is not
defined or the file is not found by the
search, then this modifier expands to the
empty string
修饰符可以组合以获得复合结果:
%~dpI - expands %I to a drive letter and path only
%~nxI - expands %I to a file name and extension only
%~fsI - expands %I to a full path name with short names only
%~dp$PATH:I - searches the directories listed in the PATH
environment variable for %I and expands to the
drive letter and path of the first one found.
%~ftzaI - expands %I to a DIR like output line
关于batch-file - 将 GLSL 编译为相应的 Spir V,以便在 Vulkan 应用程序中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58004458/
我有一个 k*n矩阵 X 和 k*k矩阵A。对于X的每一列,我想计算标量 X[:, i].T.dot(A).dot(X[:, i]) (或者,数学上, Xi' * A * Xi )。 目前,我有一个
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我是 VueJS 的新手。我已经使用 vuetify/webpack-ssr 模板创建了一个项目,现在我想创建一个登录页面,但是没有显示表单,控制台给了我以下信息: [Vue warn]: Unkno
我尝试将 value 插入到 C++ vector v 之前的第 i 元素(或元素 (i-1) 之后) )。代码很简单 v.insert(v.begin() + i, value); 我确信当 i 介
我需要显示使用合并排序算法排序的 vector 。然而,当我使用 v.begin() 时,我的 friend 使用 v.data() 来传递 vector 。他的代码运行良好,而我的却不行。请解释。
这是我的命令(url1、url2、url3、url4 是占位符): ffmpeg -i url1 -i url2 -i url3 -i url4 -filter_complex “[1:v:0] [1
我以前用过Vue,我知道怎么用v-for渲染元素序列,v-if或v-show有条件地显示元素,并且 v-model例如,控制段落的内容。 但现在我需要对 DOM 进行更精细的控制: 我有一个range
我正在学习所有权和借用。 borrow1 和borrow2 的区别在于在borrow2 打印时使用了&: fn borrow1(v: &Vec) { println!("{}", &v[10]
我找不到一种方法来选择不同的选项来渲染 v-for 中的文本。是否有可能或者我是否需要以不同的方式构建逻辑来执行类似于下面的代码的操作? // i
Iterable 的三个直接子类型是 Map , Seq , 和 Set .除了性能问题之外,似乎还有一个 Seq是从整数到值的映射,以及 Set是从值到 bool 值的映射(如果值在集合中,则为 t
我想应用一个计算方法,如果键存在则增加值,否则将 1。有 Map map = new HashMap<>(); 我不明白为什么 for (int i = 0; i v != null ? v++ :
标准(IEEE 754/C)是否保证以下代码断言永远不会失败? int main() { for ( /* all possible float / double values */ )
代码由Vue语言编写,使用Element-ui框架, 如果一个对象包含某些内容,则会显示该内容,如果不包含则禁用菜单按钮。 输出应该是这样的: a、b(禁用)、c、d、e 但我的是这样的: a、a(禁
如果我这样做: {{ morevalue }} {{ value }} v-else 中的跨度也会在第二个 V-FOR 上循环,即使它上面没有任何 v-for,为什么? 这是
如果我这样做: {{ morevalue }} {{ value }} v-else 中的跨度也会在第二个 V-FOR 上循环,即使它上面没有任何 v-for,为什么? 这是
我将 Vue.js 与 Vuetify 一起使用,我正在尝试使用 v-data-table 从后端加载菜单列表并使用 对其设置一些权限v-switches 但我在尝试 v-model 数组时遇到问题:
我在 Java 的流式操作中努力维护我想要的数据结构,这很可能是由于缺乏正确的理解和实践。 public class Main { public static void main(String
我正在尝试为匹配中的每个匹配呈现一些 HTML,但是,我不太确定 实际上是正确的。 更具体地说,我不确定我是否可以使用 v-bind:match='match'在与循环相同的元素上 v-for='ma
所以我想知道为什么这个 v-if 和 v-else 语句不起作用,为什么我要以不同的方式解决它。 代码如下 Required: Select a Workflow {{ isChain ?
我有一个 VueJS 组件 ,我在同一个模板中使用了两次来显示两组不同的数据。每个都显示在自己的 使用 v-if 切换的容器在导航选项卡上。 似乎这些组件被实例化为同一个实例。我调用 console
我是一名优秀的程序员,十分优秀!