7cec235ec7484d1764e1918821edffcc9dc73e7a
[ipdf/code.git] / src / graphicsbuffer.h
1 #ifndef _GRAPHICSBUFFER_H
2 #define _GRAPHICSBUFFER_H
3
4 #include <SDL.h>
5 #include "gl_core44.h"
6
7
8 namespace IPDF
9 {
10         /*
11          * Implementation of an OpenGL buffer, with some extra cleverness.
12          */
13         class GraphicsBuffer
14         {
15         public:
16                 enum BufferType
17                 {
18                         BufferTypeVertex,               // A Vertex Buffer
19                         BufferTypeIndex,                // An Index Buffer
20                         BufferTypePixelPack,            // Pixel Pack buffer
21                         BufferTypePixelUnpack,
22                         BufferTypeUniform,              // Uniform/Constant buffer
23                         BufferTypeDrawIndirect,
24                 };
25                 
26                 enum BufferUsage
27                 {
28                         BufferUsageStaticDraw,
29                         BufferUsageStaticRead,
30                         BufferUsageStaticCopy,
31                         BufferUsageDynamicDraw,
32                         BufferUsageDynamicRead,
33                         BufferUsageDynamicCopy,
34                         BufferUsageStreamDraw,
35                         BufferUsageStreamRead,
36                         BufferUsageStreamCopy
37                 };
38                 
39                 GraphicsBuffer();
40                 ~GraphicsBuffer();
41                 
42                 void SetType(BufferType bufType);
43                 void SetUsage(BufferUsage bufUsage);
44                 
45                 void *Map(bool read, bool write, bool invalidate);
46                 void *MapRange(int offset, int length, bool read, bool write, bool invalidate);
47                 
48                 void UnMap();
49                 
50                 void Upload(size_t length, const void *data);
51                 void UploadRange(size_t length, intptr_t offset, const void *data);
52
53                 void Resize(size_t length);
54                 const size_t GetSize() const { return m_buffer_size; }
55
56                 void Invalidate();
57                 
58                 void Bind() const;
59         private:
60                 void RecreateBuffer();
61                 GLuint m_buffer_handle;
62                 BufferType m_buffer_type;
63                 BufferUsage m_buffer_usage;
64                 void *m_map_pointer;
65                 size_t m_buffer_size;
66                 bool m_invalidated;
67                 bool m_buffer_shape_dirty;
68         };
69
70 }
71
72 #endif // _SCREEN_H

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