50 {
51
52 GLuint vertexArray;
53 glGenVertexArrays(1, &vertexArray);
54 glBindVertexArray(vertexArray);
55
56
57 std::vector<float> vertices;
58 surface.GenerateVertices(vertices);
59 GLuint vertexBuffer;
60 glGenBuffers(1, &vertexBuffer);
61 glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
62 glBufferData(GL_ARRAY_BUFFER,
63 vertices.size() * sizeof(vertices[0]),
64 &vertices[0],
65 GL_STATIC_DRAW);
66
67
68
69 int vertexCount = surface.GetVertexCount();
70 int indexCount = surface.GetTriangleIndexCount();
71 GLuint indexBuffer;
72
73
74
75 if (indexCount < 0) {
76 indexBuffer = 0;
77 indexCount = -1;
78
79 } else {
80 std::vector<GLushort> indices(indexCount);
81 surface.GenerateTriangleIndices(indices);
82 glGenBuffers(1, &indexBuffer);
83 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
84 glBufferData(GL_ELEMENT_ARRAY_BUFFER,
85 indexCount * 3 * sizeof(GLushort),
86 &indices[0],
87 GL_STATIC_DRAW);
88 }
89
90
91
92 surface.m_meshId.m_vertexBuffer = vertexBuffer;
93 surface.m_meshId.m_vertexSize = vertexCount;
94 surface.m_meshId.m_indexBuffer = indexBuffer;
95 surface.m_meshId.m_indexSize = indexCount;
96 surface.m_meshId.m_vertexArray = vertexArray;
97
98 m_meshId = surface.m_meshId;
99
100
101 glBindBuffer(GL_ARRAY_BUFFER, 0);
102 glBindVertexArray(0);
103}