// // 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/d3d/VertexBuffer.h" #include "libGLESv2/renderer/d3d/IndexBuffer.h" #include "libGLESv2/renderer/Renderer.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(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(); } } } }