2 // Copyright (c) 2012-2013 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
7 // TextureStorage9.h: Defines the abstract rx::TextureStorage9 class and its concrete derived
8 // classes TextureStorage9_2D and TextureStorage9_Cube, which act as the interface to the
11 #ifndef LIBGLESV2_RENDERER_TEXTURESTORAGE9_H_
12 #define LIBGLESV2_RENDERER_TEXTURESTORAGE9_H_
14 #include "libGLESv2/renderer/d3d/TextureStorage.h"
15 #include "common/debug.h"
24 class TextureStorage9 : public TextureStorage
27 virtual ~TextureStorage9();
29 static TextureStorage9 *makeTextureStorage9(TextureStorage *storage);
31 static DWORD GetTextureUsage(GLenum internalformat, bool renderTarget);
33 D3DPOOL getPool() const;
34 DWORD getUsage() const;
36 virtual IDirect3DBaseTexture9 *getBaseTexture() const = 0;
37 virtual RenderTarget *getRenderTarget(int level) { return NULL; }
38 virtual RenderTarget *getRenderTargetFace(GLenum faceTarget, int level) { return NULL; }
39 virtual RenderTarget *getRenderTargetLayer(int mipLevel, int layer) { return NULL; }
40 virtual void generateMipmap(int level) {};
41 virtual void generateMipmap(int face, int level) {};
43 virtual int getTopLevel() const;
44 virtual bool isRenderTarget() const;
45 virtual bool isManaged() const;
46 virtual int getLevelCount() const;
52 TextureStorage9(Renderer *renderer, DWORD usage);
55 DISALLOW_COPY_AND_ASSIGN(TextureStorage9);
57 const DWORD mD3DUsage;
58 const D3DPOOL mD3DPool;
61 class TextureStorage9_2D : public TextureStorage9
64 TextureStorage9_2D(Renderer *renderer, SwapChain9 *swapchain);
65 TextureStorage9_2D(Renderer *renderer, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, int levels);
66 virtual ~TextureStorage9_2D();
68 static TextureStorage9_2D *makeTextureStorage9_2D(TextureStorage *storage);
70 IDirect3DSurface9 *getSurfaceLevel(int level, bool dirty);
71 virtual RenderTarget *getRenderTarget(int level);
72 virtual IDirect3DBaseTexture9 *getBaseTexture() const;
73 virtual void generateMipmap(int level);
76 DISALLOW_COPY_AND_ASSIGN(TextureStorage9_2D);
78 void initializeRenderTarget();
80 IDirect3DTexture9 *mTexture;
81 RenderTarget9 *mRenderTarget;
84 class TextureStorage9_Cube : public TextureStorage9
87 TextureStorage9_Cube(Renderer *renderer, GLenum internalformat, bool renderTarget, int size, int levels);
88 virtual ~TextureStorage9_Cube();
90 static TextureStorage9_Cube *makeTextureStorage9_Cube(TextureStorage *storage);
92 IDirect3DSurface9 *getCubeMapSurface(GLenum faceTarget, int level, bool dirty);
93 virtual RenderTarget *getRenderTargetFace(GLenum faceTarget, int level);
94 virtual IDirect3DBaseTexture9 *getBaseTexture() const;
95 virtual void generateMipmap(int faceIndex, int level);
98 DISALLOW_COPY_AND_ASSIGN(TextureStorage9_Cube);
100 void initializeRenderTarget();
102 IDirect3DCubeTexture9 *mTexture;
103 RenderTarget9 *mRenderTarget[6];
108 #endif // LIBGLESV2_RENDERER_TEXTURESTORAGE9_H_