我创建了一个着色器存储缓冲区对象,为我的顶点着色器提供信息。它绑定到包含单个结构的缓冲区。但有一个问题。我保留在这个结构中的数据不是一个简单的数组,它是一个std::vector
。给OpenGL的C++容器?
下面是结构:
typedef struct {
glm::mat4 modelMatrix;
} entityInfo;
typedef struct {
std::vector<entityInfo> entityInfoBuffer;
} shaderData;
MAT4只是一个简单的4×4矩阵浮动。
如果我把这个给OpenGL,传输给GPU的数据将只是一堆关于矩阵/向量的指针和信息,而不是它们中的数据。
一个解决办法是只对OpenGL创建一个结构:
typedef struct {
float* modelMatrix;
} SSBOentityInfo;
typedef struct {
SSBOentityInfo* entityInfoBuffer;
} SSBOshaderData;
但我将不得不复制对应容器的数据指针eeeeevery。
有没有更好的方法来做到这一点?
难道你不想只发送'entityInfoBuffer'的内容到GPU?您不希望将CPU指针复制到GPU,它们对GPU没有任何意义(您可能会复制随机数字)。 – immibis
我认为,在使用着色器存储缓冲区对象时,必须使用结构?我错了 ?这将意味着我将不得不将'entityInfoBuffer.data()'设置为SSBOshaderData' entityInfoBuffer'?此外,OpenGL将只能读取'&mat4 [0] [0]'。 – Talesseed
@Talesseed:“*你必须使用结构?*”为什么?数据是数据,内存是内存,缓冲对象是缓冲对象。 –