GLSL变换反馈返回阵列与矢量

时间:2014-02-14 05:03:45

标签: 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点框,并且可以根据加载的模型进行扩展。但是当我尝试切换到可以动态分配的矢量对象时,我无法使变换反馈起作用。

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的结构,并且仍可以使用变换反馈循环顺利运行?

1 个答案:

答案 0 :(得分:2)

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[0]替换为FBI.data()因为我认为最好阅读..