michael@0: // michael@0: // Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved. michael@0: // Use of this source code is governed by a BSD-style license that can be michael@0: // found in the LICENSE file. michael@0: // michael@0: michael@0: // TextureStorage.h: Defines the abstract rx::TextureStorageInterface class and its concrete derived michael@0: // classes TextureStorageInterface2D and TextureStorageInterfaceCube, which act as the interface to the michael@0: // GPU-side texture. michael@0: michael@0: #ifndef LIBGLESV2_RENDERER_TEXTURESTORAGE_H_ michael@0: #define LIBGLESV2_RENDERER_TEXTURESTORAGE_H_ michael@0: michael@0: #include "common/debug.h" michael@0: michael@0: namespace rx michael@0: { michael@0: class Renderer; michael@0: class SwapChain; michael@0: class RenderTarget; michael@0: class Blit; michael@0: michael@0: class TextureStorage michael@0: { michael@0: public: michael@0: TextureStorage() {}; michael@0: virtual ~TextureStorage() {}; michael@0: michael@0: virtual int getLodOffset() const = 0; michael@0: virtual bool isRenderTarget() const = 0; michael@0: virtual bool isManaged() const = 0; michael@0: virtual int levelCount() = 0; michael@0: michael@0: virtual RenderTarget *getRenderTarget() = 0; michael@0: virtual RenderTarget *getRenderTarget(GLenum faceTarget) = 0; michael@0: virtual void generateMipmap(int level) = 0; michael@0: virtual void generateMipmap(int face, int level) = 0; michael@0: michael@0: private: michael@0: DISALLOW_COPY_AND_ASSIGN(TextureStorage); michael@0: michael@0: }; michael@0: michael@0: class TextureStorageInterface michael@0: { michael@0: public: michael@0: TextureStorageInterface(); michael@0: virtual ~TextureStorageInterface(); michael@0: michael@0: TextureStorage *getStorageInstance() { return mInstance; } michael@0: michael@0: unsigned int getTextureSerial() const; michael@0: virtual unsigned int getRenderTargetSerial(GLenum target) const = 0; michael@0: michael@0: virtual int getLodOffset() const; michael@0: virtual bool isRenderTarget() const; michael@0: virtual bool isManaged() const; michael@0: virtual int levelCount(); michael@0: michael@0: protected: michael@0: TextureStorage *mInstance; michael@0: michael@0: private: michael@0: DISALLOW_COPY_AND_ASSIGN(TextureStorageInterface); michael@0: michael@0: const unsigned int mTextureSerial; michael@0: static unsigned int issueTextureSerial(); michael@0: michael@0: static unsigned int mCurrentTextureSerial; michael@0: }; michael@0: michael@0: class TextureStorageInterface2D : public TextureStorageInterface michael@0: { michael@0: public: michael@0: TextureStorageInterface2D(Renderer *renderer, SwapChain *swapchain); michael@0: TextureStorageInterface2D(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height); michael@0: virtual ~TextureStorageInterface2D(); michael@0: michael@0: void generateMipmap(int level); michael@0: RenderTarget *getRenderTarget() const; michael@0: michael@0: virtual unsigned int getRenderTargetSerial(GLenum target) const; michael@0: michael@0: private: michael@0: DISALLOW_COPY_AND_ASSIGN(TextureStorageInterface2D); michael@0: michael@0: const unsigned int mRenderTargetSerial; michael@0: }; michael@0: michael@0: class TextureStorageInterfaceCube : public TextureStorageInterface michael@0: { michael@0: public: michael@0: TextureStorageInterfaceCube(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size); michael@0: virtual ~TextureStorageInterfaceCube(); michael@0: michael@0: void generateMipmap(int face, int level); michael@0: RenderTarget *getRenderTarget(GLenum faceTarget) const; michael@0: michael@0: virtual unsigned int getRenderTargetSerial(GLenum target) const; michael@0: michael@0: private: michael@0: DISALLOW_COPY_AND_ASSIGN(TextureStorageInterfaceCube); michael@0: michael@0: const unsigned int mFirstRenderTargetSerial; michael@0: }; michael@0: michael@0: } michael@0: michael@0: #endif // LIBGLESV2_RENDERER_TEXTURESTORAGE_H_ michael@0: