Added an abstract BufferStorage::copyData method and implemented it for…

Added an abstract BufferStorage::copyData method and implemented it for BufferStorage9 and BufferStorage11. TRAC #22811 Signed-off-by: Jamie Madill Signed-off-by: Shannon Woods Author: Geoff Lang git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2132 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent c926e5f1
...@@ -23,6 +23,8 @@ class BufferStorage ...@@ -23,6 +23,8 @@ class BufferStorage
// The data returned is only guaranteed valid until next non-const method. // The data returned is only guaranteed valid until next non-const method.
virtual void *getData() = 0; virtual void *getData() = 0;
virtual void setData(const void* data, unsigned int size, unsigned int offset) = 0; virtual void setData(const void* data, unsigned int size, unsigned int offset) = 0;
virtual void copyData(BufferStorage* sourceStorage, unsigned int size,
unsigned int sourceOffset, unsigned int destOffset) = 0;
virtual void clear() = 0; virtual void clear() = 0;
virtual unsigned int getSize() const = 0; virtual unsigned int getSize() const = 0;
virtual bool supportsDirectBinding() const = 0; virtual bool supportsDirectBinding() const = 0;
......
...@@ -295,6 +295,26 @@ void BufferStorage11::setData(const void* data, unsigned int size, unsigned int ...@@ -295,6 +295,26 @@ void BufferStorage11::setData(const void* data, unsigned int size, unsigned int
mResolvedDataValid = false; mResolvedDataValid = false;
} }
void BufferStorage11::copyData(BufferStorage* sourceStorage, unsigned int size,
unsigned int sourceOffset, unsigned int destOffset)
{
BufferStorage11* source = makeBufferStorage11(sourceStorage);
if (source)
{
ID3D11DeviceContext *context = mRenderer->getDeviceContext();
D3D11_BOX srcBox;
srcBox.left = sourceOffset;
srcBox.right = sourceOffset + size;
srcBox.top = 0;
srcBox.bottom = 1;
srcBox.front = 0;
srcBox.back = 1;
context->CopySubresourceRegion(mBuffer, 0, destOffset, 0, 0, source->mBuffer, 0, &srcBox);
}
}
void BufferStorage11::clear() void BufferStorage11::clear()
{ {
mResolvedDataValid = false; mResolvedDataValid = false;
......
...@@ -25,6 +25,8 @@ class BufferStorage11 : public BufferStorage ...@@ -25,6 +25,8 @@ class BufferStorage11 : public BufferStorage
virtual void *getData(); virtual void *getData();
virtual void setData(const void* data, unsigned int size, unsigned int offset); virtual void setData(const void* data, unsigned int size, unsigned int offset);
virtual void copyData(BufferStorage* sourceStorage, unsigned int size,
unsigned int sourceOffset, unsigned int destOffset);
virtual void clear(); virtual void clear();
virtual unsigned int getSize() const; virtual unsigned int getSize() const;
virtual bool supportsDirectBinding() const; virtual bool supportsDirectBinding() const;
......
...@@ -57,6 +57,19 @@ void BufferStorage9::setData(const void* data, unsigned int size, unsigned int o ...@@ -57,6 +57,19 @@ void BufferStorage9::setData(const void* data, unsigned int size, unsigned int o
memcpy(reinterpret_cast<char*>(mMemory) + offset, data, size); memcpy(reinterpret_cast<char*>(mMemory) + offset, data, size);
} }
void BufferStorage9::copyData(BufferStorage* sourceStorage, unsigned int size,
unsigned int sourceOffset, unsigned int destOffset)
{
BufferStorage9* source = makeBufferStorage9(sourceStorage);
if (source)
{
void* sourceMemory = reinterpret_cast<char*>(source->mMemory) + sourceOffset;
void* destMemory = reinterpret_cast<char*>(mMemory) + destOffset;
memcpy(destMemory, sourceMemory, size);
}
}
void BufferStorage9::clear() void BufferStorage9::clear()
{ {
mSize = 0; mSize = 0;
......
...@@ -24,6 +24,8 @@ class BufferStorage9 : public BufferStorage ...@@ -24,6 +24,8 @@ class BufferStorage9 : public BufferStorage
virtual void *getData(); virtual void *getData();
virtual void setData(const void* data, unsigned int size, unsigned int offset); virtual void setData(const void* data, unsigned int size, unsigned int offset);
virtual void copyData(BufferStorage* sourceStorage, unsigned int size,
unsigned int sourceOffset, unsigned int destOffset);
virtual void clear(); virtual void clear();
virtual unsigned int getSize() const; virtual unsigned int getSize() const;
virtual bool supportsDirectBinding() const; virtual bool supportsDirectBinding() const;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment