Home | History | Annotate | Download | only in linetex
      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