refactor: reorganize docs into plan/ and add skills/

This commit is contained in:
2026-03-18 17:49:22 +08:00
parent fc7c8f6797
commit 9bad996ecf
143 changed files with 13263 additions and 0 deletions

View File

@@ -0,0 +1,88 @@
# OpenGLVertexArray
OpenGL 顶点数组对象 (VAO) 封装。
## 头文件
```cpp
#include <XCEngine/RHI/OpenGL/OpenGLVertexArray.h>
```
## VertexAttribute
```cpp
struct VertexAttribute {
unsigned int index; // 属性索引 (layout location)
int count; // 组件数量 (1-4)
unsigned int type; // GL 类型 (GL_FLOAT, etc.)
bool normalized; // 是否归一化
size_t stride; // 顶点步长
size_t offset; // 属性偏移
};
```
## 公共成员函数
#### `OpenGLVertexArray()`
#### `~OpenGLVertexArray()`
#### `bool Initialize()`
#### `void AddVertexBuffer(unsigned int buffer, const VertexAttribute& attribute)`
#### `void SetIndexBuffer(unsigned int buffer, unsigned int type)`
#### `void Shutdown()`
#### `void Bind() const`
#### `void Unbind() const`
#### `unsigned int GetID() const`
#### `unsigned int GetIndexBuffer() const`
#### `unsigned int GetIndexCount() const`
## 内部成员
| 成员 | 类型 | 描述 |
|------|------|------|
| `m_vao` | `unsigned int` | GL VAO ID |
| `m_indexBuffer` | `unsigned int` | 索引缓冲区 |
| `m_indexCount` | `unsigned int` | 索引数量 |
| `m_vertexBufferCount` | `int` | 顶点缓冲区数量 |
## 使用示例
```cpp
OpenGLVertexArray vao;
vao.Initialize();
// Position attribute
VertexAttribute pos;
pos.index = 0;
pos.count = 3;
pos.type = GL_FLOAT;
pos.normalized = false;
pos.stride = sizeof(Vertex);
pos.offset = 0;
vao.AddVertexBuffer(vb.GetID(), pos);
// UV attribute
VertexAttribute uv;
uv.index = 1;
uv.count = 2;
uv.type = GL_FLOAT;
uv.normalized = false;
uv.stride = sizeof(Vertex);
uv.offset = sizeof(float) * 3;
vao.AddVertexBuffer(vb.GetID(), uv);
// Index buffer
vao.SetIndexBuffer(ib.GetID(), GL_UNSIGNED_SHORT);
vao.Bind();
glDrawElements(GL_TRIANGLES, vao.GetIndexCount(), GL_UNSIGNED_SHORT, 0);
```