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 30 using namespace android; 31 32 int 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