]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/mesh.cpp
Store index type in VertexSetup
[libs/gl.git] / source / core / mesh.cpp
index 4414a90e6577910e7881dee65877134e7cd1ba69..77da81ebec4a3e51d286dc5477142a46191c9cf0 100644 (file)
@@ -89,7 +89,6 @@ void Mesh::check_buffers(unsigned mask)
                        ibuf = new Buffer;
                        if(!batches.empty())
                                batches.front().change_buffer(ibuf);
-                       vtx_setup.set_index_buffer(*ibuf);
                        dirty |= INDEX_BUFFER;
 
 #ifdef DEBUG
@@ -97,6 +96,9 @@ void Mesh::check_buffers(unsigned mask)
                                vbuf->set_debug_name(debug_name+" [IBO]");
 #endif
                }
+
+               if(!batches.empty())
+                       vtx_setup.set_index_buffer(*ibuf, batches.front().get_index_type());
        }
 }
 
@@ -146,6 +148,19 @@ void Mesh::add_batch(const Batch &b)
                        batches.back().use_buffer(ibuf, prev);
        }
 
+       DataType existing_type = batches.front().get_index_type();
+       DataType added_type = batches.back().get_index_type();
+       if(existing_type!=added_type)
+       {
+               if(get_type_size(existing_type)>get_type_size(added_type))
+                       batches.back().set_index_type(existing_type);
+               else
+               {
+                       for(vector<Batch>::iterator i=batches.begin(); i!=batches.end(); ++i)
+                               i->set_index_type(added_type);
+               }
+       }
+
        check_buffers(INDEX_BUFFER);
 }