- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的理解是glBindAttribLocation
允许您自定义设置属性的句柄(在链接着色器程序之前),您可以稍后在使用 glVertexAttribPointer
进行渲染时使用该句柄.
但是您不必使用它,而可能只是依靠 OpenGL 分配它在其无限智慧中选择的任何句柄。但是,您需要使用 glGetAttribLocation
查询 OpenGL 以找出该句柄。在使用 glVertexAttribPointer
渲染之前的某个时间点.
现在你可以使用 glGetAttribLocation
每次渲染时,这似乎很浪费,因为您可以使用 glGetAttribLocation
构建程序后一次,然后存储句柄。
所以本质上,你可以使用 glBindAttribLocation
来存储这个句柄。或使用 glGetAttribLocation
那么在性能方面有什么区别吗?两者之间的优缺点是什么?
最佳答案
我不能说直接的性能差异,但无论如何它应该是无关紧要的,因为无论是否使用 glBindAttribLocation
或 glGetAttribLocation
,无论如何,您都是在初始化时执行此操作(即使调用 glGetAttribLocation
也不应该有那么大的伤害)。
但是显式 glBindAttribLocation
的主要区别和优势让 GL 决定的是,它允许您建立自己的属性语义并使它们在 中保持一致。每一个着色器。
假设您有一大堆对象和一大堆着色器。但是每个着色器都有一些位置属性的概念(和法线,颜色,...),同样每个对象都有位置,法线的属性数据,...现在有了glBindAttribLocation
您可以将您的位置属性绑定(bind)到每个不同着色器中的位置 0。因此,当使用不同的着色器绘制对象时,它们可以使用单一顶点格式(即,您如何调用 glVertexAttribPointer
用于各个属性,以及各个启用调用)。
另一方面glGetAttribLocation
不能保证哪些属性得到哪些索引(也许一个着色器有一些额外的属性,编译器认为这是对它们重新排序的好方法,谁知道呢)。因此,在这种情况下,每个对象 都有不同的顶点格式(glVertexAttribPointer
调用)和 每个着色器。
这在使用顶点数组对象(封装所有属性状态,尤其是 glVertexAttribPointer
和 glEnableVertexAttribArray
调用)时更为重要。在这种情况下,您通常不需要(也不想)调用 glVertexAttribPointer
每次使用另一个着色器绘制对象时。
所以底线是,始终使用 glBindAttribLocation
,充其量(在大型应用程序中)它可以为您节省许多对象和着色器管理问题以及许多不必要的glVertexAttribPointer
调用每一帧(这可能会提高性能),并且至少(在非常小的应用程序中)这是一种很好的做法,可以让您保持开放和灵活的扩展。附带说明一下,在桌面 GL 3+(或使用 ARB_explicit_attrib_location 扩展)中,您甚至可以直接在着色器中分配属性位置,而无需任何 API 调用。
关于graphics - 使用 glBindAttribLocation 会提高性能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15784266/
我正在寻找一种方法来创建根据价格选择我的产品的过滤器(选择下拉菜单)。 我知道这样的查询是完全可能的: SELECT * FROM products ORDER BY price ASC SELECT
函数参数中或显示尺寸时(高度,宽度)的顺序是否有约定? 最佳答案 我不知道大量的语言,但我使用过的语言(宽度,高度)。它更适合沿着 (x, y) 坐标线。 关于language-agnostic -
在我的表单中,我让用户输入房间的长度高度和宽度以获得 m2、m3 和瓦特的计算值。但是用户也应该能够直接输入 height 和 m2 来获取值。我尝试了很多语法,但 if else 不能正常工作。我知
我在 Elasticsearch 中创建了一个索引,看起来像 {"amazingdocs":{"aliases":{},"mappings":{"properties":{"Adj Close":{"
我有以下功能,我需要清除数据库中的所有图片列并移动到文件系统。当我一次性完成这一切时,内存太多并且会崩溃。我切换到递归函数并执行 20 次写入和批量操作。 我需要为大约 6 个表执行此操作。我的 Re
我正在编写一个函数来计算 PI 的值,并将其作为 double 值返回。到目前为止,一切都很好。但是一旦函数到达小数点后14位,它就不能再保存了。我假设这是因为 double 有限。我应该怎么做才能继
2020年是中国CDN行业从98年诞生到今天快速发展的第二十四年,相关数据显示,全国感知网速持续上扬,达到了3.29兆/秒,标志着在宽带中国的政策指导下,中国的网速水平正在大步赶上世界发达国家的水平
在 aerospike 集合中,我们有四个 bin userId、adId、timestamp、eventype,主键是 userId:timestamp。在 userId 上创建二级索引以获取特定用
$('#container').highcharts('Map', { title : { text : 'Highmaps basic demo'
有没有办法显示自定义宽度/高度的YouTube视频? 最佳答案 在YouTube网站上的this link中: You can resize the player by editing the obj
我使用 Highcharts ,我想在 Highcharts 状态下悬停时制作动态不同的颜色。 正如你可以看到不同的颜色,这就是我做的 var usMapChart , data = [] ; va
在所有节点上运行 tpstats 后。我看到很多节点都有大量的 ALL TIME BLOCKED NTR。我们有一个 4 节点集群,NTR ALL TIME BLOCKED 的值为: 节点 1:239
我发现 APC 上存在大量碎片 (>80%),但实际上性能似乎相当不错。我有 read another post这建议在 wordpress/w3tc 中禁用对象缓存,但我想知道减少碎片是否比首先缓存
对于我的脚本类(class),我们必须制作更高/更低的游戏。到目前为止,这是我的代码: import random seedVal = int(input("What seed should be u
我发现 APC 上存在大量碎片 (>80%),但实际上性能似乎相当不错。我有 read another post这建议在 wordpress/w3tc 中禁用对象缓存,但我想知道减少碎片是否比首先缓存
对于我的脚本类(class),我们必须制作更高/更低的游戏。到目前为止,这是我的代码: import random seedVal = int(input("What seed should be u
我已经 seen >2 字节的 unicode 代码点,如 U+10000 可以成对编写,如 \uD800\uDC00。它们似乎以半字节 d 开头,但我只注意到了这一点。 这个 split Actio
有人可以帮我理解为什么我的饼图百分比计算不正确吗?看截图: 根据我的计算,如 RHS 上所示,支出百分比应为 24.73%。传递给 Highcharts 的值如下:- 花费:204827099.36-
我阅读了有关该问题的所有答案,但我还没有找到任何解决方案。 我有一个应用程序,由我的 api 服务器提供。 Wildfly 8.1 和 Mysql 5.6。当查看时间到来时(Wildfly 服务器连接
我正在用选定的项目创建圆形导航。当用户单击任何项目时,它将移动到定义的特定点。一切都很好,除了当你继续点击项目时,当动画表现不同并且项目在 360 度圆中移动并且它被重置直到你重复场景时,我希望它
我是一名优秀的程序员,十分优秀!