michael@0: // michael@0: // Copyright (c) 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: // TextureStorage9.h: Defines the abstract rx::TextureStorage9 class and its concrete derived michael@0: // classes TextureStorage9_2D and TextureStorage9_Cube, which act as the interface to the michael@0: // D3D9 texture. michael@0: michael@0: #ifndef LIBGLESV2_RENDERER_TEXTURESTORAGE9_H_ michael@0: #define LIBGLESV2_RENDERER_TEXTURESTORAGE9_H_ michael@0: michael@0: #include "libGLESv2/renderer/TextureStorage.h" michael@0: #include "common/debug.h" michael@0: michael@0: namespace rx michael@0: { michael@0: class Renderer9; michael@0: class SwapChain9; michael@0: class RenderTarget; michael@0: class RenderTarget9; michael@0: class Blit; michael@0: michael@0: class TextureStorage9 : public TextureStorage michael@0: { michael@0: public: michael@0: TextureStorage9(Renderer *renderer, DWORD usage); michael@0: virtual ~TextureStorage9(); michael@0: michael@0: static TextureStorage9 *makeTextureStorage9(TextureStorage *storage); michael@0: michael@0: static DWORD GetTextureUsage(D3DFORMAT d3dfmt, GLenum glusage, bool forceRenderable); michael@0: static bool IsTextureFormatRenderable(D3DFORMAT format); michael@0: michael@0: D3DPOOL getPool() const; michael@0: DWORD getUsage() const; michael@0: michael@0: virtual IDirect3DBaseTexture9 *getBaseTexture() const = 0; michael@0: virtual RenderTarget *getRenderTarget() { return NULL; } michael@0: virtual RenderTarget *getRenderTarget(GLenum faceTarget) { return NULL; } michael@0: virtual void generateMipmap(int level) {}; michael@0: virtual void generateMipmap(int face, int level) {}; 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: int mLodOffset; michael@0: Renderer9 *mRenderer; michael@0: michael@0: private: michael@0: DISALLOW_COPY_AND_ASSIGN(TextureStorage9); michael@0: michael@0: const DWORD mD3DUsage; michael@0: const D3DPOOL mD3DPool; michael@0: }; michael@0: michael@0: class TextureStorage9_2D : public TextureStorage9 michael@0: { michael@0: public: michael@0: TextureStorage9_2D(Renderer *renderer, SwapChain9 *swapchain); michael@0: TextureStorage9_2D(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height); michael@0: virtual ~TextureStorage9_2D(); michael@0: michael@0: static TextureStorage9_2D *makeTextureStorage9_2D(TextureStorage *storage); michael@0: michael@0: IDirect3DSurface9 *getSurfaceLevel(int level, bool dirty); michael@0: virtual RenderTarget *getRenderTarget(); michael@0: virtual IDirect3DBaseTexture9 *getBaseTexture() const; michael@0: virtual void generateMipmap(int level); michael@0: michael@0: private: michael@0: DISALLOW_COPY_AND_ASSIGN(TextureStorage9_2D); michael@0: michael@0: void initializeRenderTarget(); michael@0: michael@0: IDirect3DTexture9 *mTexture; michael@0: RenderTarget9 *mRenderTarget; michael@0: }; michael@0: michael@0: class TextureStorage9_Cube : public TextureStorage9 michael@0: { michael@0: public: michael@0: TextureStorage9_Cube(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size); michael@0: virtual ~TextureStorage9_Cube(); michael@0: michael@0: static TextureStorage9_Cube *makeTextureStorage9_Cube(TextureStorage *storage); michael@0: michael@0: IDirect3DSurface9 *getCubeMapSurface(GLenum faceTarget, int level, bool dirty); michael@0: virtual RenderTarget *getRenderTarget(GLenum faceTarget); michael@0: virtual IDirect3DBaseTexture9 *getBaseTexture() const; michael@0: virtual void generateMipmap(int face, int level); michael@0: michael@0: private: michael@0: DISALLOW_COPY_AND_ASSIGN(TextureStorage9_Cube); michael@0: michael@0: void initializeRenderTarget(); michael@0: michael@0: IDirect3DCubeTexture9 *mTexture; michael@0: RenderTarget9 *mRenderTarget[6]; michael@0: }; michael@0: michael@0: } michael@0: michael@0: #endif // LIBGLESV2_RENDERER_TEXTURESTORAGE9_H_ michael@0: