首页 > 解决方案 > DirectX11 中的 OpenGL VAO、VBO 等效项

问题描述

我正在实现我们游戏引擎的 directx11 实例,我是 3D 游戏编程的新手。

我对 DirectX11 图形管道和着色器以及什么是顶点缓冲区、输入布局等有所了解。

在查看其中一个 API 时,代码类似于:

glBindVertexArray(current_vao);
glBindBuffer(GL_ARRAY_BUFFER, current_vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(Vector3) * Vertices.size(), &Vertices.front(), GL_DYNAMIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vector3), reinterpret_cast<void*>(0));
glDisableVertexAttribArray(1);
glDisableVertexAttribArray(2);
glDisableVertexAttribArray(3);
glDisableVertexAttribArray(4);
glDisableVertexAttribArray(5);
glDisableVertexAttribArray(6);
glBindBuffer(GL_ARRAY_BUFFER, 0);

这是什么VAOVBO等价的DirectX11?这段代码到底在做什么?

标签: directxdirectx-11

解决方案


“VBO”只是一个顶点缓冲区,在 DirectX 11 中是一个ID3D11Buffer带有绑定标志的顶点缓冲区,D3D11_BIND_VERTEX_BUFFER其中包含顶点数据。

没有直接等效于 OpenGL“顶点属性数组”。在 DirectX 11 中,您只需Draw为每组类似状态设置(也称为材质属性)提交一个不同的。

如果您是 DirectX 11 的新手,您可能会考虑通过 [DirectX Tool Kit 教程.


推荐阅读