gl::Error Buffer9::setData(const gl::Context *context, gl::BufferBinding /*target*/, const void *data, size_t size, gl::BufferUsage usage) { if (size > mMemory.size()) { if (!mMemory.resize(size)) { return gl::OutOfMemory() << "Failed to resize internal buffer."; } } mSize = size; if (data && size > 0) { memcpy(mMemory.data(), data, size); } updateD3DBufferUsage(context, usage); invalidateStaticData(context); return gl::NoError(); }
// Creates static buffers if sufficient used data has been left unmodified void BufferD3D::promoteStaticUsage(int dataSize) { if (mUsage == D3DBufferUsage::DYNAMIC) { mUnmodifiedDataUse += dataSize; if (mUnmodifiedDataUse > 3 * getSize()) { updateD3DBufferUsage(GL_STATIC_DRAW); } } }
// Creates static buffers if sufficient used data has been left unmodified void BufferD3D::promoteStaticUsage(const gl::Context *context, size_t dataSize) { if (mUsage == D3DBufferUsage::DYNAMIC) { // Note: This is not a safe math operation. 'dataSize' can come from the app. mUnmodifiedDataUse += dataSize; if (mUnmodifiedDataUse > 3 * getSize()) { updateD3DBufferUsage(context, gl::BufferUsage::StaticDraw); } } }