Merged the VertexBuffer and ArrayVertexBuffer classes.

TRAC# 22224 Signed-off-by: Nicolas Capens Signed-off-by: Daniel Koch git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1579 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 29787c31
......@@ -29,6 +29,10 @@ VertexBuffer::VertexBuffer(rx::Renderer9 *renderer, std::size_t size, DWORD usag
ERR("Out of memory allocating a vertex buffer of size %lu.", size);
}
}
mBufferSize = size;
mWritePosition = 0;
mRequiredSpace = 0;
}
VertexBuffer::~VertexBuffer()
......@@ -62,23 +66,12 @@ unsigned int VertexBuffer::issueSerial()
return mCurrentSerial++;
}
ArrayVertexBuffer::ArrayVertexBuffer(rx::Renderer9 *renderer, std::size_t size, DWORD usageFlags) : VertexBuffer(renderer, size, usageFlags)
{
mBufferSize = size;
mWritePosition = 0;
mRequiredSpace = 0;
}
ArrayVertexBuffer::~ArrayVertexBuffer()
{
}
void ArrayVertexBuffer::addRequiredSpace(UINT requiredSpace)
void VertexBuffer::addRequiredSpace(UINT requiredSpace)
{
mRequiredSpace += requiredSpace;
}
StreamingVertexBuffer::StreamingVertexBuffer(rx::Renderer9 *renderer, std::size_t initialSize) : ArrayVertexBuffer(renderer, initialSize, D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY)
StreamingVertexBuffer::StreamingVertexBuffer(rx::Renderer9 *renderer, std::size_t initialSize) : VertexBuffer(renderer, initialSize, D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY)
{
}
......@@ -145,7 +138,7 @@ void StreamingVertexBuffer::reserveRequiredSpace()
mRequiredSpace = 0;
}
StaticVertexBuffer::StaticVertexBuffer(rx::Renderer9 *renderer) : ArrayVertexBuffer(renderer, 0, D3DUSAGE_WRITEONLY)
StaticVertexBuffer::StaticVertexBuffer(rx::Renderer9 *renderer) : VertexBuffer(renderer, 0, D3DUSAGE_WRITEONLY)
{
}
......
......@@ -28,6 +28,11 @@ class VertexBuffer
virtual ~VertexBuffer();
void unmap();
virtual void *map(const gl::VertexAttribute &attribute, std::size_t requiredSpace, std::size_t *streamOffset) = 0;
std::size_t size() const { return mBufferSize; }
virtual void reserveRequiredSpace() = 0;
void addRequiredSpace(UINT requiredSpace);
IDirect3DVertexBuffer9 *getBuffer() const;
unsigned int getSerial() const;
......@@ -40,28 +45,15 @@ class VertexBuffer
static unsigned int issueSerial();
static unsigned int mCurrentSerial;
private:
DISALLOW_COPY_AND_ASSIGN(VertexBuffer);
};
class ArrayVertexBuffer : public VertexBuffer
{
public:
ArrayVertexBuffer(rx::Renderer9 *renderer, std::size_t size, DWORD usageFlags);
~ArrayVertexBuffer();
std::size_t size() const { return mBufferSize; }
virtual void *map(const gl::VertexAttribute &attribute, std::size_t requiredSpace, std::size_t *streamOffset) = 0;
virtual void reserveRequiredSpace() = 0;
void addRequiredSpace(UINT requiredSpace);
protected:
std::size_t mBufferSize;
std::size_t mWritePosition;
std::size_t mRequiredSpace;
private:
DISALLOW_COPY_AND_ASSIGN(VertexBuffer);
};
class StreamingVertexBuffer : public ArrayVertexBuffer
class StreamingVertexBuffer : public VertexBuffer
{
public:
StreamingVertexBuffer(rx::Renderer9 *renderer, std::size_t initialSize);
......@@ -71,7 +63,7 @@ class StreamingVertexBuffer : public ArrayVertexBuffer
void reserveRequiredSpace();
};
class StaticVertexBuffer : public ArrayVertexBuffer
class StaticVertexBuffer : public VertexBuffer
{
public:
explicit StaticVertexBuffer(rx::Renderer9 *renderer);
......
......@@ -70,7 +70,7 @@ VertexDataManager::~VertexDataManager()
}
}
std::size_t VertexDataManager::writeAttributeData(ArrayVertexBuffer *vertexBuffer, GLint start, GLsizei count, const gl::VertexAttribute &attribute, GLsizei instances)
std::size_t VertexDataManager::writeAttributeData(VertexBuffer *vertexBuffer, GLint start, GLsizei count, const gl::VertexAttribute &attribute, GLsizei instances)
{
gl::Buffer *buffer = attribute.mBoundBuffer.get();
......@@ -187,8 +187,8 @@ GLenum VertexDataManager::prepareVertexData(const gl::VertexAttribute attribs[],
if (translated[i].active && attribs[i].mArrayEnabled)
{
gl::Buffer *buffer = attribs[i].mBoundBuffer.get();
ArrayVertexBuffer *staticBuffer = buffer ? buffer->getStaticVertexBuffer() : NULL;
ArrayVertexBuffer *vertexBuffer = staticBuffer ? staticBuffer : mStreamingBuffer;
VertexBuffer *staticBuffer = buffer ? buffer->getStaticVertexBuffer() : NULL;
VertexBuffer *vertexBuffer = staticBuffer ? staticBuffer : mStreamingBuffer;
if (vertexBuffer)
{
......@@ -216,7 +216,7 @@ GLenum VertexDataManager::prepareVertexData(const gl::VertexAttribute attribs[],
const FormatConverter &converter = formatConverter(attribs[i]);
StaticVertexBuffer *staticBuffer = buffer ? buffer->getStaticVertexBuffer() : NULL;
ArrayVertexBuffer *vertexBuffer = staticBuffer ? staticBuffer : static_cast<ArrayVertexBuffer*>(mStreamingBuffer);
VertexBuffer *vertexBuffer = staticBuffer ? staticBuffer : static_cast<VertexBuffer*>(mStreamingBuffer);
std::size_t streamOffset = -1;
......
......@@ -47,7 +47,7 @@ class VertexDataManager
DISALLOW_COPY_AND_ASSIGN(VertexDataManager);
std::size_t spaceRequired(const gl::VertexAttribute &attrib, std::size_t count, GLsizei instances) const;
std::size_t writeAttributeData(ArrayVertexBuffer *vertexBuffer, GLint start, GLsizei count, const gl::VertexAttribute &attribute, GLsizei instances);
std::size_t writeAttributeData(VertexBuffer *vertexBuffer, GLint start, GLsizei count, const gl::VertexAttribute &attribute, GLsizei instances);
rx::Renderer9 *const mRenderer; // D3D9_REPLACE
......
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