diff options
Diffstat (limited to 'gfx/angle/checkout/src/libANGLE/renderer/d3d/IndexBuffer.h')
-rw-r--r-- | gfx/angle/checkout/src/libANGLE/renderer/d3d/IndexBuffer.h | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/gfx/angle/checkout/src/libANGLE/renderer/d3d/IndexBuffer.h b/gfx/angle/checkout/src/libANGLE/renderer/d3d/IndexBuffer.h new file mode 100644 index 0000000000..e21bca2420 --- /dev/null +++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/IndexBuffer.h @@ -0,0 +1,125 @@ +// +// Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// + +// IndexBuffer.h: Defines the abstract IndexBuffer class and IndexBufferInterface +// class with derivations, classes that perform graphics API agnostic index buffer operations. + +#ifndef LIBANGLE_RENDERER_D3D_INDEXBUFFER_H_ +#define LIBANGLE_RENDERER_D3D_INDEXBUFFER_H_ + +#include "common/PackedEnums.h" +#include "common/angleutils.h" +#include "libANGLE/Error.h" + +namespace gl +{ +class Context; +} // namespace gl + +namespace rx +{ +class BufferFactoryD3D; + +class IndexBuffer : angle::NonCopyable +{ + public: + IndexBuffer(); + virtual ~IndexBuffer(); + + virtual angle::Result initialize(const gl::Context *context, + unsigned int bufferSize, + gl::DrawElementsType indexType, + bool dynamic) = 0; + + virtual angle::Result mapBuffer(const gl::Context *context, + unsigned int offset, + unsigned int size, + void **outMappedMemory) = 0; + virtual angle::Result unmapBuffer(const gl::Context *context) = 0; + + virtual angle::Result discard(const gl::Context *context) = 0; + + virtual gl::DrawElementsType getIndexType() const = 0; + virtual unsigned int getBufferSize() const = 0; + virtual angle::Result setSize(const gl::Context *context, + unsigned int bufferSize, + gl::DrawElementsType indexType) = 0; + + unsigned int getSerial() const; + + protected: + void updateSerial(); + + private: + unsigned int mSerial; + static unsigned int mNextSerial; +}; + +class IndexBufferInterface : angle::NonCopyable +{ + public: + IndexBufferInterface(BufferFactoryD3D *factory, bool dynamic); + virtual ~IndexBufferInterface(); + + virtual angle::Result reserveBufferSpace(const gl::Context *context, + unsigned int size, + gl::DrawElementsType indexType) = 0; + + gl::DrawElementsType getIndexType() const; + unsigned int getBufferSize() const; + + unsigned int getSerial() const; + + angle::Result mapBuffer(const gl::Context *context, + unsigned int size, + void **outMappedMemory, + unsigned int *streamOffset); + angle::Result unmapBuffer(const gl::Context *context); + + IndexBuffer *getIndexBuffer() const; + + protected: + unsigned int getWritePosition() const; + void setWritePosition(unsigned int writePosition); + + angle::Result discard(const gl::Context *context); + + angle::Result setBufferSize(const gl::Context *context, + unsigned int bufferSize, + gl::DrawElementsType indexType); + + private: + IndexBuffer *mIndexBuffer; + + unsigned int mWritePosition; + bool mDynamic; +}; + +class StreamingIndexBufferInterface : public IndexBufferInterface +{ + public: + explicit StreamingIndexBufferInterface(BufferFactoryD3D *factory); + ~StreamingIndexBufferInterface() override; + + angle::Result reserveBufferSpace(const gl::Context *context, + unsigned int size, + gl::DrawElementsType indexType) override; +}; + +class StaticIndexBufferInterface : public IndexBufferInterface +{ + public: + explicit StaticIndexBufferInterface(BufferFactoryD3D *factory); + ~StaticIndexBufferInterface() override; + + angle::Result reserveBufferSpace(const gl::Context *context, + unsigned int size, + gl::DrawElementsType indexType) override; +}; + +} // namespace rx + +#endif // LIBANGLE_RENDERER_D3D_INDEXBUFFER_H_ |