8 #ifndef hifi_gpu_gl_GLBuffer_h
9 #define hifi_gpu_gl_GLBuffer_h
12 #include "GLBackend.h"
14 namespace gpu {
namespace gl {
16 class GLBuffer :
public GLObject<Buffer> {
18 template <
typename GLBufferType>
19 static GLBufferType* sync(GLBackend& backend,
const Buffer& buffer) {
20 if (buffer.getSysmem().getSize() != 0) {
21 if (buffer._getUpdateCount == 0) {
22 qWarning() <<
"Unsynced buffer";
24 if (buffer._getUpdateCount < buffer._applyUpdateCount) {
25 qWarning() <<
"Unsynced buffer " << buffer._getUpdateCount <<
" " << buffer._applyUpdateCount;
28 GLBufferType*
object = Backend::getGPUObject<GLBufferType>(buffer);
31 if (!
object || object->_stamp != buffer._renderSysmem.getStamp()) {
32 object =
new GLBufferType(backend.shared_from_this(), buffer,
object);
35 if (0 != (buffer._renderPages._flags & PageManager::DIRTY)) {
42 template <
typename GLBufferType>
43 static GLuint getId(GLBackend& backend,
const Buffer& buffer) {
44 GLBuffer* bo = sync<GLBufferType>(backend, buffer);
52 template <
typename GLBufferType>
53 static GLuint getIdUnsynced(GLBackend& backend,
const Buffer& buffer) {
54 GLBufferType*
object = Backend::getGPUObject<GLBufferType>(buffer);
56 return object->_buffer;
62 const GLuint& _buffer { _id };
68 virtual void transfer() = 0;
71 GLBuffer(
const std::weak_ptr<GLBackend>& backend,
const Buffer& buffer, GLuint
id);