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 ...@@ -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); ERR("Out of memory allocating a vertex buffer of size %lu.", size);
} }
} }
mBufferSize = size;
mWritePosition = 0;
mRequiredSpace = 0;
} }
VertexBuffer::~VertexBuffer() VertexBuffer::~VertexBuffer()
...@@ -62,23 +66,12 @@ unsigned int VertexBuffer::issueSerial() ...@@ -62,23 +66,12 @@ unsigned int VertexBuffer::issueSerial()
return mCurrentSerial++; return mCurrentSerial++;
} }
ArrayVertexBuffer::ArrayVertexBuffer(rx::Renderer9 *renderer, std::size_t size, DWORD usageFlags) : VertexBuffer(renderer, size, usageFlags) void VertexBuffer::addRequiredSpace(UINT requiredSpace)
{
mBufferSize = size;
mWritePosition = 0;
mRequiredSpace = 0;
}
ArrayVertexBuffer::~ArrayVertexBuffer()
{
}
void ArrayVertexBuffer::addRequiredSpace(UINT requiredSpace)
{ {
mRequiredSpace += 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() ...@@ -145,7 +138,7 @@ void StreamingVertexBuffer::reserveRequiredSpace()
mRequiredSpace = 0; 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 ...@@ -28,6 +28,11 @@ class VertexBuffer
virtual ~VertexBuffer(); virtual ~VertexBuffer();
void unmap(); 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; IDirect3DVertexBuffer9 *getBuffer() const;
unsigned int getSerial() const; unsigned int getSerial() const;
...@@ -40,28 +45,15 @@ class VertexBuffer ...@@ -40,28 +45,15 @@ class VertexBuffer
static unsigned int issueSerial(); static unsigned int issueSerial();
static unsigned int mCurrentSerial; 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 mBufferSize;
std::size_t mWritePosition; std::size_t mWritePosition;
std::size_t mRequiredSpace; std::size_t mRequiredSpace;
private:
DISALLOW_COPY_AND_ASSIGN(VertexBuffer);
}; };
class StreamingVertexBuffer : public ArrayVertexBuffer class StreamingVertexBuffer : public VertexBuffer
{ {
public: public:
StreamingVertexBuffer(rx::Renderer9 *renderer, std::size_t initialSize); StreamingVertexBuffer(rx::Renderer9 *renderer, std::size_t initialSize);
...@@ -71,7 +63,7 @@ class StreamingVertexBuffer : public ArrayVertexBuffer ...@@ -71,7 +63,7 @@ class StreamingVertexBuffer : public ArrayVertexBuffer
void reserveRequiredSpace(); void reserveRequiredSpace();
}; };
class StaticVertexBuffer : public ArrayVertexBuffer class StaticVertexBuffer : public VertexBuffer
{ {
public: public:
explicit StaticVertexBuffer(rx::Renderer9 *renderer); explicit StaticVertexBuffer(rx::Renderer9 *renderer);
......
...@@ -70,7 +70,7 @@ VertexDataManager::~VertexDataManager() ...@@ -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(); gl::Buffer *buffer = attribute.mBoundBuffer.get();
...@@ -187,8 +187,8 @@ GLenum VertexDataManager::prepareVertexData(const gl::VertexAttribute attribs[], ...@@ -187,8 +187,8 @@ GLenum VertexDataManager::prepareVertexData(const gl::VertexAttribute attribs[],
if (translated[i].active && attribs[i].mArrayEnabled) if (translated[i].active && attribs[i].mArrayEnabled)
{ {
gl::Buffer *buffer = attribs[i].mBoundBuffer.get(); gl::Buffer *buffer = attribs[i].mBoundBuffer.get();
ArrayVertexBuffer *staticBuffer = buffer ? buffer->getStaticVertexBuffer() : NULL; VertexBuffer *staticBuffer = buffer ? buffer->getStaticVertexBuffer() : NULL;
ArrayVertexBuffer *vertexBuffer = staticBuffer ? staticBuffer : mStreamingBuffer; VertexBuffer *vertexBuffer = staticBuffer ? staticBuffer : mStreamingBuffer;
if (vertexBuffer) if (vertexBuffer)
{ {
...@@ -216,7 +216,7 @@ GLenum VertexDataManager::prepareVertexData(const gl::VertexAttribute attribs[], ...@@ -216,7 +216,7 @@ GLenum VertexDataManager::prepareVertexData(const gl::VertexAttribute attribs[],
const FormatConverter &converter = formatConverter(attribs[i]); const FormatConverter &converter = formatConverter(attribs[i]);
StaticVertexBuffer *staticBuffer = buffer ? buffer->getStaticVertexBuffer() : NULL; 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; std::size_t streamOffset = -1;
......
...@@ -47,7 +47,7 @@ class VertexDataManager ...@@ -47,7 +47,7 @@ class VertexDataManager
DISALLOW_COPY_AND_ASSIGN(VertexDataManager); DISALLOW_COPY_AND_ASSIGN(VertexDataManager);
std::size_t spaceRequired(const gl::VertexAttribute &attrib, std::size_t count, GLsizei instances) const; 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 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