假设我有2个不同实例组的实例数据的单个缓冲区(即,我想在单独的绘制调用中绘制它们,因为它们使用不同的纹理)。如何设置偏移量来完成此操作? IASetVertexBuffers
和DrawIndexedInstanced
都有偏移参数,我不清楚需要使用哪些参数。此外,如果偏移值是以字节为单位,DrawIndexedInstanced
并不完全清楚。
答案 0 :(得分:2)
这些偏移独立。您可以在ID3D11DeviceContext::IASetVertexBuffers或ID3D11DeviceContext::DrawIndexedInstanced或两者中进行偏移(然后它们将合并)。
ID3D11DeviceContext::IASetVertexBuffers接受以字节为单位的偏移 :
bindedData = (uint8_t*)data + sizeof(uint8_t) * offset
ID3D11DeviceContext::DrawIndexedInstanced接受元素(索引,顶点,实例)中的所有偏移。它们只是添加到指数的值。顶点和实例偏移独立工作。索引偏移也会偏移顶点和实例(显然):
index = indexBuffer[i] + StartIndexLocation
indexVert = index + BaseVertexLocation
indexInst = index + StartInstanceLocation
我更喜欢在绘制调用中进行抵消:
您可以合并纹理资源并在一次绘制调用中绘制所有内容,而不是将渲染分割为两个绘制调用:
希望它有所帮助!