跨步 Memset
使用 OpenGL,很多时候需要在数据上取得进展才能提高效率。例如,内存结构将是顶点-颜色-正常-顶点-颜色-正常..等等。
是否有任何可行的选择可以更改,例如,仅更改具有某种 memset 变体的内存的颜色部分(即,不使用循环)。
也带来了一个问题,是否存在循环内存集之类的东西?例如,在每个由四个浮点组成的颜色数组中,将它们全部设置为特定颜色。
With OpenGL, there's a lot of times where putting strides on the data is necessary for better efficiency. for example, the memory structure would be vertex-color-normal-vertex-color-normal.. etc.
Is there any viable option for changing, say, only the color section of a memory with some kind of memset variant (that is, not using a loop).
Also brings to question, is there such thing as a looping memset? For example, in an array of colors made of four floats each, set all of them to a particular color.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
只需使用一个循环即可。 memset 没有什么神奇之处,在内部它只是使用一个循环,如果与 0 一起使用,它可能在相同的编译器上进行稍微优化以一次清除 64 位,但它不会在单个指令中设置内存块
Just use a loop. There is nothing magical about memset, internally it is just using a loop, it may on same compilers be slightly optimized to clear 64bits at a time if used with 0, but it doesn't set a block of memory in a single instruction
我只想循环。 memset() 做了一些巧妙的小优化,以便每次迭代写入多个字节,因此您可以查看 memset() 本身是如何工作的,并看看这些类型的优化是否适用于您的代码。但最终,这只是一个循环。
这是 memset() 源代码 - 非常可读,尽管您必须挖掘所有 typedef 和宏才能准确了解优化是如何发生的。
I would just go with a loop. memset() does some neat little optimizations to write multiple bytes per iteration, so you might look at how memset() itself is working and see if those kinds of optimizations apply to your code. But in the end, it's just a loop.
Here is the memset() source code - pretty readable, though you'll have to dig up all of the typedefs and macros to see exactly how the optimization is happening.