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 gl::Error getBaseTexture(IDirect3DBaseTexture9 **outTexture) = 0;
37 virtual gl::Error getRenderTarget(const gl::ImageIndex &index, RenderTarget **outRT) = 0;
39 virtual int getTopLevel() const;
40 virtual bool isRenderTarget() const;
41 virtual bool isManaged() const;
42 virtual int getLevelCount() const;
44 virtual gl::Error setData(const gl::ImageIndex &index, Image *image, const gl::Box *destBox, GLenum type,
45 const gl::PixelUnpackState &unpack, const uint8_t *pixelData);
51 size_t mTextureHeight;
52 D3DFORMAT mTextureFormat;
56 TextureStorage9(Renderer *renderer, DWORD usage);
59 DISALLOW_COPY_AND_ASSIGN(TextureStorage9);
61 const DWORD mD3DUsage;
62 const D3DPOOL mD3DPool;
65 class TextureStorage9_2D : public TextureStorage9
68 TextureStorage9_2D(Renderer *renderer, SwapChain9 *swapchain);
69 TextureStorage9_2D(Renderer *renderer, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, int levels);
70 virtual ~TextureStorage9_2D();
72 static TextureStorage9_2D *makeTextureStorage9_2D(TextureStorage *storage);
74 gl::Error getSurfaceLevel(int level, bool dirty, IDirect3DSurface9 **outSurface);
75 virtual gl::Error getRenderTarget(const gl::ImageIndex &index, RenderTarget **outRT);
76 virtual gl::Error getBaseTexture(IDirect3DBaseTexture9 **outTexture);
77 virtual gl::Error generateMipmap(const gl::ImageIndex &sourceIndex, const gl::ImageIndex &destIndex);
78 virtual gl::Error copyToStorage(TextureStorage *destStorage);
81 DISALLOW_COPY_AND_ASSIGN(TextureStorage9_2D);
83 IDirect3DTexture9 *mTexture;
84 RenderTarget9 *mRenderTarget;
87 class TextureStorage9_Cube : public TextureStorage9
90 TextureStorage9_Cube(Renderer *renderer, GLenum internalformat, bool renderTarget, int size, int levels);
91 virtual ~TextureStorage9_Cube();
93 static TextureStorage9_Cube *makeTextureStorage9_Cube(TextureStorage *storage);
95 gl::Error getCubeMapSurface(GLenum faceTarget, int level, bool dirty, IDirect3DSurface9 **outSurface);
96 virtual gl::Error getRenderTarget(const gl::ImageIndex &index, RenderTarget **outRT);
97 virtual gl::Error getBaseTexture(IDirect3DBaseTexture9 **outTexture);
98 virtual gl::Error generateMipmap(const gl::ImageIndex &sourceIndex, const gl::ImageIndex &destIndex);
99 virtual gl::Error copyToStorage(TextureStorage *destStorage);
102 DISALLOW_COPY_AND_ASSIGN(TextureStorage9_Cube);
104 static const size_t CUBE_FACE_COUNT = 6;
106 IDirect3DCubeTexture9 *mTexture;
107 RenderTarget9 *mRenderTarget[CUBE_FACE_COUNT];
112 #endif // LIBGLESV2_RENDERER_TEXTURESTORAGE9_H_