1//
2// Copyright (c) 2012 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// SwapChain11.h: Defines a back-end specific class for the D3D11 swap chain.
8
9#ifndef LIBGLESV2_RENDERER_SWAPCHAIN11_H_
10#define LIBGLESV2_RENDERER_SWAPCHAIN11_H_
11
12#include "common/angleutils.h"
13#include "libGLESv2/renderer/SwapChain.h"
14
15namespace rx
16{
17class Renderer11;
18
19class SwapChain11 : public SwapChain
20{
21  public:
22    SwapChain11(Renderer11 *renderer, HWND window, HANDLE shareHandle,
23                GLenum backBufferFormat, GLenum depthBufferFormat);
24    virtual ~SwapChain11();
25
26    EGLint resize(EGLint backbufferWidth, EGLint backbufferHeight);
27    virtual EGLint reset(EGLint backbufferWidth, EGLint backbufferHeight, EGLint swapInterval);
28    virtual EGLint swapRect(EGLint x, EGLint y, EGLint width, EGLint height);
29    virtual void recreate();
30
31    virtual ID3D11Texture2D *getOffscreenTexture();
32    virtual ID3D11RenderTargetView *getRenderTarget();
33    virtual ID3D11ShaderResourceView *getRenderTargetShaderResource();
34
35    virtual ID3D11Texture2D *getDepthStencilTexture();
36    virtual ID3D11DepthStencilView *getDepthStencil();
37    virtual ID3D11ShaderResourceView *getDepthStencilShaderResource();
38
39    EGLint getWidth() const { return mWidth; }
40    EGLint getHeight() const { return mHeight; }
41
42    static SwapChain11 *makeSwapChain11(SwapChain *swapChain);
43
44  private:
45    DISALLOW_COPY_AND_ASSIGN(SwapChain11);
46
47    void release();
48    void initPassThroughResources();
49    void releaseOffscreenTexture();
50    EGLint resetOffscreenTexture(int backbufferWidth, int backbufferHeight);
51
52    Renderer11 *mRenderer;
53    EGLint mHeight;
54    EGLint mWidth;
55    bool mAppCreatedShareHandle;
56    unsigned int mSwapInterval;
57    bool mPassThroughResourcesInit;
58
59    IDXGISwapChain *mSwapChain;
60
61    ID3D11Texture2D *mBackBufferTexture;
62    ID3D11RenderTargetView *mBackBufferRTView;
63
64    ID3D11Texture2D *mOffscreenTexture;
65    ID3D11RenderTargetView *mOffscreenRTView;
66    ID3D11ShaderResourceView *mOffscreenSRView;
67
68    ID3D11Texture2D *mDepthStencilTexture;
69    ID3D11DepthStencilView *mDepthStencilDSView;
70    ID3D11ShaderResourceView *mDepthStencilSRView;
71
72    ID3D11Buffer *mQuadVB;
73    ID3D11SamplerState *mPassThroughSampler;
74    ID3D11InputLayout *mPassThroughIL;
75    ID3D11VertexShader *mPassThroughVS;
76    ID3D11PixelShader *mPassThroughPS;
77};
78
79}
80#endif // LIBGLESV2_RENDERER_SWAPCHAIN11_H_
81