X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=src%2Fgraphicsbuffer.h;h=b102c5195e94abe197d81d233403e0621dd48808;hb=33d1adb60806e13863aa3b6c5e1dee9836cd3d04;hp=7cec235ec7484d1764e1918821edffcc9dc73e7a;hpb=a851cf197844a2eb15fd5ee2c350ee296e415dca;p=ipdf%2Fcode.git diff --git a/src/graphicsbuffer.h b/src/graphicsbuffer.h index 7cec235..b102c51 100644 --- a/src/graphicsbuffer.h +++ b/src/graphicsbuffer.h @@ -1,13 +1,13 @@ #ifndef _GRAPHICSBUFFER_H #define _GRAPHICSBUFFER_H -#include +#include "SDL.h" #include "gl_core44.h" namespace IPDF { - /* + /** * Implementation of an OpenGL buffer, with some extra cleverness. */ class GraphicsBuffer @@ -20,7 +20,8 @@ namespace IPDF BufferTypePixelPack, // Pixel Pack buffer BufferTypePixelUnpack, BufferTypeUniform, // Uniform/Constant buffer - BufferTypeDrawIndirect, + BufferTypeTexture, // I was hoping to avoid this one. + BufferTypeDrawIndirect }; enum BufferUsage @@ -54,10 +55,17 @@ namespace IPDF const size_t GetSize() const { return m_buffer_size; } void Invalidate(); + + // WARNING: The buffer handle can change for (almost) no reason. + // If you do _anything_ to the buffer, you'll need to call this + // again to see if we've recreated it in a vain attempt to outsmart + // the driver. + GLuint GetHandle() const { return m_buffer_handle; } void Bind() const; + void BindRange(size_t start, size_t size) const; private: - void RecreateBuffer(); + bool RecreateBuffer(const void *data = NULL); GLuint m_buffer_handle; BufferType m_buffer_type; BufferUsage m_buffer_usage; @@ -65,6 +73,7 @@ namespace IPDF size_t m_buffer_size; bool m_invalidated; bool m_buffer_shape_dirty; + bool m_faking_map; }; }