防止片段着色器中的循环展开

2024-02-23

我正在使用最新版本的 Chrome(和 Firefox)为 WebGL(GLSL ES 1.0)编写一个片段着色器,并且编写了一个迭代算法。

首先,我发现循环的长度是非常有限的(文档说它必须在编译时是可猜测的,这意味着它必须是一个常量或非常接近)。

另外,我必须写一个(for,因为它是唯一一个must根据标准实现)循环可能很长,但几乎每次都会在结束之前中断。

现在,我注意到,如果设置更高的最大数量,着色器的编译和链接会花费更多时间。因此,除非我错了,否则编译器确实会展开循环。

我不确定是否可以做任何事情,但我尝试了一些事情,编译器似乎也内联函数,即使在循环中调用时也是如此。

我觉得着色器花费一分钟来编译大约一百次循环迭代是不正常的。或者我做错了事?对于 GPU 来说,片段着色器中的一百次迭代是否太多了?因为编译后似乎运行得很好。


这是 GLSL 不幸的现实之一。如果我们可以进行离线编译并以字节码发送,或者如果我们能够在编译时指定标志等,那就太好了,但这并不是规范的工作方式。您完全受驱动程序制造商的支配。如果 NVIDIA/ATI 认为循环展开对您有好处,那么您的循环就会展开。

不过,我确实质疑您正在做的事情需要如此多的循环。着色器并不是进行超级复杂循环或分支计算的正确位置。您肯定会因此而受到性能影响。如果您不担心实时性能,那么程序开始时的大量编译命中也许并没有那么糟糕。如果您担心应用程序的渲染速度,那么您可能需要重新评估着色器的复杂性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

防止片段着色器中的循环展开 的相关文章

  • 按广度优先顺序列出目录所有内容导致效率低下

    我编写了一个 Haskell 模块来按广度优先顺序列出目录的所有内容 下面是源代码 module DirElements dirElem where import System Directory getDirectoryContents
  • GLSL - 计算表面法线

    我有一个用 GLSL 编写的简单顶点着色器 我想知道是否有人可以帮助我计算表面的法线 我正在 升级 一个平面 所以当前的灯光模型看起来 很奇怪 这是我当前的代码 varying vec4 oColor varying vec3 oEyeNo
  • Powershell/PowerCLI 循环、超时和退出

    以下是场景 我通过 Powershell PowerCLI VMwares Powershell 模块 远程启动虚拟机 一旦虚拟机启动 我将针对虚拟机运行一系列 cmdlet 目前我有这段代码 Start VM my VM Name run
  • 如何测试具有多个输入调用的循环?

    我正在尝试测试一个依赖多个用户输入来返回某个值的函数 我已经在这里寻找了多个答案 但没有一个能够解决我的问题 我看到了参数化 模拟和猴子补丁的东西 但没有任何帮助 我认为很大程度上是因为我没有清楚地理解正在做的事情背后的概念 并且我无法适应
  • GridSearchCV:每次函数完成循环时打印一些表达式

    假设你有一些功能function在Python中通过循环工作 例如 它可以是一个计算某个数学表达式的函数 例如x 2 对于数组中的所有元素 例如 1 2 100 显然这是一个玩具示例 是否可以编写这样的代码 每次function经过一个循环
  • 如何在 for 循环中跳过一些迭代

    在 python 中 我通常简单地循环遍历范围 for i in range 100 do something 但现在我想跳过循环中的几个步骤 更具体地说 我想要类似的东西continue 10 这样它就会跳过整个循环并将计数器增加 10
  • 表、TR各2个循环、PHP、HTML

    我有一个 html 表 我使用一些循环来获取一些数据 该数据以这种方式显示 tr td Data td tr next loop 但我不希望它每 2 个甚至 3 个循环关闭表行 tr 所以数据可能如下所示 tr td Data td td
  • 如何将点光源转换为卵形/椭圆形?

    我希望通过具有不同 x 和 y 值的 vec2 半径将当前的圆形光变成椭圆形 有没有办法根据我当前在片段着色器中的代码来做到这一点 uniform struct Light vec4 colour vec3 position vec2 ra
  • 带有 For 循环的多维数组 VBA

    尝试检查第一列中的值 即多维数组中的列 如果它匹配 则对另一列中与该行匹配的值进行排序 我认为我做错了 但这是我第一次搞乱多维数组 我是否需要在每个 for 循环中使用 UBound 和 LBound 来告诉它要查看哪一列 除了当前问题的答
  • 两个非嵌套循环的大 O 表示法

    对于两个非嵌套的 for 循环 大 O 表示法是什么 Example for int i 0 i
  • 上传统一块的正确顺序是什么?

    在示例页面中https www lighthouse3d com tutorials glsl tutorial uniform b locks https www lighthouse3d com tutorials glsl tutor
  • 为什么 .each 在我的 Rails 视图中完成后会重复数组? [复制]

    这个问题在这里已经有答案了 在我的 Rails 视图页面中 我有以下循环 它应该循环遍历我的 tag list 数组并打印每个标签 由于某种原因 它在打印每个单独的标签后会重复该数组 例如 这个数组有两个元素 ruby python 每个方
  • 在 while 循环之外使用变量(作用域)

    关于 PHP 范围的小问题 我似乎无法在 while 循环之外调用变量 report 我尝试过各种事情 包括return 这不起作用 这里唯一起作用的两个函数是如果我echo变量 report在循环内 或者如果我print它 我不想这样做
  • 三-mtl-loader 错误:THREE.MeshPhongMaterial:.shading 已被删除 -> 对象不可见

    昨天我问了这个问题 未捕获的类型错误 THREE MTLLoader 不是构造函数 2 0 https stackoverflow com questions 47741644 uncaught typeerror three mtlloa
  • GL_CULL_FACE使所有对象消失

    我正在尝试在 openGL3 3 中创建一些简单的多边形 我有两种类型的对象 具有以下属性 对象 1 10 个顶点 按顺序在下面列出 存储在GL ARRAY BUFFER并使用GL TRIANGLE FAN v x y z w v 0 0
  • Python:使类可迭代

    我继承了一个包含许多大型类的项目 这些类仅由类对象 整数 字符串等 组成 我希望能够检查属性是否存在 而无需手动定义属性列表 是否可以制作一条蟒蛇classiterable 本身使用标准语法 也就是说 我希望能够使用迭代所有类的属性for
  • 使用Jquery(或js)在html表格上循环遍历列的单元格(不是行的单元格)?

    使用 jQuery 循环遍历单元格或行很简单 但循环遍历列的单元格并不简单 for cells of rows I will do this table tr each function index elem loop through ce
  • 非法使用break语句; javascript

    当这个变量达到一定数量时 我希望循环停止 但我不断收到错误 未捕获的语法错误 非法的中断语句 function loop if isPlaying jet1 draw drawAllEnemies requestAnimFrame loop
  • matlab中无限while嵌套在for循环中

    我想做一个while循环 嵌套在for在 Matlab 中循环以查找数据中不同对之间的距离 我的数据具有以下形式 ID lon lat time 1 33 56 40 89 803 2 32 45 41 03 803 3 35 78 39
  • 如何制作一个 bash 脚本来同时创建 40 个程序实例?

    我是新来的bash and Linux 我编写了一个程序 我想创建多个同时实例 现在 我通过打开 10 个新终端 然后运行该程序 10 次 我运行的命令是php home calculatedata php 使用 bash 脚本执行此操作的

