1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/*
2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project**
3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** Copyright 2006, The Android Open Source Project
4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project**
5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License");
6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** you may not use this file except in compliance with the License.
7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** You may obtain a copy of the License at
8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project**
9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project**     http://www.apache.org/licenses/LICENSE-2.0
10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project**
11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** Unless required by applicable law or agreed to in writing, software
12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** distributed under the License is distributed on an "AS IS" BASIS,
13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** See the License for the specific language governing permissions and
15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** limitations under the License.
16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project*/
17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdlib.h>
19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdio.h>
20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <EGL/egl.h>
22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <GLES/gl.h>
23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <GLES/glext.h>
24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
256ef57d7b368ebbac5f2b27c36a9032fee1cda8b1Andy McFadden#include <WindowSurface.h>
266ef57d7b368ebbac5f2b27c36a9032fee1cda8b1Andy McFadden#include <EGLUtils.h>
27653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian
28653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopianusing namespace android;
29653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian
30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectint main(int argc, char** argv)
31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
32653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian    EGLint configAttribs[] = {
33653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian         EGL_DEPTH_SIZE, 0,
34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         EGL_NONE
35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     };
36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     EGLint majorVersion;
38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     EGLint minorVersion;
39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     EGLContext context;
40653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian     EGLConfig config;
41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     EGLSurface surface;
42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     EGLint w, h;
43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     EGLDisplay dpy;
44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
456ef57d7b368ebbac5f2b27c36a9032fee1cda8b1Andy McFadden     WindowSurface windowSurface;
466ef57d7b368ebbac5f2b27c36a9032fee1cda8b1Andy McFadden     EGLNativeWindowType window = windowSurface.getSurface();
471d3bcd6e217e7ef177287d06f6fdf6149f453830Mathias Agopian
48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY);
49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     eglInitialize(dpy, &majorVersion, &minorVersion);
50653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian
51653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian     status_t err = EGLUtils::selectConfigForNativeWindow(
52653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian             dpy, configAttribs, window, &config);
53653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian     if (err) {
54653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian         fprintf(stderr, "couldn't find an EGLConfig matching the screen format\n");
55653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian         return 0;
56591018aaf9e95b9d2f6d9742194e940605b1bffaMathias Agopian     }
57653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian
58653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian     surface = eglCreateWindowSurface(dpy, config, window, NULL);
59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     context = eglCreateContext(dpy, config, NULL, NULL);
60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     eglMakeCurrent(dpy, surface, surface, context);
61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     eglQuerySurface(dpy, surface, EGL_WIDTH, &w);
62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     eglQuerySurface(dpy, surface, EGL_HEIGHT, &h);
63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     GLint dim = w<h ? w : h;
64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     GLint crop[4] = { 0, 4, 4, -4 };
67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glBindTexture(GL_TEXTURE_2D, 0);
68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop);
69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glEnable(GL_TEXTURE_2D);
75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glColor4f(1,1,1,1);
76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     // packing is always 4
78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     uint8_t t8[]  = {
79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project             0x00, 0x55, 0x00, 0x55,
80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project             0xAA, 0xFF, 0xAA, 0xFF,
81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project             0x00, 0x55, 0x00, 0x55,
82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project             0xAA, 0xFF, 0xAA, 0xFF  };
83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     uint16_t t16[]  = {
85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project             0x0000, 0x5555, 0x0000, 0x5555,
86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project             0xAAAA, 0xFFFF, 0xAAAA, 0xFFFF,
87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project             0x0000, 0x5555, 0x0000, 0x5555,
88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project             0xAAAA, 0xFFFF, 0xAAAA, 0xFFFF  };
89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     uint16_t t5551[]  = {
91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project             0x0000, 0xFFFF, 0x0000, 0xFFFF,
92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project             0xFFFF, 0x0000, 0xFFFF, 0x0000,
93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project             0x0000, 0xFFFF, 0x0000, 0xFFFF,
94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project             0xFFFF, 0x0000, 0xFFFF, 0x0000  };
95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     uint32_t t32[]  = {
97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project             0xFF000000, 0xFF0000FF, 0xFF00FF00, 0xFFFF0000,
98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project             0xFF00FF00, 0xFFFF0000, 0xFF000000, 0xFF0000FF,
99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project             0xFF00FFFF, 0xFF00FF00, 0x00FF00FF, 0xFFFFFF00,
100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project             0xFF000000, 0xFFFF00FF, 0xFF00FFFF, 0xFFFFFFFF
101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     };
102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glClear(GL_COLOR_BUFFER_BIT);
105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, 4, 4, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, t8);
106edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glDrawTexiOES(0, 0, 0, dim/2, dim/2);
107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 4, 4, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, t16);
109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glDrawTexiOES(dim/2, 0, 0, dim/2, dim/2);
110edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
111edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, t16);
112edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glDrawTexiOES(0, dim/2, 0, dim/2, dim/2);
113edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
114edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, t32);
115edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glDrawTexiOES(dim/2, dim/2, 0, dim/2, dim/2);
116edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
117edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     eglSwapBuffers(dpy, surface);
1186ef57d7b368ebbac5f2b27c36a9032fee1cda8b1Andy McFadden
1196ef57d7b368ebbac5f2b27c36a9032fee1cda8b1Andy McFadden     sleep(2);      // so you have a chance to admire it
120edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     return 0;
121edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
122