gpt4 book ai didi

opengl - 打包布局类型的 GLSL 优化

转载 作者:行者123 更新时间:2023-12-04 05:06:35 24 4
gpt4 key购买 nike

我正在尝试使用嵌套结构模拟 GLSL 中的多态性之类的东西。

struct Primitve{
Sphere s;
Plane p;
Triangle t;
int type;
};

整数类型指定了这个原语究竟是什么。通过这种方式,我可以将所有基元放在一个数组中。缺点之一是浪费内存。

所以我的问题是关于“打包”布局类型。
当我使用这种类型创建着色器存储缓冲区时
layout(packed) buffer PrimitiveBuffer{
Primitive primitives[];
};

是否会通过不为根本不使用的成员分配数据来优化此数据块?维基说关于打包布局:“此外,如果块的成员被实现发现不会影响着色器的结果,则可以对其进行优化。”

由于对齐限制,我是否正确理解或仅与划桨有关?

最佳答案

编译器可以优化元素吗?是的。会吗?仅当它可以静态确定它们未使用时。

考虑这个函数:

void ProcessPrimitive(int index)
{
if(primitives[index].type == 0)
{
primitives[index].s ...
}
else if(primitives[index].type == 1)
{
primitives[index].p ...
}
else
{
primitives[index].t ...
}
}

编译器怎么知道,对于一个特定的索引, type 是什么?场将是?它怎么知道一个特定的索引将是一个 Sphere 或其他什么?它不能。因此,它无法优化任何东西。

如果你想节省空间,你将不得不自己实现数据转换。所以你必须在你的 Primitive 中存储通用的“浮点数”信息,可以根据类型字段将其转换为 Sphere/etc。

关于opengl - 打包布局类型的 GLSL 优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15464609/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com