Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / angle / src / libGLESv2 / renderer / d3d / BufferD3D.cpp
1 //
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.
5 //
6
7 // BufferD3D.cpp Defines common functionality between the Buffer9 and Buffer11 classes.
8
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"
14
15 namespace rx
16 {
17
18 unsigned int BufferD3D::mNextSerial = 1;
19
20 BufferD3D::BufferD3D()
21     : BufferImpl(),
22       mStaticVertexBuffer(NULL),
23       mStaticIndexBuffer(NULL)
24 {
25     updateSerial();
26 }
27
28 BufferD3D::~BufferD3D()
29 {
30     SafeDelete(mStaticVertexBuffer);
31     SafeDelete(mStaticIndexBuffer);
32 }
33
34 BufferD3D *BufferD3D::makeBufferD3D(BufferImpl *buffer)
35 {
36     ASSERT(HAS_DYNAMIC_TYPE(BufferD3D*, buffer));
37     return static_cast<BufferD3D*>(buffer);
38 }
39
40 BufferD3D *BufferD3D::makeFromBuffer(gl::Buffer *buffer)
41 {
42     BufferImpl *impl = buffer->getImplementation();
43     ASSERT(impl);
44     return makeBufferD3D(impl);
45 }
46
47 void BufferD3D::updateSerial()
48 {
49     mSerial = mNextSerial++;
50 }
51
52 void BufferD3D::initializeStaticData()
53 {
54     if (!mStaticVertexBuffer)
55     {
56         mStaticVertexBuffer = new rx::StaticVertexBufferInterface(getRenderer());
57     }
58     if (!mStaticIndexBuffer)
59     {
60         mStaticIndexBuffer = new rx::StaticIndexBufferInterface(getRenderer());
61     }
62 }
63
64 void BufferD3D::invalidateStaticData()
65 {
66     if ((mStaticVertexBuffer && mStaticVertexBuffer->getBufferSize() != 0) || (mStaticIndexBuffer && mStaticIndexBuffer->getBufferSize() != 0))
67     {
68         SafeDelete(mStaticVertexBuffer);
69         SafeDelete(mStaticIndexBuffer);
70     }
71
72     mUnmodifiedDataUse = 0;
73 }
74
75 // Creates static buffers if sufficient used data has been left unmodified
76 void BufferD3D::promoteStaticUsage(int dataSize)
77 {
78     if (!mStaticVertexBuffer && !mStaticIndexBuffer)
79     {
80         mUnmodifiedDataUse += dataSize;
81
82         if (mUnmodifiedDataUse > 3 * getSize())
83         {
84             initializeStaticData();
85         }
86     }
87 }
88
89 }