随机推荐

  • 使用 JavaScript 更改 SharePoint 列表的权限

    我有一个创建列表的应用程序 我希望应用程序也将列表权限设置为仅允许管理员对列表进行更改 我知道如何隐藏列表 但我知道这不会阻止聪明的用户输入列表的 URL 并进行修改 我没有看到使用 JavaScript 更改列表权限的方法 我可以使用的列
  • 如何在 Silverlight 应用程序中显示容器的 Azure blob 列表?

    如何在 Silverlight 应用程序中显示容器的 Azure blob 列表 我知道如何在常规 Net 中执行此操作 但我需要它在银光中 我可以上传 但我想要显示已上传内容的列表 对于 Silverlight 来说是这样的 CloudS
  • 如何修复 SVN 导入行结尾错误?

    我必须导入一个巨大的 SVN 存储库 并将其从一台服务器传输到另一台服务器 所以我从旧服务器导出它 svnadmin dump gt archive svn 并将其导入新的 svnadmin load lt archive svn 在导入过
  • 多态模式匹配导致类型不明确

    灵感来自无法匹配具有约束的多态元组 https stackoverflow com questions 57137421 cannot match on polymorphic tuples with constraints 并基于随后的c
  • AppFabric 1.0错误服务器集合不能为空

    当我运行简单的程序时 出现以下错误Windows Server 应用程序结构 1 0演示控制台应用程序 ErrorCode
  • Marshmallow 上本机 WebView 中的 Instagram 链接

    最近我注意到当你尝试调用时会出现一个非常奇怪的错误https www instragram com https www instagram com 当您的智能手机运行时在网络视图中安卓 6 棉花糖 问题是 屏幕始终保持空白 只有中间那个小
  • 在 Wagtail 中创建可重用字段集的方法?

    我正在评估 Wagtail 看看是否能在我的公司中找到它与 Wordpress 和 Drupal 一起的位置 到目前为止 我认为它很有趣并且非常喜欢其中的很多内容 但是有一件事我真的很喜欢 但找不到方法来实现 我的商店使用模式库 原子设计
  • 在 Virtual Box 中调试来宾操作系统的工具

    我只是交叉发布了我在 virtualbox org 上提出的相同问题 如果不违反任何规则 我很乐意了解更多相关信息 因为 stackoverflow 承诺会更加动态 你好 我做了一些搜索 但找不到任何工具可以从虚拟盒中的早期启动中调试来宾系
  • 有没有办法向 ADO.NET 实体框架中的关联添加额外的字段?

    我希望能够对多对多关系进行建模 其中包含有关该关系的额外详细信息 例如 Person int id String name Project int id String name ProjectPerson Person id Project
  • 使用 .NET 的稳定 RSS 阅读器

    我一直在寻找一个稳定的 NET RSS Atom 库 最好是开源的 比如 Adob e 创建的 AS3 Syndicate Library 我想在我的基于 NET 的网站中集成 RSS 源 另外 是否有适用于同一个 RSS 提要阅读器的 J
  • 如何在 Gradle 中查找/删除未使用的依赖项

    我想在我的项目中找到未使用的依赖项 Gradle 中有类似 Maven 的功能吗 Kotlin 用户更新 2021 年 12 月 17 日 检测 Kotlin 项目中缺失或多余的构建依赖项 版本 1 0 9 最新 我为 Kotlin 用户添
  • .NET WinForms 中与 Qt 的表单布局最接近的等效项是什么?

    与 Qt 最接近的等效项是什么QFormLayout在 NET WinForms 中 TableLayoutPanel 将由我决定
  • WooCommerce:删除产品写入面板选项卡

    我正在使用 WooCommerce 我想隐藏后端的 链接产品 选项卡 我找到了一个添加选项卡的钩子 woocommerce product write panel tabs 但我不确定是否也可以用这个钩子隐藏某些选项卡 谢谢你的帮助 所以我
  • RestSharp.NetCore 中的 ExecuteAsyncPost 示例

    我正在使用 RestSharp NetCore 包 并且需要调用 ExecuteAsyncPost 方法 我正在努力理解回调参数 var client new RestClient url request AddParameter appl
  • 代表们——他们到底是什么?

    有人能用一些现实生活流程的类比来解释它们吗 比如经营一支棒球队 一家咖啡店或一家汽车修理店 任何有意义的事情 就像我们甚至不要谈论代码 语法或编程 我看过很多这样的帖子 但没有一个真正适合我 我们可以先谈谈概念吗 就像我什至不明白为什么我们
  • Java do-while 循环不起作用

    我希望我的程序不断询问问题 直到它得到可以使用的响应 特别是从 0 到 20 的数字 我在这个类上还有很多其他内容 所以这里有一个小摘录 其中 do while 是 我已经为所有变量命名了 public static void main S
  • 如何在 iPhone 中检测来自麦克风而不是语音的打击?

    我正在使用此代码来检测打击 但我受不了打击 我有声音 NSURL url NSURL fileURLWithPath dev null NSDictionary settings NSDictionary dictionaryWithObj
  • *&++i 是否会导致 C++03 中的未定义行为?

    In 另一个答案 https stackoverflow com a 17400329 1505939据说在 C 11 之前 其中i is an int 然后使用表达式 i 导致未定义的行为 这是真的 关于另一个答案 评论中有一些讨论 但似
  • 为什么4.2.0版本没有maven Resteasy-jaxrs包?

    我在 Maven 中看到的最后一个版本resteasy jaxrs是 3 8 1 当尝试升级时resteasy client到 4 2 0 存在依赖关系resteasy jaxrs 4 2 0 org jboss resteasy plug
  • 防止片段着色器中的循环展开

    我正在使用最新版本的 Chrome 和 Firefox 为 WebGL GLSL ES 1 0 编写一个片段着色器 并且编写了一个迭代算法 首先 我发现循环的长度是非常有限的 文档说它必须在编译时是可猜测的 这意味着它必须是一个常量或非常接