我一直在尝试使用以下代码来创建无绑定(bind)纹理句柄的全局列表,该列表使用UBO发送到GPU。

struct Material
{
    sampler2D diff;
    sampler2D spec;
    sampler2D norm;

};


layout(std140, binding = 2) uniform Materials
{
    Material materials[64];
};

但是,我认为我在c++中填写了错误的缓冲区,没有考虑正确的偏移量等。我似乎找不到任何关于std140布局如何处理sampler2D的信息。我应该怎么做?我需要考虑哪些补偿?

最佳答案

在这方面,手柄没有什么特别的。该标准说:



就“标量”而言,采样器实际上是64位整数。因此,这些成员的基本对齐方式是64位整数。但这并不是真正相关的,因为在std140中,结构的对齐方式总是四舍五入为vec4的大小。这样该结构将占用32个字节。

08-16 13:21