Home | History | Annotate | Download | only in d3d9
      1 //
      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.
      5 //
      6 
      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
      9 // D3D9 texture.
     10 
     11 #ifndef LIBGLESV2_RENDERER_TEXTURESTORAGE9_H_
     12 #define LIBGLESV2_RENDERER_TEXTURESTORAGE9_H_
     13 
     14 #include "libGLESv2/renderer/TextureStorage.h"
     15 #include "common/debug.h"
     16 
     17 namespace rx
     18 {
     19 class Renderer9;
     20 class SwapChain9;
     21 class RenderTarget;
     22 class RenderTarget9;
     23 
     24 class TextureStorage9 : public TextureStorage
     25 {
     26   public:
     27     virtual ~TextureStorage9();
     28 
     29     static TextureStorage9 *makeTextureStorage9(TextureStorage *storage);
     30 
     31     static DWORD GetTextureUsage(GLenum internalformat, Renderer9 *renderer, bool renderTarget);
     32 
     33     D3DPOOL getPool() const;
     34     DWORD getUsage() const;
     35 
     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) {};
     42 
     43     virtual int getTopLevel() const;
     44     virtual bool isRenderTarget() const;
     45     virtual bool isManaged() const;
     46     virtual int getLevelCount() const;
     47 
     48   protected:
     49     int mTopLevel;
     50     Renderer9 *mRenderer;
     51 
     52     TextureStorage9(Renderer *renderer, DWORD usage);
     53 
     54   private:
     55     DISALLOW_COPY_AND_ASSIGN(TextureStorage9);
     56 
     57     const DWORD mD3DUsage;
     58     const D3DPOOL mD3DPool;
     59 };
     60 
     61 class TextureStorage9_2D : public TextureStorage9
     62 {
     63   public:
     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();
     67 
     68     static TextureStorage9_2D *makeTextureStorage9_2D(TextureStorage *storage);
     69 
     70     IDirect3DSurface9 *getSurfaceLevel(int level, bool dirty);
     71     virtual RenderTarget *getRenderTarget(int level);
     72     virtual IDirect3DBaseTexture9 *getBaseTexture() const;
     73     virtual void generateMipmap(int level);
     74 
     75   private:
     76     DISALLOW_COPY_AND_ASSIGN(TextureStorage9_2D);
     77 
     78     void initializeRenderTarget();
     79 
     80     IDirect3DTexture9 *mTexture;
     81     RenderTarget9 *mRenderTarget;
     82 };
     83 
     84 class TextureStorage9_Cube : public TextureStorage9
     85 {
     86   public:
     87     TextureStorage9_Cube(Renderer *renderer, GLenum internalformat, bool renderTarget, int size, int levels);
     88     virtual ~TextureStorage9_Cube();
     89 
     90     static TextureStorage9_Cube *makeTextureStorage9_Cube(TextureStorage *storage);
     91 
     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);
     96 
     97   private:
     98     DISALLOW_COPY_AND_ASSIGN(TextureStorage9_Cube);
     99 
    100     void initializeRenderTarget();
    101 
    102     IDirect3DCubeTexture9 *mTexture;
    103     RenderTarget9 *mRenderTarget[6];
    104 };
    105 
    106 }
    107 
    108 #endif // LIBGLESV2_RENDERER_TEXTURESTORAGE9_H_
    109 
    110