顶点数据

我们将顶点数据从顶点着色器代码移动到我们的应用程序的代码中。我们首先包含GLM库的头文件,它提供了我们需要使用的线性代数库:

#include <glm/glm.hpp>

创建一个叫做Vertex的新的结构体类型,我们使用它来定义单个顶点的数据:

struct Vertex {
        glm::vec2 pos;
        glm::vec3 color;
};

GLM库提供了能够完全兼容GLSL的C++向量类型:

const std::vector<Vertex> vertices = {
        {{0.0f, -0.5f}, {1.0f, 0.0f, 0.0f}},
        {{0.5f, 0.5f}, {0.0f, 1.0f, 0.0f}},
        {{-0.5f, 0.5f}, {0.0f, 0.0f, 1.0f}}
};

现在,我们可以使用Vertex结构体数组来定义我们的顶点数据。这次定义和之前在顶点着色器中进行的略有不同,之前在顶点着色器中,我们将顶点位置和顶点颜色数据定义在了不同的数组中,这次,我们将它们定义在了同一个结构体数组中。这种顶点属性定义方式定义的顶点数据也被叫做交叉顶点属性(interleaving vertex attributes)。