X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fbuffer.h;h=5e3cd29a4162c124a3b259f419cd9a558760d3db;hp=e91524865e7fa449b318d16b64af586bba5ea5ba;hb=f14435e58bfa0fa697a06ba9a454bb30cd37d9d8;hpb=76e338af116120d93d082ad247591ec9adad9233 diff --git a/source/buffer.h b/source/buffer.h index e9152486..5e3cd29a 100644 --- a/source/buffer.h +++ b/source/buffer.h @@ -1,14 +1,7 @@ -/* $Id$ - -This file is part of libmspgl -Copyright © 2007 Mikko Rasa, Mikkosoft Productions -Distributed under the LGPL -*/ - #ifndef MSP_GL_BUFFER_H_ #define MSP_GL_BUFFER_H_ -#include "types.h" +#include "gl.h" namespace Msp { namespace GL { @@ -52,19 +45,10 @@ public: Buffer(BufferType); ~Buffer(); - /** Binds the buffer in its default slot. */ - void bind() const { bind(type); } - - /** Binds the buffer in an alternate slot. */ - void bind(BufferType) const; - private: - void maybe_bind() const; + const Buffer *maybe_bind() const; public: - /** Unbinds the buffer from its default slot. */ - void unbind() const { unbind(type); } - /** Sets the usage hint of the buffer. It will take effect the next time the buffer's contents are defined. */ void set_usage(BufferUsage); @@ -77,9 +61,37 @@ public: not be changed with this call. */ void sub_data(unsigned, unsigned, const void *); - static void unbind(BufferType); + /** Binds the buffer in its default slot. */ + void bind() const { bind_to(type); } + + /** Binds the buffer in an alternate slot. */ + void bind_to(BufferType) const; + + /** Unbinds the buffer from its default slot. */ + void unbind() const { unbind_from(type); } + + static const Buffer *current(BufferType t) { return binding(t); } + static void unbind_from(BufferType); private: static const Buffer *&binding(BufferType); + static void restore(const Buffer *, BufferType); +}; + +/** +An adaptor for Buffer to make it compatible with Bind. +*/ +template +class BufferAlias +{ +private: + const Buffer &buffer; + +public: + BufferAlias(const Buffer &b): buffer(b) { } + + void bind() const { buffer.bind_to(T); } + static const Buffer *current() { return Buffer::current(T); } + static void unbind() { Buffer::unbind_from(T); } }; } // namespace GL