1.8 KiB
1.8 KiB
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。
当前实现行为
函数会按以下顺序执行:
- 写入
m_type、m_size、m_dynamic。 - 根据
type == OpenGLBufferType::Index设置m_isIndexBuffer。 - 通过
ToOpenGL(type)选择目标绑定点。 - 根据
dynamic选择GL_DYNAMIC_DRAW或GL_STATIC_DRAW。 - 调用
glGenBuffers()创建m_buffer。 - 绑定目标。
- 调用
glBufferData(target, size, data, usage)分配并上传数据。 - 解绑目标。
重要限制
- 没有显式错误检查,也不会因为
glGetError()或其他失败信号返回false。 - 不会自动设置
m_bufferType、m_stride、m_name、m_state。 - 不会检查当前 OpenGL 上下文是否已经正确激活。
dynamic只影响 usage hint,不会改变后续 Map 或 SetData 的具体 API 选择。
设计说明
显式 API 里,buffer 的用途往往会细分为 usage、memory type、bind flags、state 等多个维度。OpenGL 把这些概念压缩得更扁平,所以 Initialize() 只能先选择一个主要 target 和一个 usage hint,其余跨后端语义要靠额外元数据补齐。