什么是EBO,element buffer object,见名知义,也是映射显存的一片空间。
1 EBO的结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
class IndexBuffer { public: virtual ~IndexBuffer() = default;
virtual void Bind() const = 0; virtual void Unbind() const = 0;
virtual uint32_t GetCount() const = 0;
static X::Ref<IndexBuffer> Create(uint32_t* indices, uint32_t count); };
|
2 申请显存空间
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
OpenGLIndexBuffer::OpenGLIndexBuffer(uint32_t *indices, uint32_t count) : m_count(count) { X_PROFILE_FUNCTION(); glGenBuffers(1, &m_rendererID); glBindBuffer(GL_ARRAY_BUFFER, m_rendererID); glBufferData(GL_ARRAY_BUFFER, count * sizeof(uint32_t), indices, GL_STATIC_DRAW); }
|
3 告诉VAO
真正规划怎么取VBO数据还是需要VAO出手,GPU会拿着VAO给的信息进行取数,所以EBO需要把点的索引方式给VAO
1 2 3 4 5 6 7 8
| void OpenGLVertexArray::SetIndexBuffer(const X::Ref<IndexBuffer>& indexBuffer) { X_PROFILE_FUNCTION(); glBindVertexArray(m_rendererID); indexBuffer->Bind(); m_indexBuffer = indexBuffer; }
|
4 GPU是怎么用这个索引信息的呢