GLSL 变换反馈返回数组与矢量
GLSL Transform Feedback return Array vs Vector
当我显式声明一个结构数组时,我的转换反馈循环可以完美地工作。
struct FeedBackInfo
{
float area;
float Pabs;
float Pref;
}
FeedBackInfo FBI[36];
....
....
glGetBufferSubData(GL_TRANSFORM_FEEDBACK_BUFFER, 0,sizeof(FBI), FBI);
但是,我不想将自己限制在为示例程序创建的 36 点框上,并且能够根据加载的模型进行扩展。 但是当我尝试切换到可以动态分配的矢量对象时,我无法使转换反馈正常工作。
struct FeedBackInfo
{
float area;
float Pabs;
float Pref;
};
std::vector<FeedBackInfo> FBI;
FBI.resize(36);
....
....
这将彻底失败
glGetBufferSubData(GL_TRANSFORM_FEEDBACK_BUFFER, 0,sizeof(FBI), &FBI);
这只会填充偏移庄园中的几个值
glGetBufferSubData(GL_TRANSFORM_FEEDBACK_BUFFER, 0,sizeof(FBI), &FBI[0]);
我什至无法迭代 0 到 35 并填写所有数据,只填写了区域。
我不明白为什么结构数组的显式声明会顺利工作,为什么将其转换为矢量对象突然不起作用。
有没有办法动态分配 FeedBackInfo 的结构,并且仍然与转换反馈循环顺利工作?
std::vector<FeedBackInfo> FBI;
FBI.resize(36);
您的sizeof(FBI);
不会是您想要的内存大小。如果你想拥有内存的大小(数据的大小,而不是矢量的大小),你需要使用FBI.size()*sizeof(FeedBackInfo)
glGetBufferSubData(GL_TRANSFORM_FEEDBACK_BUFFER, 0, FBI.size()*sizeof(FeedBackInfo), FBI.data());
我用FBI.data()
代替了你的&FBI[0]
,因为我认为阅读更好。
相关文章:
- 为什么 C++ 中的字符数组返回其项目而不是地址?
- C++ bool 数组返回 1 或 0 以外的值
- C++ ostream 从对象数组返回数据
- 类中的重载运算符 [],因此它可以从模板类中的数组返回对象
- 指向对象的指针数组返回jibberish
- 具有基本结构的结构数组返回错误的答案
- 数组返回乐趣 movie_check()
- C++从字符数组返回类型为T的指针
- C++-将数组返回到主函数,并将数组传递给另一个函数
- C++:如何通过异常处理从越界数组返回值
- 整数数组返回类型
- 从字符串流复制到 char * 数组返回为函数参数
- C++函数从对象数组返回对象的副本.这是默认行为吗?
- 8字节数组返回长(C#到C++)
- 向c#数组返回一个字符数组c++
- 从并行数组返回值,并在以后的函数中使用这些值
- 将c++中的浮点数数组返回给Python
- 如何在gsoap中使字符串数组返回值
- 将两个字符相乘并向数组返回int
- C++套接字 - 从结构数组返回单个地址信息