gKit2 light
Loading...
Searching...
No Matches
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.
 ~UpdateBuffer ()
 detruit le buffer.
void release ()
 detruit le buffer.

Static Public Member Functions

static UpdateBuffermanager ()
 acces au singleton.

Protected Member Functions

 UpdateBuffer ()
 constructeur prive. singleton.

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 506 of file mesh.cpp.

Constructor & Destructor Documentation

◆ ~UpdateBuffer()

UpdateBuffer::~UpdateBuffer ( )
inline

detruit le buffer.

Definition at line 534 of file mesh.cpp.

535 {
536 release();
537 }
void release()
detruit le buffer.
Definition mesh.cpp:540

◆ UpdateBuffer()

UpdateBuffer::UpdateBuffer ( )
inlineprotected

constructeur prive. singleton.

Definition at line 556 of file mesh.cpp.

556: 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 510 of file mesh.cpp.

511 {
512 if(m_buffer == 0)
513 glGenBuffers(1, &m_buffer);
514
515 assert(m_buffer);
516 glBindBuffer(GL_COPY_READ_BUFFER, m_buffer);
517 if(length > m_size)
518 {
519 m_size= (length / (16*1024*1024) + 1) * (16*1024*1024); // alloue par bloc de 16Mo
520 assert(m_size >= length);
521
522 // alloue un buffer intermediaire dynamique...
523 glBufferData(GL_COPY_READ_BUFFER, m_size, nullptr, GL_DYNAMIC_DRAW);
524 printf("[UpdateBuffer] allocate %dMo staging buffer...\n", int(m_size / 1024 / 1024));
525 }
526
527 // place les donnees dans le buffer intermediaire
528 glBufferSubData(GL_COPY_READ_BUFFER, 0, length, data);
529 // copie les donnees dans le vertex buffer statique
530 glCopyBufferSubData(GL_COPY_READ_BUFFER, target, 0, offset, length);
531 }
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

◆ release()

void UpdateBuffer::release ( )
inline

detruit le buffer.

Definition at line 540 of file mesh.cpp.

541 {
542 glDeleteBuffers(1, &m_buffer);
543 m_buffer= 0;
544 m_size= 0;
545 }

◆ manager()

UpdateBuffer & UpdateBuffer::manager ( )
inlinestatic

acces au singleton.

Definition at line 548 of file mesh.cpp.

549 {
550 static UpdateBuffer buffer;
551 return buffer;
552 }
UpdateBuffer()
constructeur prive. singleton.
Definition mesh.cpp:556

Member Data Documentation

◆ m_buffer

GLuint UpdateBuffer::m_buffer
protected

Definition at line 558 of file mesh.cpp.

◆ m_size

size_t UpdateBuffer::m_size
protected

Definition at line 559 of file mesh.cpp.


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