2 // Copyright 2014 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
7 // BufferD3D.cpp Defines common functionality between the Buffer9 and Buffer11 classes.
9 #include "libGLESv2/renderer/d3d/BufferD3D.h"
10 #include "libGLESv2/renderer/d3d/VertexBuffer.h"
11 #include "libGLESv2/renderer/d3d/IndexBuffer.h"
12 #include "libGLESv2/renderer/Renderer.h"
13 #include "libGLESv2/main.h"
18 unsigned int BufferD3D::mNextSerial = 1;
20 BufferD3D::BufferD3D()
22 mStaticVertexBuffer(NULL),
23 mStaticIndexBuffer(NULL)
28 BufferD3D::~BufferD3D()
30 SafeDelete(mStaticVertexBuffer);
31 SafeDelete(mStaticIndexBuffer);
34 BufferD3D *BufferD3D::makeBufferD3D(BufferImpl *buffer)
36 ASSERT(HAS_DYNAMIC_TYPE(BufferD3D*, buffer));
37 return static_cast<BufferD3D*>(buffer);
40 BufferD3D *BufferD3D::makeFromBuffer(gl::Buffer *buffer)
42 BufferImpl *impl = buffer->getImplementation();
44 return makeBufferD3D(impl);
47 void BufferD3D::updateSerial()
49 mSerial = mNextSerial++;
52 void BufferD3D::initializeStaticData()
54 if (!mStaticVertexBuffer)
56 mStaticVertexBuffer = new rx::StaticVertexBufferInterface(getRenderer());
58 if (!mStaticIndexBuffer)
60 mStaticIndexBuffer = new rx::StaticIndexBufferInterface(getRenderer());
64 void BufferD3D::invalidateStaticData()
66 if ((mStaticVertexBuffer && mStaticVertexBuffer->getBufferSize() != 0) || (mStaticIndexBuffer && mStaticIndexBuffer->getBufferSize() != 0))
68 SafeDelete(mStaticVertexBuffer);
69 SafeDelete(mStaticIndexBuffer);
72 mUnmodifiedDataUse = 0;
75 // Creates static buffers if sufficient used data has been left unmodified
76 void BufferD3D::promoteStaticUsage(int dataSize)
78 if (!mStaticVertexBuffer && !mStaticIndexBuffer)
80 mUnmodifiedDataUse += dataSize;
82 if (mUnmodifiedDataUse > 3 * getSize())
84 initializeStaticData();