mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-11 18:34:58 +01:00
Confirmed performance improvement without glBufferSubData
This commit is contained in:
@@ -812,19 +812,21 @@ void MediaPlayer::fill_texture(guint index)
|
|||||||
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, media_.width, media_.height, GL_RGBA, GL_UNSIGNED_BYTE, 0);
|
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, media_.width, media_.height, GL_RGBA, GL_UNSIGNED_BYTE, 0);
|
||||||
// bind the next PBO to write pixels
|
// bind the next PBO to write pixels
|
||||||
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, pbo_[pbo_next_index_]);
|
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, pbo_[pbo_next_index_]);
|
||||||
|
#ifdef USE_GL_BUFFER_SUBDATA
|
||||||
|
glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pbo_size_, frame_[index].vframe.data[0]);
|
||||||
|
#else
|
||||||
|
// update data directly on the mapped buffer
|
||||||
|
// NB : equivalent but faster than glBufferSubData (memmove instead of memcpy ?)
|
||||||
// See http://www.songho.ca/opengl/gl_pbo.html#map for more details
|
// See http://www.songho.ca/opengl/gl_pbo.html#map for more details
|
||||||
glBufferData(GL_PIXEL_UNPACK_BUFFER, pbo_size_, 0, GL_STREAM_DRAW);
|
glBufferData(GL_PIXEL_UNPACK_BUFFER, pbo_size_, 0, GL_STREAM_DRAW);
|
||||||
// map the buffer object into client's memory
|
// map the buffer object into client's memory
|
||||||
GLubyte* ptr = (GLubyte*) glMapBuffer(GL_PIXEL_UNPACK_BUFFER, GL_WRITE_ONLY);
|
GLubyte* ptr = (GLubyte*) glMapBuffer(GL_PIXEL_UNPACK_BUFFER, GL_WRITE_ONLY);
|
||||||
if (ptr) {
|
if (ptr) {
|
||||||
// update data directly on the mapped buffer
|
|
||||||
// NB : equivalent but faster (memmove instead of memcpy ?) than
|
|
||||||
// glNamedBufferSubData(pboIds[nextIndex], 0, imgsize, vp->getBuffer())
|
|
||||||
memmove(ptr, frame_[index].vframe.data[0], pbo_size_);
|
memmove(ptr, frame_[index].vframe.data[0], pbo_size_);
|
||||||
|
|
||||||
// release pointer to mapping buffer
|
// release pointer to mapping buffer
|
||||||
glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER);
|
glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
// done with PBO
|
// done with PBO
|
||||||
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
|
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
|
||||||
}
|
}
|
||||||
|
|||||||
10
Stream.cpp
10
Stream.cpp
@@ -474,19 +474,21 @@ void Stream::fill_texture(guint index)
|
|||||||
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width_, height_, GL_RGBA, GL_UNSIGNED_BYTE, 0);
|
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width_, height_, GL_RGBA, GL_UNSIGNED_BYTE, 0);
|
||||||
// bind the next PBO to write pixels
|
// bind the next PBO to write pixels
|
||||||
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, pbo_[pbo_next_index_]);
|
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, pbo_[pbo_next_index_]);
|
||||||
|
#ifdef USE_GL_BUFFER_SUBDATA
|
||||||
|
glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pbo_size_, frame_[index].vframe.data[0]);
|
||||||
|
#else
|
||||||
|
// update data directly on the mapped buffer
|
||||||
|
// NB : equivalent but faster than glBufferSubData (memmove instead of memcpy ?)
|
||||||
// See http://www.songho.ca/opengl/gl_pbo.html#map for more details
|
// See http://www.songho.ca/opengl/gl_pbo.html#map for more details
|
||||||
glBufferData(GL_PIXEL_UNPACK_BUFFER, pbo_size_, 0, GL_STREAM_DRAW);
|
glBufferData(GL_PIXEL_UNPACK_BUFFER, pbo_size_, 0, GL_STREAM_DRAW);
|
||||||
// map the buffer object into client's memory
|
// map the buffer object into client's memory
|
||||||
GLubyte* ptr = (GLubyte*) glMapBuffer(GL_PIXEL_UNPACK_BUFFER, GL_WRITE_ONLY);
|
GLubyte* ptr = (GLubyte*) glMapBuffer(GL_PIXEL_UNPACK_BUFFER, GL_WRITE_ONLY);
|
||||||
if (ptr) {
|
if (ptr) {
|
||||||
// update data directly on the mapped buffer
|
|
||||||
// NB : equivalent but faster (memmove instead of memcpy ?) than
|
|
||||||
// glNamedBufferSubData(pboIds[nextIndex], 0, imgsize, vp->getBuffer())
|
|
||||||
memmove(ptr, frame_[index].vframe.data[0], pbo_size_);
|
memmove(ptr, frame_[index].vframe.data[0], pbo_size_);
|
||||||
|
|
||||||
// release pointer to mapping buffer
|
// release pointer to mapping buffer
|
||||||
glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER);
|
glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
// done with PBO
|
// done with PBO
|
||||||
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
|
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user