Store everything in a VBO, making things faster.
[ipdf/code.git] / src / graphicsbuffer.h
diff --git a/src/graphicsbuffer.h b/src/graphicsbuffer.h
new file mode 100644 (file)
index 0000000..15e5b42
--- /dev/null
@@ -0,0 +1,68 @@
+#ifndef _GRAPHICSBUFFER_H
+#define _GRAPHICSBUFFER_H
+
+#include <SDL.h>
+#define GL_GLEXT_PROTOTYPES
+#include <SDL_opengl.h>
+
+
+namespace IPDF
+{
+       /*
+        * The "Screen" class handles managing the OS window (using SDL2).
+        */
+       class GraphicsBuffer
+       {
+       public:
+               enum BufferType
+               {
+                       BufferTypeVertex,               // A Vertex Buffer
+                       BufferTypeIndex,                // An Index Buffer
+                       BufferTypePixelPack,            // Pixel Pack buffer
+                       BufferTypePixelUnpack,
+                       BufferTypeUniform,              // Uniform/Constant buffer
+                       BufferTypeDrawIndirect,
+               };
+               
+               enum BufferUsage
+               {
+                       BufferUsageStaticDraw,
+                       BufferUsageStaticRead,
+                       BufferUsageStaticCopy,
+                       BufferUsageDynamicDraw,
+                       BufferUsageDynamicRead,
+                       BufferUsageDynamicCopy,
+                       BufferUsageStreamDraw,
+                       BufferUsageStreamRead,
+                       BufferUsageStreamCopy
+               };
+               
+               GraphicsBuffer();
+               ~GraphicsBuffer();
+               
+               void SetType(BufferType bufType);
+               void SetUsage(BufferUsage bufUsage);
+               
+               void *Map(bool read, bool write, bool invalidate);
+               void *MapRange(int offset, int length, bool read, bool write, bool invalidate);
+               
+               void UnMap();
+               
+               void Upload(size_t length, const void *data);
+               void UploadRange(size_t length, intptr_t offset, const void *data);
+
+               void Resize(size_t length);
+               
+               void Bind();
+       private:
+               GLuint m_buffer_handle;
+               BufferType m_buffer_type;
+               BufferUsage m_buffer_usage;
+               void *m_map_pointer;
+               size_t m_buffer_size;
+               bool m_invalidated;
+       };
+
+}
+
+#endif // _SCREEN_H

UCC git Repository :: git.ucc.asn.au