1 #include "precompiled.h"
2 //
3 // Copyright (c) 2013 The ANGLE Project Authors. All rights reserved.
4 // Use of this source code is governed by a BSD-style license that can be
5 // found in the LICENSE file.
6 //
7
8 // BufferStorage9.cpp Defines the BufferStorage9 class.
9
10 #include "libGLESv2/renderer/BufferStorage9.h"
11 #include "common/debug.h"
12
13 namespace rx
14 {
15
BufferStorage9()16 BufferStorage9::BufferStorage9()
17 {
18 mMemory = NULL;
19 mAllocatedSize = 0;
20 mSize = 0;
21 }
22
~BufferStorage9()23 BufferStorage9::~BufferStorage9()
24 {
25 delete[] mMemory;
26 }
27
makeBufferStorage9(BufferStorage * bufferStorage)28 BufferStorage9 *BufferStorage9::makeBufferStorage9(BufferStorage *bufferStorage)
29 {
30 ASSERT(HAS_DYNAMIC_TYPE(BufferStorage9*, bufferStorage));
31 return static_cast<BufferStorage9*>(bufferStorage);
32 }
33
getData()34 void *BufferStorage9::getData()
35 {
36 return mMemory;
37 }
38
setData(const void * data,unsigned int size,unsigned int offset)39 void BufferStorage9::setData(const void* data, unsigned int size, unsigned int offset)
40 {
41 if (!mMemory || offset + size > mAllocatedSize)
42 {
43 unsigned int newAllocatedSize = offset + size;
44 void *newMemory = new char[newAllocatedSize];
45
46 if (offset > 0 && mMemory && mAllocatedSize > 0)
47 {
48 memcpy(newMemory, mMemory, std::min(offset, mAllocatedSize));
49 }
50
51 delete[] mMemory;
52 mMemory = newMemory;
53 mAllocatedSize = newAllocatedSize;
54 }
55
56 mSize = std::max(mSize, offset + size);
57 if (data)
58 {
59 memcpy(reinterpret_cast<char*>(mMemory) + offset, data, size);
60 }
61 }
62
clear()63 void BufferStorage9::clear()
64 {
65 mSize = 0;
66 }
67
getSize() const68 unsigned int BufferStorage9::getSize() const
69 {
70 return mSize;
71 }
72
supportsDirectBinding() const73 bool BufferStorage9::supportsDirectBinding() const
74 {
75 return false;
76 }
77
78 }
79