问题X:我需要为未由网格数据插入的属性提供“补偿”流,但着色器需要它们。
(在d3d中,与输入布局不匹配是一个硬错误)

解决方案Y:在D3D中,我创建了一个16字节的缓冲区,并使用某种默认颜色进行了初始化(当缺失的语义是color时,让我们将其作为我的典型用例),并指定跨度为零,以便重复一个元素无论索引缓冲区中的索引是什么,这种方式我都不需要用覆盖所有对象所需的最大缓冲区来阻塞VRAM。

但是查看glVertexAttribPointer时,我发现该API正在消耗我的步伐,并在指定零时使其自动运行。

任何解决方法?

#1 楼

禁用顶点属性数组,并使用glVertexAttrib设置应使用的数据。

#2 楼

您可以使用OpenGL 4.3的单独属性格式API或ARB_vertex_attrib_binding扩展名将跨度设置为零:

glBindVertexBuffer(index, buffer, offset, 0);


跨度为零将是真实的跨度为零。 。

glVertexAttribPointer API相比,这还具有使D3D用户看起来更加熟悉的优点。

评论


$ \ begingroup $
嘿,这很有趣。这可能更容易,因为我们的引擎更多地基于d3d方式。我明天再看
$ \ endgroup $
–v.oddou
17年4月5日在13:58