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

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