2013-06-19 24 views
0

我有一个缓冲区,我想填补连续变换反馈,我想知道如何完全做到这一点。glBindBufferRange与变换反馈的使用

glBindBufferRange有五个参数,据我了解,前三个是相当于glBindBufferBase的参数,但我对offsetsize参数的几个问题。

如果我的第一反馈产生n元,从GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN检索,我的原语点,我想从那个位置继续在缓冲区中,应补偿的glBindBufferRange设置为n*4*sizeof(GLfloat)变换? (假设我检索vec4几何着色器输出)

的文档只是说,offsetsize应该是基本的机台(虽然他们有两种不同类型,GLintptr和GLsizeiptr),但我不完全相信这意味着,所以我假设字节,这是正确的?

回答

1

是的,在变换反馈期间写入缓冲区的数据量是写入的基元数量*这些基元的组件数量*基元的大小。是的,“基本机器单位”是“字节”的标准。

+0

对不起,它有点不清楚。这些是完全独立的变换反馈。我真的想知道如何计算从哪里开始写入第二个反馈的缓冲区,即使用的偏移量,所以我不会在缓冲区中留下空隙或覆盖已写入的内容。 – leohutson

+1

@leohutson:看到我的最后一句话。 –

+0

非常感谢您的帮助,我认为我现在明白了。如果你不介意,我想问一个稍微切题的问题。在我当前的代码中,在我的初始转换反馈之后,我有一个while循环作为屏障,只是暂停程序,直到GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN查询可用。如果我要摆脱这种情况,只是自己计算预期的基元数量,绑定重新绑定缓冲区并在之后立即执行第二个反馈,还是存在并发问题是否安全? – leohutson