Пример #1
0
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();
}
Пример #2
0
// 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);
        }
    }
}
Пример #3
0
// 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);
        }
    }
}