本文整理汇总了C++中VertexArray::get_data方法的典型用法代码示例。如果您正苦于以下问题:C++ VertexArray::get_data方法的具体用法?C++ VertexArray::get_data怎么用?C++ VertexArray::get_data使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VertexArray
的用法示例。
在下文中一共展示了VertexArray::get_data方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: draw
void draw(const VertexArray &varray, const IndexArray &iarray) {
load_xform_matrices();
bool use_vbo = !varray.get_dynamic() && sys_caps.vertex_buffers;
bool use_ibo = false;//!iarray.get_dynamic() && sys_caps.vertex_buffers;
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
if(use_vbo) {
Vertex v;
glBindBuffer(GL_ARRAY_BUFFER_ARB, varray.get_buffer_object());
glVertexPointer(3, GL_SCALAR_TYPE, sizeof(Vertex), (void*)((char*)&v.pos - (char*)&v));
glNormalPointer(GL_SCALAR_TYPE, sizeof(Vertex), (void*)((char*)&v.normal - (char*)&v));
glColorPointer(4, GL_SCALAR_TYPE, sizeof(Vertex), (void*)((char*)&v.color - (char*)&v));
for(int i=0; i<MAX_TEXTURES; i++) {
select_texture_unit(i);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
int dim = ttype[i] == TEX_1D ? 1 : (ttype[i] == TEX_3D || ttype[i] == TEX_CUBE ? 3 : 2);
glTexCoordPointer(dim, GL_SCALAR_TYPE, sizeof(Vertex), (void*)((char*)&v.tex[coord_index[i]] - (char*)&v));
}
glBindBuffer(GL_ARRAY_BUFFER_ARB, 0);
} else {
glVertexPointer(3, GL_SCALAR_TYPE, sizeof(Vertex), &varray.get_data()->pos);
glNormalPointer(GL_SCALAR_TYPE, sizeof(Vertex), &varray.get_data()->normal);
glColorPointer(4, GL_SCALAR_TYPE, sizeof(Vertex), &varray.get_data()->color);
for(int i=0; i<MAX_TEXTURES; i++) {
select_texture_unit(i);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
int dim = ttype[i] == TEX_1D ? 1 : (ttype[i] == TEX_3D || ttype[i] == TEX_CUBE ? 3 : 2);
glTexCoordPointer(dim, GL_SCALAR_TYPE, sizeof(Vertex), &varray.get_data()->tex[coord_index[i]]);
}
}
if(use_ibo) {
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER_ARB, iarray.get_buffer_object());
glDrawElements(primitive_type, iarray.get_count(), GL_UNSIGNED_INT, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER_ARB, 0);
} else {
glDrawElements(primitive_type, iarray.get_count(), GL_UNSIGNED_INT, iarray.get_data());
}
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
for(int i=0; i<MAX_TEXTURES; i++) {
select_texture_unit(i);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
}
}