c++ - GLSL 变换反馈返回数组与 vector

标签 c++ c opengl vector glsl

当我显式声明一个结构数组时,我的转换反馈循环工作得很好。

struct FeedBackInfo
    {
            float area;
            float Pabs;
            float Pref;
    }

FeedBackInfo FBI[36];
....
....
glGetBufferSubData(GL_TRANSFORM_FEEDBACK_BUFFER, 0,sizeof(FBI), FBI);

但是,我不想将自己局限于为我的示例程序创建的 36 点框,并且能够根据加载的模型进行扩展。但是当我尝试切换到可以动态分配的 vector 对象时,我无法使变换反馈起作用。

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 并填写所有数据,只能填写区域。

我不明白为什么结构数组的显式声明可以顺利工作,为什么将其转换为 vector 对象突然不起作用。

有没有一种方法可以动态分配 FeedBackInfo 的结构,并且仍然可以顺利地与变换反馈循环一起工作?

最佳答案

std::vector<FeedBackInfo> FBI;
FBI.resize(36);

您的sizeof(FBI); 不会是您想要的内存大小。 如果你想要内存的大小(数据的,而不是 vector 的)你需要使用 FBI.size()*sizeof(FeedBackInfo)

glGetBufferSubData(GL_TRANSFORM_FEEDBACK_BUFFER, 0, FBI.size()*sizeof(FeedBackInfo), FBI.data());

我用 FBI.data() 替换了你的 &FBI[0] 因为我认为它更好读..

关于c++ - GLSL 变换反馈返回数组与 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21771237/

相关文章:

连接键盘输入的两个字符串

c - 无线网络编程书籍推荐

c++ - 为什么模板测试不丢弃片段?

c++ - 如何使用另一个转换来反转(或取消)OpenGL SRT 转换?

c++ - 基本数据类型变量 VS 对象变量

c++ - 自定义排序元组 vector 时出错

C++ auto_ptr 和拷贝构造

c++ - 如何返回错误消息字符串

c - 基本C问题,关于内存分配和赋值

c++ - 过剩窗口什么都不显示