Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / angle / src / libEGL / Surface.h
1 //
2 // Copyright (c) 2002-2014 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 // Surface.h: Defines the egl::Surface class, representing a drawing surface
8 // such as the client area of a window, including any back buffers.
9 // Implements EGLSurface and related functionality. [EGL 1.4] section 2.2 page 3.
10
11 #ifndef LIBEGL_SURFACE_H_
12 #define LIBEGL_SURFACE_H_
13
14 #include <EGL/egl.h>
15
16 #include "common/angleutils.h"
17
18 namespace gl
19 {
20 class Texture2D;
21 }
22 namespace rx
23 {
24 class Renderer;
25 class SwapChain;
26 }
27
28 namespace egl
29 {
30 class Display;
31 class Config;
32
33 class Surface
34 {
35   public:
36     Surface(Display *display, const egl::Config *config, HWND window, EGLint fixedSize, EGLint width, EGLint height, EGLint postSubBufferSupported);
37     Surface(Display *display, const egl::Config *config, HANDLE shareHandle, EGLint width, EGLint height, EGLenum textureFormat, EGLenum textureTarget);
38
39     virtual ~Surface();
40
41     bool initialize();
42     void release();
43     bool resetSwapChain();
44
45     HWND getWindowHandle();
46     bool swap();
47     bool postSubBuffer(EGLint x, EGLint y, EGLint width, EGLint height);
48
49     virtual EGLint isPostSubBufferSupported() const;
50
51     virtual rx::SwapChain *getSwapChain() const;
52
53     void setSwapInterval(EGLint interval);
54     bool checkForOutOfDateSwapChain();   // Returns true if swapchain changed due to resize or interval update
55
56     virtual EGLint getConfigID() const;
57     virtual EGLint getWidth() const;
58     virtual EGLint getHeight() const;
59     virtual EGLint getPixelAspectRatio() const;
60     virtual EGLenum getRenderBuffer() const;
61     virtual EGLenum getSwapBehavior() const;
62     virtual EGLenum getTextureFormat() const;
63     virtual EGLenum getTextureTarget() const;
64     virtual EGLenum getFormat() const;
65
66     virtual void setBoundTexture(gl::Texture2D *texture);
67     virtual gl::Texture2D *getBoundTexture() const;
68
69     EGLint isFixedSize() const;
70
71 private:
72     DISALLOW_COPY_AND_ASSIGN(Surface);
73
74     Display *const mDisplay;
75     rx::Renderer *mRenderer;
76
77     HANDLE mShareHandle;
78     rx::SwapChain *mSwapChain;
79
80     void subclassWindow();
81     void unsubclassWindow();
82     bool resizeSwapChain(int backbufferWidth, int backbufferHeight);
83     bool resetSwapChain(int backbufferWidth, int backbufferHeight);
84     bool swapRect(EGLint x, EGLint y, EGLint width, EGLint height);
85
86     const HWND mWindow;            // Window that the surface is created for.
87     bool mWindowSubclassed;        // Indicates whether we successfully subclassed mWindow for WM_RESIZE hooking
88     const egl::Config *mConfig;    // EGL config surface was created with
89     EGLint mHeight;                // Height of surface
90     EGLint mWidth;                 // Width of surface
91 //  EGLint horizontalResolution;   // Horizontal dot pitch
92 //  EGLint verticalResolution;     // Vertical dot pitch
93 //  EGLBoolean largestPBuffer;     // If true, create largest pbuffer possible
94 //  EGLBoolean mipmapTexture;      // True if texture has mipmaps
95 //  EGLint mipmapLevel;            // Mipmap level to render to
96 //  EGLenum multisampleResolve;    // Multisample resolve behavior
97     EGLint mPixelAspectRatio;      // Display aspect ratio
98     EGLenum mRenderBuffer;         // Render buffer
99     EGLenum mSwapBehavior;         // Buffer swap behavior
100     EGLenum mTextureFormat;        // Format of texture: RGB, RGBA, or no texture
101     EGLenum mTextureTarget;        // Type of texture: 2D or no texture
102 //  EGLenum vgAlphaFormat;         // Alpha format for OpenVG
103 //  EGLenum vgColorSpace;          // Color space for OpenVG
104     EGLint mSwapInterval;
105     EGLint mPostSubBufferSupported;
106     EGLint mFixedSize;
107
108     bool mSwapIntervalDirty;
109     gl::Texture2D *mTexture;
110 };
111 }
112
113 #endif   // LIBEGL_SURFACE_H_