git-svn-id: svn://db.shs.com.ru/libs@664 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
@@ -57,17 +57,22 @@ Mesh * Mesh::clone() {
|
||||
|
||||
|
||||
void Mesh::init(QOpenGLExtraFunctions * f) {
|
||||
buffer_geom.init(f);
|
||||
buffer_ind .init(f);
|
||||
vao.bindBuffers(f, buffer_geom, buffer_ind);
|
||||
changed = true;
|
||||
if (!isInit()) {
|
||||
buffer_geom.init(f);
|
||||
buffer_ind .init(f);
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Mesh::destroy(QOpenGLExtraFunctions * f) {
|
||||
buffer_geom.destroy(f);
|
||||
buffer_ind .destroy(f);
|
||||
vao.destroy(f);
|
||||
QList<VertexObject*> vaol = vao_map.values();
|
||||
foreach (VertexObject* vao, vaol)
|
||||
vao->destroy(f);
|
||||
qDeleteAll(vao_map);
|
||||
vao_map.clear();
|
||||
}
|
||||
|
||||
|
||||
@@ -119,6 +124,15 @@ void Mesh::calculateTangents() {
|
||||
}
|
||||
|
||||
|
||||
VertexObject * Mesh::vaoByType(int type) {
|
||||
VertexObject *& vao(vao_map[type]);
|
||||
if (!vao) {
|
||||
vao = new VertexObject();
|
||||
}
|
||||
return vao;
|
||||
}
|
||||
|
||||
|
||||
bool Mesh::rebuffer(QOpenGLExtraFunctions * f) {
|
||||
changed = false;
|
||||
if (vertices_.isEmpty()) return true;
|
||||
@@ -159,15 +173,18 @@ bool Mesh::rebuffer(QOpenGLExtraFunctions * f) {
|
||||
}
|
||||
|
||||
|
||||
void Mesh::draw(QOpenGLExtraFunctions * f, int count) {
|
||||
void Mesh::draw(QOpenGLExtraFunctions * f, int count, int type) {
|
||||
if (isEmpty()) return;
|
||||
if (!isInit()) init(f);
|
||||
if (changed) rebuffer(f);
|
||||
//qDebug() << "draw" << geom_type << vert_count << count;
|
||||
|
||||
VertexObject * vao = vaoByType(type);
|
||||
vao->bindBuffers(f, buffer_geom, buffer_ind);
|
||||
if (geom_type == GL_TRIANGLES)
|
||||
vao.draw(f, geom_type, triangles_.size() * 3, count);
|
||||
vao->draw(f, geom_type, triangles_.size() * 3, count);
|
||||
else
|
||||
vao.draw(f, geom_type, lines_.size() * 2, count);
|
||||
vao->draw(f, geom_type, lines_.size() * 2, count);
|
||||
}
|
||||
|
||||
|
||||
@@ -184,19 +201,21 @@ void Mesh::clear() {
|
||||
}
|
||||
|
||||
|
||||
void Mesh::loadObject(QOpenGLExtraFunctions * f, const Object & object) {
|
||||
vao.loadObject(f, object);
|
||||
void Mesh::loadObject(QOpenGLExtraFunctions * f, const Object & object, int type) {
|
||||
VertexObject * vao = vaoByType(type);
|
||||
vao->loadObject(f, object);
|
||||
}
|
||||
|
||||
|
||||
void Mesh::loadObjects(QOpenGLExtraFunctions * f, const QVector<Object> & objects) {
|
||||
vao.loadObjects(f, objects);
|
||||
void Mesh::loadObjects(QOpenGLExtraFunctions * f, const QVector<Object> & objects, int type) {
|
||||
VertexObject * vao = vaoByType(type);
|
||||
vao->loadObjects(f, objects);
|
||||
}
|
||||
|
||||
|
||||
void Mesh::loadSelections(QOpenGLExtraFunctions * f, const QVector<uchar> & sels) {
|
||||
//qDebug() << "loadSelections" << sels;
|
||||
vao.loadSelections(f, sels);
|
||||
void Mesh::loadSelections(QOpenGLExtraFunctions * f, const QVector<uchar> & sels, int type) {
|
||||
VertexObject * vao = vaoByType(type);
|
||||
vao->loadSelections(f, sels);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user