- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在顶点着色器中,当然允许有限数量的uniform storage,据我所知,不同的系统可能会以略微不同的方式实现 GLSL编译代码的条款。我听说过在顶点着色器代码中使用常量而不是写出文字的建议。
例如,以下代码可能会导致可用统一存储空间的减少。 (我不太明白怎么做。)
示例 1:使用文字
vec4 myVector = vec4(1.0, 0.0, 0.0, 1.0);
据我了解,每次使用 1.0
或 0.0
都有可能占用一定数量的统一存储空间。因此,建议将以前的代码变成类似以下的代码:
示例 2:使用常量而不是文字
const float zero = 0.0;
const float one = 1.0;
vec4 myVector = vec4(one, zero, zero, one);
有没有人理解正在发生的事情背后的争论?我对代码没有任何问题,我只是想正确地理解这些东西,这样我以后就不会遇到问题。
我的正式问题如下:专门针对使用OpenGL ES 2.0的iOS平台,写出来的东西是最佳实践使用文字(示例 1)或使用常量(示例 2)。我应该每次都花时间用常量写出东西,还是应该写出文字并仅在顶点着色器无法正确编译时才使用常量?
谢谢!
最佳答案
关于 Kimi 提到在规范中找不到任何内容,The OpenGL® ES Shading Language 的附录 A-7|规范确实包括以下内容:
When calculating the number of uniform variables used, any literal constants present in the shader source after preprocessing are included when calculating the storage requirements. Multiple instances of identical constants should count multiple times.
这可能是OpenGL® ES 2.0 Programming Guide中推荐的来源Kimi 引用。
但是,该规范并未强制执行此限制,并且大概任何实现都可以自由改进它,但我找不到任何关于 iOS GL 驱动程序的方法。
我很好奇,有没有人真正跟进过使用文字重载示例着色器的想法,以试图达到任何潜在的最大统一限制?
(抱歉...我本来打算将此答案发布为对 Kimi 的答案的评论,但还没有达到要求的 50 Rep 点数)。
关于objective-c - 在顶点着色器中声明常量而不是文字。标准做法,还是不必要的严格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13963765/
由于 typescript 现在支持条件类型,我决定进行一些元编程,为 VSCODE intellisense 添加更多 flavor 。但是,虽然使用 A extends B 可以轻松分离其他类型,
我有一个 php var,它在回显时将 JS 函数写入页面的源代码。该函数循环遍历 CSV,因此其中包含以下行: $str="var lines = data.split('\n');"; 目前,当回
我有以下代码: name= "a"; value="b" $.post("ajax.php", {name:value}).... 然而 ajax.php 将收到 name=b 而不是 a=b。 我如
以下情况: var myVehicle = { brand: 'Tesla' }; var isMoving = Symbol(); var currentStatus = Symbol(); myV
我正在为 Python 翻译器编写 JavaScript,“\8”和“\9”给我带来了很多问题。根据文档,像“\8”或“\9”这样的东西是非法的,因为它们不是有效的八进制转义符。 Esprima pa
我有一个简单的 LinearLayout。当我将 android:background 添加到 LinearLayout 时,TextView 不再可见。 我不明白什么?
在尝试获得某种效果时遇到困难: 我有一张图片。我想将鼠标悬停在它上面。它应该变黑并弹出一些文本。 例子^ 执行此操作最简单/最简单的设置是什么?最好只有 HTML 和 CSS 注意:该元素需要在 CS
考虑以下代码: #include void f(const char * str) { str = "java"; } void main (int argc, char * argv[])
我想在 MySQL 中插入一条具有非 ASCII Unicode 字符的记录,但我在一个不允许我轻松键入非 ASCII 字符的终端上。如何在 MySQL 的 SQL 语法中转义 Unicode 文字?
Perl脚本batchReplace.pl可以用来批量替换文件中的文字/代码。可在指定目录中查找指定类型的文件,并递归检查子目录;在输出文件时复制输入文件的目录结构。 [附件]Win32应用程序b
我知道从 flutter 应用程序共享的官方包。 https://pub.dartlang.org/packages/share 共享文本和 url 很容易,但我想共享来自服务器的图像意味着它是 UR
在 Qt 文档中,它说 qreal是一个 Typedef for double unless Qt is configured with the -qreal float option. 这基本上意味
我想让 idris 证明 testMult : mult 3 3 = 9有人居住。 不幸的是,这是键入为 mult (fromInteger 3) (fromInteger 3) = fromInte
如您所知,Apple 为 NSNumber、NSDictionary、NSArray 等类提供了 @literals,因此我们可以通过这种方式创建对象,例如 NSArray *array = @[ob
有没有办法在类型上定义公共(public)文字(C# 中的公共(public) const)?显然 let 类型中的绑定(bind)必须是私有(private)的,并且 Literal 属性不能应用于
为什么下面的语法不能识别 bool 值? 我已经将其与 Java 和 GraphQL 的语法进行了比较,但不明白为什么它不起作用。 给定以下语法,解析如下: foo = null // foo = v
当我需要一个文字来测试一个带有序列的函数时,我注意到我自己的习惯比列表更频繁地使用向量。 IE。 : (map inc [1 2 3]) 但不是: (map inc (list 1 2 3)) 虽然它
是否可以在sqlite中制作类似的东西? FOREIGN KEY(TypeCode, 'ARawValue', IdServeur) REFERENCES OTHERTABLE(TypeCode, T
在我这学期的系统软件类(class)中,我们正在学习汇编程序和其他系统软件。在阅读整个类(class)时,我遇到了LITERALS主题。 对文字和立即操作数进行了比较,发现它们之间的唯一区别是文字不被
我正在使用命令行语法编写一个 gstreamer 管道来发送视频流,并想用它发送数据。我认为可行的一种解决方案是将数据作为字幕文件发送。 我可以使用以下管道通过 rtp 多路复用视频和字幕文件: gs
我是一名优秀的程序员,十分优秀!