]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/mesh.cpp
Move swizzling modes to pixelformat.h
[libs/gl.git] / source / core / mesh.cpp
index f6a060215692a01f73ba2f849f83cfdc6c82f9b2..b5628eb10c860bbc758b17e08b7db045bea7b65c 100644 (file)
@@ -1,42 +1,19 @@
-#include <msp/gl/extensions/arb_vertex_array_object.h>
-#include <msp/gl/extensions/arb_vertex_buffer_object.h>
-#include <msp/gl/extensions/arb_vertex_shader.h>
-#include <msp/gl/extensions/khr_debug.h>
 #include "buffer.h"
 #include "error.h"
 #include "mesh.h"
 #include "renderer.h"
 #include "resourcemanager.h"
-#include "vertexsetup.h"
 
 using namespace std;
 
 namespace Msp {
 namespace GL {
 
-Mesh::Mesh(ResourceManager *rm)
+Mesh::Mesh(const VertexFormat &f)
 {
-       init(rm);
-}
-
-Mesh::Mesh(const VertexFormat &f, ResourceManager *rm)
-{
-       init(rm);
        storage(f);
 }
 
-void Mesh::init(ResourceManager *rm)
-{
-       vbuf = 0;
-       ibuf = 0;
-       dirty = 0;
-       disallow_rendering = false;
-       face_winding = NON_MANIFOLD;
-
-       if(rm)
-               set_manager(rm);
-}
-
 Mesh::~Mesh()
 {
        set_manager(0);
@@ -52,6 +29,8 @@ void Mesh::storage(const VertexFormat &fmt)
 
        vertices.set_format(fmt);
        vtx_setup.set_format(fmt);
+       if(vbuf)
+               vtx_setup.set_vertex_array(vertices);
 }
 
 void Mesh::clear()
@@ -70,7 +49,8 @@ void Mesh::check_buffers(unsigned mask)
                        delete vbuf;
                        vbuf = new Buffer;
                        vertices.use_buffer(vbuf);
-                       vtx_setup.set_vertex_array(vertices);
+                       if(!vertices.get_format().empty())
+                               vtx_setup.set_vertex_array(vertices);
                        dirty |= VERTEX_BUFFER;
 
 #ifdef DEBUG
@@ -102,12 +82,12 @@ void Mesh::check_buffers(unsigned mask)
        }
 }
 
-unsigned Mesh::get_n_vertices() const
+size_t Mesh::get_n_vertices() const
 {
        return vertices.size();
 }
 
-char *Mesh::modify_vertex(unsigned i)
+char *Mesh::modify_vertex(size_t i)
 {
        if(vertices.get_format().empty())
                throw invalid_operation("Mesh::modify_vertex");
@@ -226,9 +206,9 @@ Resource::AsyncLoader *Mesh::load(IO::Seekable &io, const Resources *)
        return new AsyncLoader(*this, io);
 }
 
-UInt64 Mesh::get_data_size() const
+uint64_t Mesh::get_data_size() const
 {
-       UInt64 size = 0;
+       uint64_t size = 0;
        if(vbuf)
                size += vbuf->get_size();
        if(ibuf)
@@ -263,9 +243,8 @@ void Mesh::set_debug_name(const string &name)
 }
 
 
-Mesh::Loader::Loader(Mesh &m, bool g):
-       DataFile::ObjectLoader<Mesh>(m),
-       allow_gl_calls(g)
+Mesh::Loader::Loader(Mesh &m):
+       DataFile::ObjectLoader<Mesh>(m)
 {
        add("batch",    &Loader::batch);
        add("storage",  &Loader::storage);
@@ -308,10 +287,7 @@ void Mesh::Loader::batch(PrimitiveType p)
 
 Mesh::AsyncLoader::AsyncLoader(Mesh &m, IO::Seekable &i):
        mesh(m),
-       io(i),
-       vertex_updater(0),
-       index_updater(0),
-       phase(0)
+       io(i)
 {
        mesh.disallow_rendering = true;
        mesh.check_buffers(VERTEX_BUFFER|INDEX_BUFFER);
@@ -335,7 +311,8 @@ bool Mesh::AsyncLoader::process()
        {
                // TODO use correct filename
                DataFile::Parser parser(io, "async");
-               Loader loader(mesh, false);
+               Loader loader(mesh);
+               loader.allow_gl_calls = false;
                loader.load(parser);
        }
        else if(phase==1)