]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/buffer.h
Add support for integer vertex attributes
[libs/gl.git] / source / core / buffer.h
index cc5e58741c141f1fd5910e1abda23ec68a650a39..a80e52a68b9c34b00e499c6a16fb0b9e85446d39 100644 (file)
@@ -21,15 +21,6 @@ public:
        virtual ~buffer_too_small() throw() { }
 };
 
-enum BufferType
-{
-       ARRAY_BUFFER         = GL_ARRAY_BUFFER,
-       ELEMENT_ARRAY_BUFFER = GL_ELEMENT_ARRAY_BUFFER,
-       PIXEL_PACK_BUFFER    = GL_PIXEL_PACK_BUFFER,
-       PIXEL_UNPACK_BUFFER  = GL_PIXEL_UNPACK_BUFFER,
-       UNIFORM_BUFFER       = GL_UNIFORM_BUFFER
-};
-
 enum BufferUsage
 {
        STREAM_DRAW  = GL_STREAM_DRAW,
@@ -62,30 +53,25 @@ class Buffer
        friend class BufferRange;
 
 private:
-       BufferType type;
        unsigned id;
        unsigned size;
-
-       static const Buffer *bound[5];
+       bool allocated;
 
 public:
-       Buffer(BufferType);
+       Buffer();
        ~Buffer();
 
-private:
-       static void require_buffer_type(BufferType);
-
-public:
        /** Returns the OpenGL ID of the buffer.  For internal use only. */
        unsigned get_id() const { return id; }
 
-       /** Returns the default binding type for the buffer. */
-       BufferType get_type() const { return type; }
-
        /** Defines the storage size of the buffer.  Must be called before data can
        be uploaded.  Storage cannot be changed once set. */
        void storage(unsigned);
 
+       /** Allocates storage for the buffer.  The contents are initially undefined.
+       If storage has already been allocated, does nothing. */
+       void allocate();
+
        /** Sets the usage hint of the buffer.  It will take effect the next time
        the buffer's contents are defined. */
        DEPRECATED void set_usage(BufferUsage);
@@ -105,58 +91,11 @@ public:
 
        void require_size(unsigned) const;
 
-       BufferRange *create_range(unsigned, unsigned);
-
        void *map();
        DEPRECATED void *map(BufferAccess) { return map(); }
        bool unmap();
 
-       /** 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);
-       static void unbind_from(BufferType);
-private:
-       static const Buffer *&binding(BufferType);
-       static bool set_current(BufferType, const Buffer *);
-};
-
-
-/**
-A proxy for a subset of a buffer.  Can be bound for use with uniform blocks.
-*/
-class BufferRange
-{
-private:
-       Buffer &buffer;
-       unsigned offset;
-       unsigned size;
-
-       static std::vector<const BufferRange *> bound_uniform;
-
-public:
-       BufferRange(Buffer &, unsigned, unsigned);
-       ~BufferRange();
-
-       void data(const void *);
-
-       void bind_to(BufferType, unsigned);
-
-       static const BufferRange *current(BufferType t, unsigned i) { return binding(t, i); }
-       static void unbind_from(BufferType, unsigned);
-private:
-       static const BufferRange *&binding(BufferType, unsigned);
-       static bool set_current(BufferType, unsigned, const BufferRange *);
-
-public:
-       static unsigned get_n_uniform_buffer_bindings();
-       static unsigned get_uniform_buffer_alignment();
+       void set_debug_name(const std::string &);
 };
 
 } // namespace GL