Edit

kc3-lang/angle/src/libEGL/Surface.h

Branch :

  • Show log

    Commit

  • Author : daniel@transgaming.com
    Date : 2011-05-26 14:13:29
    Hash : c556fa57
    Message : Revert pending surface destruction (part of revision 632). TRAC #16271 Signed-off-by: Daniel Koch Author: Nicolas Capens git-svn-id: https://angleproject.googlecode.com/svn/trunk@656 736b8ea6-26fd-11df-bfd4-992fa37f6226

  • src/libEGL/Surface.h
  • //
    // Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    
    // Surface.h: Defines the egl::Surface class, representing a drawing surface
    // such as the client area of a window, including any back buffers.
    // Implements EGLSurface and related functionality. [EGL 1.4] section 2.2 page 3.
    
    #ifndef INCLUDE_SURFACE_H_
    #define INCLUDE_SURFACE_H_
    
    #define EGLAPI
    #include <EGL/egl.h>
    #include <d3d9.h>
    
    #include "common/angleutils.h"
    
    namespace gl
    {
    class Texture2D;
    }
    
    namespace egl
    {
    class Display;
    class Config;
    
    class Surface
    {
      public:
        Surface(Display *display, const egl::Config *config, HWND window);
        Surface(Display *display, const egl::Config *config, HANDLE shareHandle, EGLint width, EGLint height, EGLenum textureFormat, EGLenum textureTarget);
    
        ~Surface();
    
        bool initialize();
        void release();
        bool resetSwapChain();
    
        HWND getWindowHandle();
        bool swap();
    
        virtual EGLint getWidth() const;
        virtual EGLint getHeight() const;
    
        virtual IDirect3DSurface9 *getRenderTarget();
        virtual IDirect3DSurface9 *getDepthStencil();
        virtual IDirect3DTexture9 *getOffscreenTexture();
    
        HANDLE getShareHandle() { return mShareHandle; }
    
        void setSwapInterval(EGLint interval);
        bool checkForOutOfDateSwapChain();   // Returns true if swapchain changed due to resize or interval update
    
        virtual EGLenum getTextureFormat() const;
        virtual EGLenum getTextureTarget() const;
        virtual D3DFORMAT getFormat() const;
    
        virtual void setBoundTexture(gl::Texture2D *texture);
        virtual gl::Texture2D *getBoundTexture() const;
    
    private:
        DISALLOW_COPY_AND_ASSIGN(Surface);
    
        Display *const mDisplay;
        IDirect3DSwapChain9 *mSwapChain;
        IDirect3DSurface9 *mDepthStencil;
        IDirect3DSurface9* mRenderTarget;
        IDirect3DTexture9* mOffscreenTexture;
    
        HANDLE mShareHandle;
    
        void subclassWindow();
        void unsubclassWindow();
        bool resetSwapChain(int backbufferWidth, int backbufferHeight);
        static DWORD convertInterval(EGLint interval);
    
        const HWND mWindow;            // Window that the surface is created for.
        bool mWindowSubclassed;        // Indicates whether we successfully subclassed mWindow for WM_RESIZE hooking
        const egl::Config *mConfig;    // EGL config surface was created with
        EGLint mHeight;                // Height of surface
        EGLint mWidth;                 // Width of surface
    //  EGLint horizontalResolution;   // Horizontal dot pitch
    //  EGLint verticalResolution;     // Vertical dot pitch
    //  EGLBoolean largestPBuffer;     // If true, create largest pbuffer possible
    //  EGLBoolean mipmapTexture;      // True if texture has mipmaps
    //  EGLint mipmapLevel;            // Mipmap level to render to
    //  EGLenum multisampleResolve;    // Multisample resolve behavior
        EGLint mPixelAspectRatio;      // Display aspect ratio
        EGLenum mRenderBuffer;         // Render buffer
        EGLenum mSwapBehavior;         // Buffer swap behavior
        EGLenum mTextureFormat;        // Format of texture: RGB, RGBA, or no texture
        EGLenum mTextureTarget;        // Type of texture: 2D or no texture
    //  EGLenum vgAlphaFormat;         // Alpha format for OpenVG
    //  EGLenum vgColorSpace;          // Color space for OpenVG
        EGLint mSwapInterval;
        DWORD mPresentInterval;
        bool mPresentIntervalDirty;
        gl::Texture2D *mTexture;
    };
    }
    
    #endif   // INCLUDE_SURFACE_H_