跳转至

1.Buffer统一接口

  • 创建
  • 销毁
  • 绑定
  • 解绑

2.OpenGL接口,继承自VertexBuffer,IndexBuffer:

上面统一的接口+计数+渲染ID

3.Buffer渲染缓冲布局

渲染类型--枚举

None = 0, Float, Float2, Float3, Float4, Mat3, Mat4, Int, Int2, Int3, Int4, Bool

获得对应的渲染类型缓冲

    static uint32_t ShaderDataTypeSize(ShaderDataType type)
    {
        switch (type)
        {
            case ShaderDataType::Float:    return 4;
            case ShaderDataType::Float2:   return 4 * 2;
            case ShaderDataType::Float3:   return 4 * 3;
            case ShaderDataType::Float4:   return 4 * 4;
            case ShaderDataType::Mat3:     return 4 * 3 * 3;
            case ShaderDataType::Mat4:     return 4 * 4 * 4;
            case ShaderDataType::Int:      return 4;
            case ShaderDataType::Int2:     return 4 * 2;
            case ShaderDataType::Int3:     return 4 * 3;
            case ShaderDataType::Int4:     return 4 * 4;
            case ShaderDataType::Bool:     return 1;
        }

        CORE_DEBUG_ASSERT(false, "Unknown ShaderDataType!");
        return 0;
    }

渲染缓冲元素BufferElement

单独设置一个缓冲元素结构体,包含了: * 名称 * 数据类型 * 大小 * 偏移 * Normalized

渲染缓冲布局BufferLayout

initalizelist:是C++11提供的新类型,定义在头文件中。
用于表示某种特定类型的值的数组,和vector一样,initializer_list也是一种模版类型。 这个可以直接提供给vector数组赋值

  • 默认构造函数
  • 构造函数(含intializelist的含参构造):同时计算偏移和步长
  • 获取元素
  • 获取步长
  • 迭代器begin,end
  • const迭代器begin,end
  • 计算偏移和步长的函数

4.应用程序实现

  • 将缓冲类型翻译成OpenGL对应的类型