diff options
Diffstat (limited to 'src/3rdparty/angle/src/libGLESv2/renderer/d3d/BufferD3D.cpp')
-rw-r--r-- | src/3rdparty/angle/src/libGLESv2/renderer/d3d/BufferD3D.cpp | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/BufferD3D.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/BufferD3D.cpp new file mode 100644 index 0000000000..08457af76d --- /dev/null +++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/BufferD3D.cpp @@ -0,0 +1,83 @@ +#include "precompiled.h" +// +// Copyright 2014 The ANGLE Project Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// + +// BufferD3D.cpp Defines common functionality between the Buffer9 and Buffer11 classes. + +#include "libGLESv2/renderer/d3d/BufferD3D.h" +#include "libGLESv2/renderer/Renderer.h" +#include "libGLESv2/renderer/d3d/VertexBuffer.h" +#include "libGLESv2/renderer/d3d/IndexBuffer.h" +#include "libGLESv2/main.h" + +namespace rx +{ + +unsigned int BufferD3D::mNextSerial = 1; + +BufferD3D::BufferD3D() + : BufferImpl(), + mStaticVertexBuffer(NULL), + mStaticIndexBuffer(NULL) +{ + updateSerial(); +} + +BufferD3D::~BufferD3D() +{ + SafeDelete(mStaticVertexBuffer); + SafeDelete(mStaticIndexBuffer); +} + +BufferD3D *BufferD3D::makeBufferD3D(BufferImpl *buffer) +{ + ASSERT(HAS_DYNAMIC_TYPE(BufferD3D*, buffer)); + return static_cast<BufferD3D*>(buffer); +} + +void BufferD3D::updateSerial() +{ + mSerial = mNextSerial++; +} + +void BufferD3D::initializeStaticData() +{ + if (!mStaticVertexBuffer) + { + mStaticVertexBuffer = new rx::StaticVertexBufferInterface(getRenderer()); + } + if (!mStaticIndexBuffer) + { + mStaticIndexBuffer = new rx::StaticIndexBufferInterface(getRenderer()); + } +} + +void BufferD3D::invalidateStaticData() +{ + if ((mStaticVertexBuffer && mStaticVertexBuffer->getBufferSize() != 0) || (mStaticIndexBuffer && mStaticIndexBuffer->getBufferSize() != 0)) + { + SafeDelete(mStaticVertexBuffer); + SafeDelete(mStaticIndexBuffer); + } + + mUnmodifiedDataUse = 0; +} + +// Creates static buffers if sufficient used data has been left unmodified +void BufferD3D::promoteStaticUsage(int dataSize) +{ + if (!mStaticVertexBuffer && !mStaticIndexBuffer) + { + mUnmodifiedDataUse += dataSize; + + if (mUnmodifiedDataUse > 3 * getSize()) + { + initializeStaticData(); + } + } +} + +}
\ No newline at end of file |