#include <msp/datafile/objectloader.h>
#include "batch.h"
+#include "resource.h"
#include "vertexarray.h"
#include "windingtest.h"
Mesh can draw itself, it's usually used as part of Renderables rather than on
its own.
*/
-class Mesh: public Bindable<Mesh>
+class Mesh: public Bindable<Mesh>, public Resource
{
friend class MeshBuilder;
};
private:
+ class AsyncLoader: public Resource::AsyncLoader
+ {
+ private:
+ Mesh &mesh;
+ IO::Seekable &io;
+ Bufferable::AsyncUpdater *vertex_updater;
+ Bufferable::AsyncUpdater *index_updater;
+ unsigned phase;
+
+ public:
+ AsyncLoader(Mesh &, IO::Seekable &);
+ ~AsyncLoader();
+
+ virtual bool needs_sync() const;
+ virtual bool process();
+ };
+
VertexArray vertices;
std::list<Batch> batches;
Buffer *vbuf;
unsigned vao_id;
bool defer_buffers;
mutable bool dirty;
+ bool disallow_rendering;
const WindingTest *winding;
public:
- Mesh();
- Mesh(const VertexFormat &f);
+ Mesh(ResourceManager * = 0);
+ Mesh(const VertexFormat &, ResourceManager * = 0);
+private:
+ void init(ResourceManager *);
+public:
~Mesh();
void clear();
void draw() const;
void draw(Renderer &) const;
+ /** Binds the mesh for rendering. The vertex array is applied using generic
+ attributes only. Uses vertex array object if possible. */
void bind() const;
static void unbind();
+
+ virtual Resource::AsyncLoader *load(IO::Seekable &);
+ virtual UInt64 get_data_size() const;
+ virtual void unload();
};
} // namespace GL