1 //
2 // Copyright 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 #ifndef SAMPLE_UTIL_SAMPLE_APPLICATION_H
8 #define SAMPLE_UTIL_SAMPLE_APPLICATION_H
9 
10 #include <stdint.h>
11 #include <list>
12 #include <memory>
13 #include <string>
14 
15 #include "common/system_utils.h"
16 #include "util/EGLPlatformParameters.h"
17 #include "util/OSWindow.h"
18 #include "util/Timer.h"
19 #include "util/egl_loader_autogen.h"
20 
21 class EGLWindow;
22 class GLWindowBase;
23 
24 namespace angle
25 {
26 class Library;
27 }  // namespace angle
28 
29 class SampleApplication
30 {
31   public:
32     SampleApplication(std::string name,
33                       int argc,
34                       char **argv,
35                       EGLint glesMajorVersion = 2,
36                       EGLint glesMinorVersion = 0,
37                       uint32_t width          = 1280,
38                       uint32_t height         = 720);
39     virtual ~SampleApplication();
40 
41     virtual bool initialize();
42     virtual void destroy();
43 
44     virtual void step(float dt, double totalTime);
45     virtual void draw();
46 
47     virtual void swap();
48 
49     virtual void onKeyUp(const Event::KeyEvent &keyEvent);
50     virtual void onKeyDown(const Event::KeyEvent &keyEvent);
51 
52     OSWindow *getWindow() const;
53     EGLConfig getConfig() const;
54     EGLDisplay getDisplay() const;
55     EGLSurface getSurface() const;
56     EGLContext getContext() const;
57 
58     int run();
59     void exit();
60 
61   private:
62     bool popEvent(Event *event);
63 
64     std::string mName;
65     uint32_t mWidth;
66     uint32_t mHeight;
67     bool mRunning;
68 
69     Timer mTimer;
70     uint32_t mFrameCount;
71     GLWindowBase *mGLWindow;
72     EGLWindow *mEGLWindow;
73     OSWindow *mOSWindow;
74     angle::GLESDriverType mDriverType;
75 
76     EGLPlatformParameters mPlatformParams;
77 
78     // Handle to the entry point binding library.
79     std::unique_ptr<angle::Library> mEntryPointsLib;
80 };
81 
82 #endif  // SAMPLE_UTIL_SAMPLE_APPLICATION_H
83