From b6ecdb7c78272408649ab5b99cf4717a49ce04f2 Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Sun, 3 Sep 2017 23:41:35 -0300 Subject: [PATCH] SpriteBatches/Text objects/ParticleSystems: use glBufferData+glBufferSubData instead of glBufferData+glBufferData for orphaning streaming vertex data, on most platforms. Apparently some Android drivers have a problem with the latter. --HG-- branch : minor --- src/modules/graphics/opengl/Buffer.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/modules/graphics/opengl/Buffer.cpp b/src/modules/graphics/opengl/Buffer.cpp index b79ea0fcd..b91e66282 100644 --- a/src/modules/graphics/opengl/Buffer.cpp +++ b/src/modules/graphics/opengl/Buffer.cpp @@ -101,8 +101,15 @@ void Buffer::unmapStream() // "orphan" current buffer to avoid implicit synchronisation on the GPU: // http://www.seas.upenn.edu/~pcozzi/OpenGLInsights/OpenGLInsights-AsynchronousBufferTransfers.pdf gl.bindBuffer(type, vbo); - glBufferData(target, (GLsizeiptr) getSize(), nullptr, glusage); - glBufferData(target, (GLsizeiptr) getSize(), memory_map, glusage); + glBufferData(target, (GLsizeiptr) getSize(), nullptr, glusage); + +#if LOVE_WINDOWS + // TODO: Verify that this codepath is a useful optimization. + if (gl.getVendor() == OpenGL::VENDOR_INTEL) + glBufferData(target, (GLsizeiptr) getSize(), memory_map, glusage); + else +#endif + glBufferSubData(target, 0, (GLsizeiptr) getSize(), memory_map); } void Buffer::unmap()