14 glGenBuffers(ATTRIB_COUNT, handle);
18 glDeleteBuffers(ATTRIB_COUNT, handle);
29 void Model::Reserve(int s) {
36 void Model::Update() {
37 glBindBuffer(GL_ARRAY_BUFFER, handle[ATTRIB_VERTEX]);
38 glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(glm::vec3), vertices.data(), GL_STATIC_DRAW);
41 if (colors.size() < vertices.size()) {
42 std::cerr << "Model: not enough colors!" << std::endl;
43 colors.resize(vertices.size(), { 1, 0, 1 });
46 glBindBuffer(GL_ARRAY_BUFFER, handle[ATTRIB_COLOR]);
47 glBufferData(GL_ARRAY_BUFFER, colors.size() * sizeof(glm::vec3), colors.data(), GL_STATIC_DRAW);
50 if (normals.size() < vertices.size()) {
51 std::cerr << "Model: not enough normals!" << std::endl;
52 normals.resize(vertices.size(), { 0, 1, 0 });
55 glBindBuffer(GL_ARRAY_BUFFER, handle[ATTRIB_NORMAL]);
56 glBufferData(GL_ARRAY_BUFFER, normals.size() * sizeof(glm::vec3), normals.data(), GL_STATIC_DRAW);
67 glEnableVertexAttribArray(ATTRIB_VERTEX);
68 glBindBuffer(GL_ARRAY_BUFFER, handle[ATTRIB_VERTEX]);
69 glVertexAttribPointer(
70 ATTRIB_VERTEX, // location (for shader)
73 GL_FALSE, // normalized
78 glEnableVertexAttribArray(ATTRIB_COLOR);
79 glBindBuffer(GL_ARRAY_BUFFER, handle[ATTRIB_COLOR]);
80 glVertexAttribPointer(
81 ATTRIB_COLOR, // location (for shader)
84 GL_FALSE, // normalized
89 glEnableVertexAttribArray(ATTRIB_NORMAL);
90 glBindBuffer(GL_ARRAY_BUFFER, handle[ATTRIB_NORMAL]);
91 glVertexAttribPointer(
92 ATTRIB_NORMAL, // location (for shader)
95 GL_FALSE, // normalized
103 vertices.size() // len
106 glDisableVertexAttribArray(ATTRIB_NORMAL);
107 glDisableVertexAttribArray(ATTRIB_COLOR);
108 glDisableVertexAttribArray(ATTRIB_VERTEX);
112 OutlineModel::OutlineModel()
117 glGenBuffers(ATTRIB_COUNT, handle);
120 OutlineModel::~OutlineModel() {
121 glDeleteBuffers(ATTRIB_COUNT, handle);
125 void OutlineModel::Clear() {
131 void OutlineModel::Reserve(int s) {
137 void OutlineModel::Update() {
138 glBindBuffer(GL_ARRAY_BUFFER, handle[ATTRIB_VERTEX]);
139 glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(glm::vec3), vertices.data(), GL_STATIC_DRAW);
142 if (colors.size() < vertices.size()) {
143 std::cerr << "OutlineModel: not enough colors!" << std::endl;
144 colors.resize(vertices.size(), { 1, 0, 1 });
147 glBindBuffer(GL_ARRAY_BUFFER, handle[ATTRIB_COLOR]);
148 glBufferData(GL_ARRAY_BUFFER, colors.size() * sizeof(glm::vec3), colors.data(), GL_STATIC_DRAW);
154 void OutlineModel::Draw() {
159 glEnableVertexAttribArray(ATTRIB_VERTEX);
160 glBindBuffer(GL_ARRAY_BUFFER, handle[ATTRIB_VERTEX]);
161 glVertexAttribPointer(
162 ATTRIB_VERTEX, // location (for shader)
165 GL_FALSE, // normalized
170 glEnableVertexAttribArray(ATTRIB_COLOR);
171 glBindBuffer(GL_ARRAY_BUFFER, handle[ATTRIB_COLOR]);
172 glVertexAttribPointer(
173 ATTRIB_COLOR, // location (for shader)
176 GL_FALSE, // normalized
186 vertices.size() // len
189 glDisableVertexAttribArray(ATTRIB_COLOR);
190 glDisableVertexAttribArray(ATTRIB_VERTEX);