2014-08-21 18:04:04 +04:00
|
|
|
//
|
|
|
|
// Copyright (c) 2014 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.
|
|
|
|
//
|
|
|
|
|
|
|
|
#ifndef UTIL_EGLWINDOW_H_
|
|
|
|
#define UTIL_EGLWINDOW_H_
|
|
|
|
|
|
|
|
#define GL_GLEXT_PROTOTYPES
|
2015-07-21 19:43:50 +03:00
|
|
|
#define EGL_EGLEXT_PROTOTYPES
|
2014-08-21 18:04:04 +04:00
|
|
|
|
|
|
|
#include <GLES3/gl3.h>
|
|
|
|
#include <GLES3/gl3ext.h>
|
|
|
|
#include <GLES2/gl2.h>
|
|
|
|
#include <GLES2/gl2ext.h>
|
|
|
|
#include <EGL/egl.h>
|
|
|
|
#include <EGL/eglext.h>
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
#include <list>
|
|
|
|
#include <cstdint>
|
|
|
|
#include <memory>
|
|
|
|
|
2015-03-27 16:46:41 +03:00
|
|
|
#include "common/angleutils.h"
|
2014-08-21 18:04:04 +04:00
|
|
|
|
|
|
|
class OSWindow;
|
|
|
|
|
2015-03-20 23:14:04 +03:00
|
|
|
// A hidden define used in some renderers (currently D3D-only)
|
|
|
|
// to init a no-op renderer. Useful for performance testing.
|
|
|
|
#ifndef EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE
|
|
|
|
#define EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE 0x6AC0
|
|
|
|
#endif
|
|
|
|
|
2014-10-23 19:08:16 +04:00
|
|
|
struct EGLPlatformParameters
|
|
|
|
{
|
|
|
|
EGLint renderer;
|
|
|
|
EGLint majorVersion;
|
|
|
|
EGLint minorVersion;
|
2014-11-27 00:19:41 +03:00
|
|
|
EGLint deviceType;
|
2014-10-23 19:08:16 +04:00
|
|
|
|
|
|
|
EGLPlatformParameters();
|
|
|
|
explicit EGLPlatformParameters(EGLint renderer);
|
2014-11-27 00:19:41 +03:00
|
|
|
EGLPlatformParameters(EGLint renderer, EGLint majorVersion, EGLint minorVersion, EGLint deviceType);
|
2014-10-23 19:08:16 +04:00
|
|
|
};
|
|
|
|
|
2015-06-09 22:16:31 +03:00
|
|
|
bool operator<(const EGLPlatformParameters &a, const EGLPlatformParameters &b);
|
2015-06-16 00:00:44 +03:00
|
|
|
bool operator==(const EGLPlatformParameters &a, const EGLPlatformParameters &b);
|
2015-06-09 22:16:31 +03:00
|
|
|
|
2015-03-27 16:46:41 +03:00
|
|
|
class EGLWindow : angle::NonCopyable
|
2014-08-21 18:04:04 +04:00
|
|
|
{
|
|
|
|
public:
|
2015-07-22 21:10:19 +03:00
|
|
|
EGLWindow(EGLint glesMajorVersion, const EGLPlatformParameters &platform);
|
2014-08-21 18:04:04 +04:00
|
|
|
|
|
|
|
~EGLWindow();
|
|
|
|
|
2014-08-26 21:16:37 +04:00
|
|
|
void setClientVersion(EGLint glesMajorVersion) { mClientVersion = glesMajorVersion; }
|
2014-08-26 21:16:36 +04:00
|
|
|
void setConfigRedBits(int bits) { mRedBits = bits; }
|
|
|
|
void setConfigGreenBits(int bits) { mGreenBits = bits; }
|
|
|
|
void setConfigBlueBits(int bits) { mBlueBits = bits; }
|
|
|
|
void setConfigAlphaBits(int bits) { mAlphaBits = bits; }
|
|
|
|
void setConfigDepthBits(int bits) { mDepthBits = bits; }
|
|
|
|
void setConfigStencilBits(int bits) { mStencilBits = bits; }
|
|
|
|
void setMultisample(bool multisample) { mMultisample = multisample; }
|
|
|
|
void setSwapInterval(EGLint swapInterval) { mSwapInterval = swapInterval; }
|
|
|
|
|
2015-06-11 18:58:53 +03:00
|
|
|
static EGLBoolean FindEGLConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *config);
|
|
|
|
|
2014-08-21 18:04:04 +04:00
|
|
|
void swap();
|
|
|
|
|
2015-05-04 19:53:10 +03:00
|
|
|
EGLint getClientVersion() const { return mClientVersion; }
|
2014-10-23 19:08:16 +04:00
|
|
|
const EGLPlatformParameters &getPlatform() const { return mPlatform; }
|
2014-08-21 18:04:04 +04:00
|
|
|
EGLConfig getConfig() const;
|
|
|
|
EGLDisplay getDisplay() const;
|
|
|
|
EGLSurface getSurface() const;
|
|
|
|
EGLContext getContext() const;
|
2014-08-26 21:16:36 +04:00
|
|
|
int getConfigRedBits() const { return mRedBits; }
|
|
|
|
int getConfigGreenBits() const { return mGreenBits; }
|
|
|
|
int getConfigBlueBits() const { return mBlueBits; }
|
|
|
|
int getConfigAlphaBits() const { return mAlphaBits; }
|
|
|
|
int getConfigDepthBits() const { return mDepthBits; }
|
|
|
|
int getConfigStencilBits() const { return mStencilBits; }
|
|
|
|
bool isMultisample() const { return mMultisample; }
|
|
|
|
EGLint getSwapInterval() const { return mSwapInterval; }
|
2014-08-21 18:04:04 +04:00
|
|
|
|
2014-09-29 23:58:31 +04:00
|
|
|
bool initializeGL(OSWindow *osWindow);
|
2014-08-21 18:04:04 +04:00
|
|
|
void destroyGL();
|
2015-04-14 18:18:32 +03:00
|
|
|
bool isGLInitialized() const;
|
2014-08-21 18:04:04 +04:00
|
|
|
|
|
|
|
private:
|
|
|
|
EGLConfig mConfig;
|
|
|
|
EGLDisplay mDisplay;
|
|
|
|
EGLSurface mSurface;
|
|
|
|
EGLContext mContext;
|
|
|
|
|
2015-05-04 19:53:10 +03:00
|
|
|
EGLint mClientVersion;
|
2014-10-23 19:08:16 +04:00
|
|
|
EGLPlatformParameters mPlatform;
|
2014-08-26 21:16:36 +04:00
|
|
|
int mRedBits;
|
|
|
|
int mGreenBits;
|
|
|
|
int mBlueBits;
|
|
|
|
int mAlphaBits;
|
|
|
|
int mDepthBits;
|
|
|
|
int mStencilBits;
|
|
|
|
bool mMultisample;
|
|
|
|
EGLint mSwapInterval;
|
2014-08-21 18:04:04 +04:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif // UTIL_EGLWINDOW_H_
|