gKit2 light
Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
UpdateBuffer Class Reference

buffer unique de copie / mise a jour des vertex buffers statiques. singleton. tous les meshs utilisent le meme buffer de copie... More...

Public Member Functions

void copy (GLenum target, const size_t offset, const size_t length, const void *data)
 transfere les donnees dans un buffer statique. More...
 
 ~UpdateBuffer ()
 detruit le buffer. More...
 
void release ()
 detruit le buffer. More...
 

Static Public Member Functions

static UpdateBuffermanager ()
 acces au singleton. More...
 

Protected Member Functions

 UpdateBuffer ()
 constructeur prive. singleton. More...
 

Protected Attributes

GLuint m_buffer
 
size_t m_size
 

Detailed Description

buffer unique de copie / mise a jour des vertex buffers statiques. singleton. tous les meshs utilisent le meme buffer de copie...

Definition at line 522 of file mesh.cpp.

Constructor & Destructor Documentation

◆ ~UpdateBuffer()

UpdateBuffer::~UpdateBuffer ( )
inline

detruit le buffer.

Definition at line 550 of file mesh.cpp.

551  {
552  release();
553  }
void release()
detruit le buffer.
Definition: mesh.cpp:556

◆ UpdateBuffer()

UpdateBuffer::UpdateBuffer ( )
inlineprotected

constructeur prive. singleton.

Definition at line 572 of file mesh.cpp.

572 : m_buffer(0), m_size(0) {}

Member Function Documentation

◆ copy()

void UpdateBuffer::copy ( GLenum  target,
const size_t  offset,
const size_t  length,
const void *  data 
)
inline

transfere les donnees dans un buffer statique.

Definition at line 526 of file mesh.cpp.

527  {
528  if(m_buffer == 0)
529  glGenBuffers(1, &m_buffer);
530 
531  assert(m_buffer);
532  glBindBuffer(GL_COPY_READ_BUFFER, m_buffer);
533  if(length > m_size)
534  {
535  m_size= (length / (16*1024*1024) + 1) * (16*1024*1024); // alloue par bloc de 16Mo
536  assert(m_size >= length);
537 
538  // alloue un buffer intermediaire dynamique...
539  glBufferData(GL_COPY_READ_BUFFER, m_size, nullptr, GL_DYNAMIC_DRAW);
540  printf("[UpdateBuffer] allocate %dMo staging buffer...\n", int(m_size / 1024 / 1024));
541  }
542 
543  // place les donnees dans le buffer intermediaire
544  glBufferSubData(GL_COPY_READ_BUFFER, 0, length, data);
545  // copie les donnees dans le vertex buffer statique
546  glCopyBufferSubData(GL_COPY_READ_BUFFER, target, 0, offset, length);
547  }
void printf(Text &text, const int px, const int py, const char *format,...)
affiche un texte a la position x, y. meme utilisation que printf().
Definition: text.cpp:140
float length(const Vector &v)
renvoie la longueur d'un vecteur.
Definition: vec.cpp:142

◆ release()

void UpdateBuffer::release ( )
inline

detruit le buffer.

Definition at line 556 of file mesh.cpp.

557  {
558  glDeleteBuffers(1, &m_buffer);
559  m_buffer= 0;
560  m_size= 0;
561  }

◆ manager()

static UpdateBuffer& UpdateBuffer::manager ( )
inlinestatic

acces au singleton.

Definition at line 564 of file mesh.cpp.

565  {
566  static UpdateBuffer buffer;
567  return buffer;
568  }
buffer unique de copie / mise a jour des vertex buffers statiques. singleton. tous les meshs utilisen...
Definition: mesh.cpp:523

The documentation for this class was generated from the following file: