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,106 @@
# OpenGLRenderTargetView
OpenGL 渲染目标视图实现,使用 framebuffer object (FBO)。
## 头文件
```cpp
#include <XCEngine/RHI/OpenGL/OpenGLRenderTargetView.h>
```
## 枚举
### RenderTargetType
| 值 | 描述 |
|----|------|
| `Texture2D` | 2D 纹理 |
| `Texture2DArray` | 2D 纹理数组 |
| `Texture3D` | 3D 纹理 |
| `TextureCube` | 立方体贴图 |
| `TextureCubeArray` | 立方体贴图数组 |
## OpenGLRenderTargetViewDesc
```cpp
struct OpenGLRenderTargetViewDesc {
RenderTargetType type = RenderTargetType::Texture2D;
int mipLevel = 0;
int baseArraySlice = 0;
int arraySize = 1;
int layer = 0;
uint32_t format = 0;
};
```
## 公共成员函数
#### `OpenGLRenderTargetView()`
#### `~OpenGLRenderTargetView()`
#### `bool Initialize(unsigned int texture, const OpenGLRenderTargetViewDesc& desc)`
#### `bool Initialize(unsigned int texture, int mipLevel = 0)`
#### `bool InitializeCubemap(unsigned int cubemap, int face, int mipLevel = 0)`
#### `void Shutdown()`
#### `void Bind(unsigned int slot = 0)`
#### `void Bind(unsigned int count, const unsigned int* framebuffers, const int* drawBuffers)`
#### `void Unbind()`
#### `void Clear(float r, float g, float b, float a)`
#### `void Clear(float r, float g, float b, float a, float depth, uint8_t stencil)`
#### `unsigned int GetFramebuffer() const`
#### `unsigned int GetTexture() const`
#### `int GetMipLevel() const`
#### `int GetWidth() const`
#### `int GetHeight() const`
#### `static void BindFramebuffer(unsigned int framebuffer)`
#### `static void UnbindFramebuffer()`
## 内部成员
| 成员 | 类型 | 描述 |
|------|------|------|
| `m_texture` | `unsigned int` | GL texture ID |
| `m_framebuffer` | `unsigned int` | GL framebuffer ID |
| `m_mipLevel` | `int` | Mip 级别 |
| `m_width/height` | `int` | 尺寸 |
| `m_type` | `RenderTargetType` | 类型 |
| `m_framebuffers` | `vector<unsigned int>` | 额外 framebuffer 列表 |
## 使用示例
```cpp
// Create framebuffer with color attachment
OpenGLRenderTargetView rtv;
rtv.Initialize(texture.GetID());
rtv.Bind();
glClear(GL_COLOR_BUFFER_BIT);
glDrawArrays(GL_TRIANGLES, 0, 3);
rtv.Unbind();
// MRT
OpenGLRenderTargetView rtvs[2];
rtvs[0].Initialize(texture0.GetID());
rtvs[1].Initialize(texture1.GetID());
unsigned int fbs[] = { rtvs[0].GetFramebuffer(), rtvs[1].GetFramebuffer() };
int draws[] = { 0, 1 };
rtvs[0].Bind(2, fbs, draws);
glClear(GL_COLOR_BUFFER_BIT);
```