有可能在DirectX 11中拥有SoA顶点缓冲区吗
Is it possible to have a SoA Vertex Buffer in DirectX 11?
嗨
我想知道是否有可能在像这样的SoA方法中构建顶点缓冲区
{x1,x2,x3…xn,y1,y2,y3…yn,z1,z2,z3…zn}
而不是传统的AoS方法
{x1,y1,z1,x2,y2,z2,x3,y3,z3…xn,yn,zn}
如果是这样的话。。有可能这样设计ID3D11InputLayout
吗?
D3D11_INPUT_ELEMENT_DESC inputDesc[] = {
{ "POSITION", 0, DXGI_FORMAT_R32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "POSITION", 1, DXGI_FORMAT_R32_FLOAT, 0, offsetToY, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "POSITION", 2, DXGI_FORMAT_R32_FLOAT, 0, offsetToZ, D3D11_INPUT_PER_VERTEX_DATA, 0 }
};
对于这种布局,如何正确地调用deviceContext->IASetVertexBuffers
?
有什么建议吗?非常感谢。
如果顶点的所有属性都是连续存储的,那么您可能会让它发挥作用。
让顶点的每个元素都在一个单独的顶点流(0-15(中,并绑定与顶点组件一样多的顶点缓冲区。请参阅D3D11_INPUT_ELEMENT_DESC的"InputSlot"成员。
使用IASetVertexBuffers绑定N个顶点缓冲区时,可以为每个顶点缓冲区提供偏移量,作为该顶点元素起点的偏移量。每个顶点流的步长将为4个字节。
到PositionX的偏移量将为0字节
到PositionY的偏移量将为sizeof(float(*顶点计数
到PositionZ的偏移量为2*sizeof(float(*顶点计数
etc
或者,您根本不能使用顶点缓冲区,只需使用着色器资源视图(buffer<float>(绑定浮动缓冲区。然后,您可以使用SV_VertexID来定位顶点的每个元素。
在索引0中找不到X0。
X1可以在索引1中找到。
在索引(vertexCount(中找不到Y0
可以在索引(vertexCount+1(处找到Y1
Z0可以在索引(2*vertexCount+1(处找到
Z1可以在索引(2*vertexCount+2(处找到
etc
- 如何循环打印顶点结构
- D3D11-将混合权重和索引传递到顶点着色器
- 从返回的顶点缓冲区查询顶点结构
- Vulkan 中的动态顶点缓冲区格式设置
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- 如何将一半传递给顶点着色器?
- 在 DirectX 11 中从 GPU 读回顶点缓冲区(并获取顶点)
- QT QOpenGLWidget:如何在不使用数据块复制的情况下修改VBO中的单个顶点值?
- 使用 OpenGL 4.5 更改所选顶点的颜色
- Direct3D 11 - HLSL - 获取顶点索引 ID
- 创建异构顶点数据数组的可移植方法
- 使用 glvertex4i 传递网格面索引时的顶点着色器错误
- 无法从 cso 文件创建顶点着色器(从 fx 文件创建)
- OpenGL 相机移动程序顶点着色器问题
- 使用 std::list 存储顶点并使用 SFML 绘制它们
- 为什么顶点数组对象会导致错误?
- 从 CGAL 3D 网格生成中获取顶点坐标的 -6.27744e+66:mesh_implicit_sphere示例
- 将顶点位置从顶点传递到片段着色器 - 仅在使用 Nsight 进行调试时有效
- 有可能在DirectX 11中拥有SoA顶点缓冲区吗
- DirectX 11-使用AVX的AoS到SoA转换导致重映射时顶点缓冲区损坏