首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenGL ES 2.0跨出性能

OpenGL ES 2.0跨出性能
EN

Stack Overflow用户
提问于 2014-04-19 17:16:15
回答 1查看 339关注 0票数 0

结构的大小(包含顶点数据)是否会影响性能?

示例:

代码语言:javascript
复制
struct VertexData1 {
     float x, y, z;
}

struct VertexData1 {
     float x, y, z;
     float variable1, variable2; //any amount of variables
}

现在,在以下几个方面是否存在性能差异:

代码语言:javascript
复制
struct VertexData1 d1;
glVertexAttribPointer(index, 3, GL_FLOAT, GL_FALSE, sizeof(struct VertexData1), &d1.x);

vs

代码语言:javascript
复制
struct VertexData2 d2;
glVertexAttribPointer(index, 3, GL_FLOAT, GL_FALSE, sizeof(struct VertexData2), &d2.x);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-19 18:00:21

是的,因为它将影响后续引用的总体位置(即,它们将得到较少的本地引用),因此会增加缓存丢失的数量,尤其是在顶点数量增加时。

在您的例子中,您没有将数组存储在GPU上,但是如果您对性能感兴趣,您应该这样做。OpenGL无法自动缓存这些内容,因为C中没有记账功能,可以让它判断自上次调用glVertexAttribPointer以来数组中的任何内容是否发生了变化。

当您进入GPU时,安排好缓存变得更加重要:GPU高度并行,但内存不是。因此,缓存丢失都落在共享资源上,因此多个同时丢失复合性能问题。

因此,您通常想要的是将与顶点相关的每一段数据放在一个块(位置、法线、切线、所有纹理坐标、光谱等)中,每个数据存储在绝对最低精度的容器中。如果你使用非常小的GPU,比如那些通常用于OpenGL ES的GPU,那么尽可能多地隐式并重新计算它(例如存储两个分量的法线,并根据法线作为单位长度存储在所有引擎中的99.9999% )的约束条件下,在着色器中计算出第三个GPU也更便宜。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23173068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档