#ifndef _GRAPHICSBUFFER_H
#define _GRAPHICSBUFFER_H
-#include <SDL.h>
+#include "SDL.h"
#include "gl_core44.h"
namespace IPDF
{
- /*
+ /**
* Implementation of an OpenGL buffer, with some extra cleverness.
*/
class GraphicsBuffer
BufferTypePixelPack, // Pixel Pack buffer
BufferTypePixelUnpack,
BufferTypeUniform, // Uniform/Constant buffer
- BufferTypeDrawIndirect,
+ BufferTypeTexture, // I was hoping to avoid this one.
+ BufferTypeDrawIndirect
};
enum BufferUsage
GraphicsBuffer();
~GraphicsBuffer();
+ void SetName(const char *name);
void SetType(BufferType bufType);
void SetUsage(BufferUsage bufUsage);
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;
size_t m_buffer_size;
bool m_invalidated;
bool m_buffer_shape_dirty;
+ bool m_faking_map;
+ const char *m_name;
};
}