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 UpdateBuffer & manager ()
 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: