//
// 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 egl
{
class Surface
{
  public:
    Surface(IDirect3DDevice9 *device, IDirect3DSwapChain9 *swapChain, IDirect3DSurface9* depthStencil, EGLint configID);

    ~Surface();

    HWND getWindowHandle();
    void swap();

    virtual EGLint getWidth() const;
    virtual EGLint getHeight() const;

    virtual IDirect3DSurface9 *getRenderTarget();
    virtual IDirect3DSurface9 *getDepthStencil();

  private:
    DISALLOW_COPY_AND_ASSIGN(Surface);
    IDirect3DSwapChain9 *const mSwapChain;
    IDirect3DSurface9 *mBackBuffer;
    IDirect3DSurface9 *mRenderTarget;
    IDirect3DSurface9 *mDepthStencil;

    const EGLint mConfigID;            // ID of EGLConfig 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 textureFormat;            // Format of texture: RGB, RGBA, or no texture
//    EGLenum textureTarget;            // Type of texture: 2D or no texture
//    EGLenum vgAlphaFormat;            // Alpha format for OpenVG
//    EGLenum vgColorSpace;            // Color space for OpenVG
};
}

#endif   // INCLUDE_SURFACE_H_
