• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  **
3  ** Copyright 2006, The Android Open Source Project
4  **
5  ** Licensed under the Apache License, Version 2.0 (the "License");
6  ** you may not use this file except in compliance with the License.
7  ** You may obtain a copy of the License at
8  **
9  **     http://www.apache.org/licenses/LICENSE-2.0
10  **
11  ** Unless required by applicable law or agreed to in writing, software
12  ** distributed under the License is distributed on an "AS IS" BASIS,
13  ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  ** See the License for the specific language governing permissions and
15  ** limitations under the License.
16  */
17 
18 #include <stdlib.h>
19 #include <stdio.h>
20 
21 #include <EGL/egl.h>
22 #include <GLES/gl.h>
23 #include <GLES/glext.h>
24 
25 #include <utils/StopWatch.h>
26 #include <ui/FramebufferNativeWindow.h>
27 #include "EGLUtils.h"
28 
29 using namespace android;
30 
main(int argc,char ** argv)31 int main(int argc, char** argv)
32 {
33     EGLint configAttribs[] = {
34             EGL_SURFACE_TYPE,   EGL_WINDOW_BIT,
35             EGL_NONE
36     };
37 
38     EGLint majorVersion;
39     EGLint minorVersion;
40     EGLContext context;
41     EGLConfig config;
42     EGLint numConfigs=0;
43     EGLSurface surface;
44     EGLint w, h;
45     EGLDisplay dpy;
46 
47 
48     EGLNativeWindowType window = android_createDisplaySurface();
49 
50     dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY);
51     eglInitialize(dpy, &majorVersion, &minorVersion);
52     eglGetConfigs(dpy, NULL, 0, &numConfigs);
53     printf("# configs = %d\n", numConfigs);
54 
55     status_t err = EGLUtils::selectConfigForNativeWindow(
56             dpy, configAttribs, window, &config);
57     if (err) {
58         fprintf(stderr, "error: %s", EGLUtils::strerror(eglGetError()));
59         eglTerminate(dpy);
60         return 0;
61     }
62 
63     EGLint r,g,b,a, vid;
64     eglGetConfigAttrib(dpy, config, EGL_RED_SIZE,   &r);
65     eglGetConfigAttrib(dpy, config, EGL_GREEN_SIZE, &g);
66     eglGetConfigAttrib(dpy, config, EGL_BLUE_SIZE,  &b);
67     eglGetConfigAttrib(dpy, config, EGL_ALPHA_SIZE, &a);
68     eglGetConfigAttrib(dpy, config, EGL_NATIVE_VISUAL_ID, &vid);
69 
70     surface = eglCreateWindowSurface(dpy, config, window, NULL);
71     if (surface == EGL_NO_SURFACE) {
72         EGLint err = eglGetError();
73         fprintf(stderr, "error: %s, config=%p, format = %d-%d-%d-%d, visual-id = %d\n",
74                 EGLUtils::strerror(err), config, r,g,b,a, vid);
75         eglTerminate(dpy);
76         return 0;
77     } else {
78         printf("config=%p, format = %d-%d-%d-%d, visual-id = %d\n",
79                 config, r,g,b,a, vid);
80     }
81 
82     context = eglCreateContext(dpy, config, NULL, NULL);
83     eglMakeCurrent(dpy, surface, surface, context);
84     eglQuerySurface(dpy, surface, EGL_WIDTH, &w);
85     eglQuerySurface(dpy, surface, EGL_HEIGHT, &h);
86 
87     printf("w=%d, h=%d\n", w, h);
88 
89     glDisable(GL_DITHER);
90     glEnable(GL_BLEND);
91 
92     glViewport(0, 0, w, h);
93     glOrthof(0, w, 0, h, 0, 1);
94 
95     eglSwapInterval(dpy, 1);
96 
97     glClearColor(1,0,0,0);
98     glClear(GL_COLOR_BUFFER_BIT);
99     eglSwapBuffers(dpy, surface);
100 
101 
102     int time = 10;
103     printf("screen should flash red/green quickly for %d s...\n", time);
104 
105     int c = 0;
106     nsecs_t start = systemTime();
107     nsecs_t t;
108     do {
109         glClearColor(1,0,0,0);
110         glClear(GL_COLOR_BUFFER_BIT);
111         eglSwapBuffers(dpy, surface);
112         glClearColor(0,1,0,0);
113         glClear(GL_COLOR_BUFFER_BIT);
114         eglSwapBuffers(dpy, surface);
115         t = systemTime() - start;
116         c += 2;
117     } while (int(ns2s(t))<=time);
118 
119     double p =  (double(t) / c) / 1000000000.0;
120     printf("refresh-rate is %f fps (%f ms)\n", 1.0f/p, p*1000.0);
121 
122     eglTerminate(dpy);
123 
124     return 0;
125 }
126