textures.cpp revision 653870d5e945ff94ff8136c97db0a016fc119683
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 25653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian#include <ui/FramebufferNativeWindow.h> 26653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian#include <ui/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 45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY); 46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project eglInitialize(dpy, &majorVersion, &minorVersion); 47653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian 48653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian EGLNativeWindowType window = android_createDisplaySurface(); 49591018aaf9e95b9d2f6d9742194e940605b1bffaMathias Agopian 50653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian status_t err = EGLUtils::selectConfigForNativeWindow( 51653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian dpy, configAttribs, window, &config); 52653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian if (err) { 53653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian fprintf(stderr, "couldn't find an EGLConfig matching the screen format\n"); 54653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian return 0; 55591018aaf9e95b9d2f6d9742194e940605b1bffaMathias Agopian } 56653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian 57653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian surface = eglCreateWindowSurface(dpy, config, window, NULL); 58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project context = eglCreateContext(dpy, config, NULL, NULL); 59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project eglMakeCurrent(dpy, surface, surface, context); 60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project eglQuerySurface(dpy, surface, EGL_WIDTH, &w); 61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project eglQuerySurface(dpy, surface, EGL_HEIGHT, &h); 62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project GLint dim = w<h ? w : h; 63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project GLint crop[4] = { 0, 4, 4, -4 }; 66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project glBindTexture(GL_TEXTURE_2D, 0); 67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop); 68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project glEnable(GL_TEXTURE_2D); 74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project glColor4f(1,1,1,1); 75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // packing is always 4 77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint8_t t8[] = { 78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 0x00, 0x55, 0x00, 0x55, 79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 0xAA, 0xFF, 0xAA, 0xFF, 80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 0x00, 0x55, 0x00, 0x55, 81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 0xAA, 0xFF, 0xAA, 0xFF }; 82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint16_t t16[] = { 84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 0x0000, 0x5555, 0x0000, 0x5555, 85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 0xAAAA, 0xFFFF, 0xAAAA, 0xFFFF, 86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 0x0000, 0x5555, 0x0000, 0x5555, 87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 0xAAAA, 0xFFFF, 0xAAAA, 0xFFFF }; 88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint16_t t5551[] = { 90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 0x0000, 0xFFFF, 0x0000, 0xFFFF, 91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 0xFFFF, 0x0000, 0xFFFF, 0x0000, 92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 0x0000, 0xFFFF, 0x0000, 0xFFFF, 93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 0xFFFF, 0x0000, 0xFFFF, 0x0000 }; 94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t t32[] = { 96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 0xFF000000, 0xFF0000FF, 0xFF00FF00, 0xFFFF0000, 97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 0xFF00FF00, 0xFFFF0000, 0xFF000000, 0xFF0000FF, 98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 0xFF00FFFF, 0xFF00FF00, 0x00FF00FF, 0xFFFFFF00, 99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 0xFF000000, 0xFFFF00FF, 0xFF00FFFF, 0xFFFFFFFF 100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project }; 101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project glClear(GL_COLOR_BUFFER_BIT); 104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, 4, 4, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, t8); 105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project glDrawTexiOES(0, 0, 0, dim/2, dim/2); 106edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 4, 4, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, t16); 108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project glDrawTexiOES(dim/2, 0, 0, dim/2, dim/2); 109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 110edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, t16); 111edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project glDrawTexiOES(0, dim/2, 0, dim/2, dim/2); 112edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 113edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, t32); 114edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project glDrawTexiOES(dim/2, dim/2, 0, dim/2, dim/2); 115edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 116edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project eglSwapBuffers(dpy, surface); 117edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return 0; 118edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 119