当前位置: 首页>>代码示例>>C++>>正文


C++ VertexArray::get_dynamic方法代码示例

本文整理汇总了C++中VertexArray::get_dynamic方法的典型用法代码示例。如果您正苦于以下问题:C++ VertexArray::get_dynamic方法的具体用法?C++ VertexArray::get_dynamic怎么用?C++ VertexArray::get_dynamic使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在VertexArray的用法示例。


在下文中一共展示了VertexArray::get_dynamic方法的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);
    }
}
开发者ID:BackupTheBerlios,项目名称:engfx3d-svn,代码行数:57,代码来源:3denginefx.cpp


注:本文中的VertexArray::get_dynamic方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。