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 <unistd.h>
19#include <stdlib.h>
20#include <stdio.h>
21
22#include <EGL/egl.h>
23#include <GLES/gl.h>
24#include <GLES/glext.h>
25
26#include <utils/StopWatch.h>
27#include <WindowSurface.h>
28#include <EGLUtils.h>
29
30using namespace android;
31
32int main(int argc, char** argv)
33{
34    EGLint configAttribs[] = {
35         EGL_DEPTH_SIZE, 0,
36         EGL_NONE
37     };
38
39     EGLint majorVersion;
40     EGLint minorVersion;
41     EGLContext context;
42     EGLConfig config;
43     EGLSurface surface;
44     EGLint w, h;
45     EGLDisplay dpy;
46
47     WindowSurface windowSurface;
48     EGLNativeWindowType window = windowSurface.getSurface();
49
50     dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY);
51     eglInitialize(dpy, &majorVersion, &minorVersion);
52
53     status_t err = EGLUtils::selectConfigForNativeWindow(
54             dpy, configAttribs, window, &config);
55     if (err) {
56         fprintf(stderr, "couldn't find an EGLConfig matching the screen format\n");
57         return 0;
58     }
59
60     surface = eglCreateWindowSurface(dpy, config, window, NULL);
61     context = eglCreateContext(dpy, config, NULL, NULL);
62     eglMakeCurrent(dpy, surface, surface, context);
63     eglQuerySurface(dpy, surface, EGL_WIDTH, &w);
64     eglQuerySurface(dpy, surface, EGL_HEIGHT, &h);
65
66     printf("w=%d, h=%d\n", w, h);
67
68     glBindTexture(GL_TEXTURE_2D, 0);
69     glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
70     glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
71     glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
72     glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
73     glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
74     glDisable(GL_DITHER);
75     glDisable(GL_BLEND);
76     glEnable(GL_TEXTURE_2D);
77     glColor4f(1,1,1,1);
78
79
80     // default pack-alignment is 4
81     const uint16_t t16[64] = { 0xFFFF, 0, 0xF800, 0, 0x07E0, 0, 0x001F, 0 };
82
83     const GLfloat vertices[4][2] = {
84             { w/2,  0 },
85             { w/2,  h }
86     };
87
88     const GLfloat texCoords[4][2] = {
89             { 0,  0 },
90             { 1,  1 }
91     };
92
93     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1, 4, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, t16);
94
95     glViewport(0, 0, w, h);
96     glMatrixMode(GL_PROJECTION);
97     glLoadIdentity();
98     glOrthof(0, w, 0, h, 0, 1);
99
100     glEnableClientState(GL_VERTEX_ARRAY);
101     glEnableClientState(GL_TEXTURE_COORD_ARRAY);
102     glVertexPointer(2, GL_FLOAT, 0, vertices);
103     glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
104
105     glClearColor(0,0,0,0);
106     glClear(GL_COLOR_BUFFER_BIT);
107     glDrawArrays(GL_LINES, 0, 2);
108     eglSwapBuffers(dpy, surface);
109
110     usleep(5*1000000);
111
112     eglTerminate(dpy);
113
114     return 0;
115}
116