Files
XCEngine/docs/api/XCEngine/RHI/OpenGL/OpenGLBuffer/Initialize.md

1.8 KiB
Raw Blame History

OpenGLBuffer::Initialize()

bool Initialize(OpenGLBufferType type, size_t size, const void* data = nullptr, bool dynamic = false);

作用

创建一个指定类型的 OpenGL buffer并可选上传初始数据。

参数

  • type: buffer 的主要 OpenGL 用途类型。
  • size: 分配的字节数。
  • data: 初始数据指针;传入 nullptr 时只分配存储。
  • dynamic: 是否使用动态用法提示。

返回值

当前实现始终返回 true

当前实现行为

函数会按以下顺序执行:

  1. 写入 m_typem_sizem_dynamic
  2. 根据 type == OpenGLBufferType::Index 设置 m_isIndexBuffer
  3. 通过 ToOpenGL(type) 选择目标绑定点。
  4. 根据 dynamic 选择 GL_DYNAMIC_DRAWGL_STATIC_DRAW
  5. 调用 glGenBuffers() 创建 m_buffer
  6. 绑定目标。
  7. 调用 glBufferData(target, size, data, usage) 分配并上传数据。
  8. 解绑目标。

重要限制

  • 没有显式错误检查,也不会因为 glGetError() 或其他失败信号返回 false
  • 不会自动设置 m_bufferTypem_stridem_namem_state
  • 不会检查当前 OpenGL 上下文是否已经正确激活。
  • dynamic 只影响 usage hint不会改变后续 MapSetData 的具体 API 选择。

设计说明

显式 API 里buffer 的用途往往会细分为 usage、memory type、bind flags、state 等多个维度。OpenGL 把这些概念压缩得更扁平,所以 Initialize() 只能先选择一个主要 target 和一个 usage hint其余跨后端语义要靠额外元数据补齐。

相关文档