【发布时间】:2014-05-02 16:52:01
【问题描述】:
假设我在着色器中有一个数组变量,在着色器存储块中声明:
layout(std430, binding = 2) buffer MyBuffer
{
float lotsOfFloats[];
};
还有一个结构:
struct myStruct
{
float f1;
vec3 vf1;
}struct1;
有没有办法使用缓冲区存储块中数组中的值(在本例中为 lotOfFloats 数组)在着色器中“快速”初始化此结构的对象?比如说,在 C++ 中,可以将内存从数组复制到对象:
memcpy(&struct1, &lotsOfFloats[0], sizeof(myStruct) );
或者可以通过赋值将数组值字节复制到对象:
struct1 = *(myStruct*)&lotsOfFloats[0];
GLSL 中是否有类似的方法?例如。将在 GLSL 中使用第二种方式(字节复制分配)吗?
【问题讨论】:
-
你知道你可以在你的 SSB 声明中使用一个大小不一的结构数组,对吧? (例如
myStruct lotsOfStructs [];)。这通常是这种事情的完成方式。请注意对齐 - 如果您交换f1和 @ 987654328@ 它将正确对齐。 -
@Andon,谢谢!这条评论可以算作答案。