19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.opengl; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Bitmap; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21407ec78b828173257b0c5dae221649a4ccd8b058Romain Guyimport javax.microedition.khronos.egl.EGL10; 22407ec78b828173257b0c5dae221649a4ccd8b058Romain Guyimport javax.microedition.khronos.egl.EGL11; 23407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Utility class to help bridging OpenGL ES and Android APIs. 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic final class GLUtils { 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * We use a class initializer to allow the native code to cache some 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * field offsets. 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static { 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project nativeClassInit(); 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private GLUtils() { 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * return the internal format as defined by OpenGL ES of the supplied bitmap. 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bitmap 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the internal format of the bitmap. 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static int getInternalFormat(Bitmap bitmap) { 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (bitmap == null) { 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException("getInternalFormat can't be used with a null Bitmap"); 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5270a1875635cf988b9962fbe2325ea73fd346858cJack Palevich if (bitmap.isRecycled()) { 5370a1875635cf988b9962fbe2325ea73fd346858cJack Palevich throw new IllegalArgumentException("bitmap is recycled"); 5470a1875635cf988b9962fbe2325ea73fd346858cJack Palevich } 55708c17b4168404042852e480f25a91a02cf14247Jack Palevich int result = native_getInternalFormat(bitmap); 56708c17b4168404042852e480f25a91a02cf14247Jack Palevich if (result < 0) { 57708c17b4168404042852e480f25a91a02cf14247Jack Palevich throw new IllegalArgumentException("Unknown internalformat"); 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 59708c17b4168404042852e480f25a91a02cf14247Jack Palevich return result; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 63708c17b4168404042852e480f25a91a02cf14247Jack Palevich * Return the type as defined by OpenGL ES of the supplied bitmap, if there 64708c17b4168404042852e480f25a91a02cf14247Jack Palevich * is one. If the bitmap is stored in a compressed format, it may not have 65708c17b4168404042852e480f25a91a02cf14247Jack Palevich * a valid OpenGL ES type. 66708c17b4168404042852e480f25a91a02cf14247Jack Palevich * @throws IllegalArgumentException if the bitmap does not have a type. 67708c17b4168404042852e480f25a91a02cf14247Jack Palevich * @param bitmap 68708c17b4168404042852e480f25a91a02cf14247Jack Palevich * @return the OpenGL ES type of the bitmap. 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static int getType(Bitmap bitmap) { 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (bitmap == null) { 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException("getType can't be used with a null Bitmap"); 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7470a1875635cf988b9962fbe2325ea73fd346858cJack Palevich if (bitmap.isRecycled()) { 7570a1875635cf988b9962fbe2325ea73fd346858cJack Palevich throw new IllegalArgumentException("bitmap is recycled"); 7670a1875635cf988b9962fbe2325ea73fd346858cJack Palevich } 77708c17b4168404042852e480f25a91a02cf14247Jack Palevich int result = native_getType(bitmap); 78708c17b4168404042852e480f25a91a02cf14247Jack Palevich if (result < 0) { 79708c17b4168404042852e480f25a91a02cf14247Jack Palevich throw new IllegalArgumentException("Unknown type"); 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 81708c17b4168404042852e480f25a91a02cf14247Jack Palevich return result; 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Calls glTexImage2D() on the current OpenGL context. If no context is 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * current the behavior is the same as calling glTexImage2D() with no 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * current context, that is, eglGetError() will return the appropriate 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * error. 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unlike glTexImage2D() bitmap cannot be null and will raise an exception 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in that case. 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * All other parameters are identical to those used for glTexImage2D(). 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * NOTE: this method doesn't change GL_UNPACK_ALIGNMENT, you must make 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * sure to set it properly according to the supplied bitmap. 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Whether or not bitmap can have non power of two dimensions depends on 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the current OpenGL context. Always check glGetError() some time 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * after calling this method, just like when using OpenGL directly. 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param target 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param level 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param internalformat 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bitmap 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param border 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void texImage2D(int target, int level, int internalformat, 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap bitmap, int border) { 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (bitmap == null) { 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException("texImage2D can't be used with a null Bitmap"); 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11170a1875635cf988b9962fbe2325ea73fd346858cJack Palevich if (bitmap.isRecycled()) { 11270a1875635cf988b9962fbe2325ea73fd346858cJack Palevich throw new IllegalArgumentException("bitmap is recycled"); 11370a1875635cf988b9962fbe2325ea73fd346858cJack Palevich } 114708c17b4168404042852e480f25a91a02cf14247Jack Palevich if (native_texImage2D(target, level, internalformat, bitmap, -1, border)!=0) { 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException("invalid Bitmap format"); 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A version of texImage2D() that takes an explicit type parameter 121708c17b4168404042852e480f25a91a02cf14247Jack Palevich * as defined by the OpenGL ES specification. The actual type and 122708c17b4168404042852e480f25a91a02cf14247Jack Palevich * internalformat of the bitmap must be compatible with the specified 123708c17b4168404042852e480f25a91a02cf14247Jack Palevich * type and internalformat parameters. 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param target 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param level 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param internalformat 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bitmap 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param type 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param border 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void texImage2D(int target, int level, int internalformat, 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap bitmap, int type, int border) { 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (bitmap == null) { 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException("texImage2D can't be used with a null Bitmap"); 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13770a1875635cf988b9962fbe2325ea73fd346858cJack Palevich if (bitmap.isRecycled()) { 13870a1875635cf988b9962fbe2325ea73fd346858cJack Palevich throw new IllegalArgumentException("bitmap is recycled"); 13970a1875635cf988b9962fbe2325ea73fd346858cJack Palevich } 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (native_texImage2D(target, level, internalformat, bitmap, type, border)!=0) { 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException("invalid Bitmap format"); 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 146708c17b4168404042852e480f25a91a02cf14247Jack Palevich * A version of texImage2D that determines the internalFormat and type 147708c17b4168404042852e480f25a91a02cf14247Jack Palevich * automatically. 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param target 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param level 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bitmap 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param border 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void texImage2D(int target, int level, Bitmap bitmap, 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int border) { 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (bitmap == null) { 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException("texImage2D can't be used with a null Bitmap"); 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1595f89f510f327228d4ba2261aff7e8faa7d3715aaJack Palevich if (bitmap.isRecycled()) { 1605f89f510f327228d4ba2261aff7e8faa7d3715aaJack Palevich throw new IllegalArgumentException("bitmap is recycled"); 1615f89f510f327228d4ba2261aff7e8faa7d3715aaJack Palevich } 162708c17b4168404042852e480f25a91a02cf14247Jack Palevich if (native_texImage2D(target, level, -1, bitmap, -1, border)!=0) { 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException("invalid Bitmap format"); 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Calls glTexSubImage2D() on the current OpenGL context. If no context is 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * current the behavior is the same as calling glTexSubImage2D() with no 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * current context, that is, eglGetError() will return the appropriate 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * error. 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unlike glTexSubImage2D() bitmap cannot be null and will raise an exception 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in that case. 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * All other parameters are identical to those used for glTexSubImage2D(). 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * NOTE: this method doesn't change GL_UNPACK_ALIGNMENT, you must make 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * sure to set it properly according to the supplied bitmap. 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Whether or not bitmap can have non power of two dimensions depends on 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the current OpenGL context. Always check glGetError() some time 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * after calling this method, just like when using OpenGL directly. 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param target 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param level 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param xoffset 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param yoffset 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bitmap 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void texSubImage2D(int target, int level, int xoffset, int yoffset, 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap bitmap) { 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (bitmap == null) { 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException("texSubImage2D can't be used with a null Bitmap"); 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19470a1875635cf988b9962fbe2325ea73fd346858cJack Palevich if (bitmap.isRecycled()) { 19570a1875635cf988b9962fbe2325ea73fd346858cJack Palevich throw new IllegalArgumentException("bitmap is recycled"); 19670a1875635cf988b9962fbe2325ea73fd346858cJack Palevich } 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int type = getType(bitmap); 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (native_texSubImage2D(target, level, xoffset, yoffset, bitmap, -1, type)!=0) { 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException("invalid Bitmap format"); 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A version of texSubImage2D() that takes an explicit type parameter 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as defined by the OpenGL ES specification. 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param target 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param level 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param xoffset 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param yoffset 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bitmap 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param type 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void texSubImage2D(int target, int level, int xoffset, int yoffset, 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap bitmap, int format, int type) { 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (bitmap == null) { 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException("texSubImage2D can't be used with a null Bitmap"); 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21970a1875635cf988b9962fbe2325ea73fd346858cJack Palevich if (bitmap.isRecycled()) { 22070a1875635cf988b9962fbe2325ea73fd346858cJack Palevich throw new IllegalArgumentException("bitmap is recycled"); 22170a1875635cf988b9962fbe2325ea73fd346858cJack Palevich } 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (native_texSubImage2D(target, level, xoffset, yoffset, bitmap, format, type)!=0) { 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException("invalid Bitmap format"); 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 227407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy /** 228407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy * Return a string for the EGL error code, or the hex representation 229407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy * if the error is unknown. 23064d10a1da0a702ffeb086ad9c4a632f2712f1dadSiva Velusamy * 231407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy * @param error The EGL error to convert into a String. 23264d10a1da0a702ffeb086ad9c4a632f2712f1dadSiva Velusamy * 233407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy * @return An error string corresponding to the EGL error code. 234407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy */ 235407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy public static String getEGLErrorString(int error) { 236407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy switch (error) { 237407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL10.EGL_SUCCESS: 238407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_SUCCESS"; 239407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL10.EGL_NOT_INITIALIZED: 240407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_NOT_INITIALIZED"; 241407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL10.EGL_BAD_ACCESS: 242407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_BAD_ACCESS"; 243407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL10.EGL_BAD_ALLOC: 244407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_BAD_ALLOC"; 245407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL10.EGL_BAD_ATTRIBUTE: 246407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_BAD_ATTRIBUTE"; 247407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL10.EGL_BAD_CONFIG: 248407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_BAD_CONFIG"; 249407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL10.EGL_BAD_CONTEXT: 250407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_BAD_CONTEXT"; 251407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL10.EGL_BAD_CURRENT_SURFACE: 252407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_BAD_CURRENT_SURFACE"; 253407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL10.EGL_BAD_DISPLAY: 254407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_BAD_DISPLAY"; 255407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL10.EGL_BAD_MATCH: 256407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_BAD_MATCH"; 257407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL10.EGL_BAD_NATIVE_PIXMAP: 258407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_BAD_NATIVE_PIXMAP"; 259407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL10.EGL_BAD_NATIVE_WINDOW: 260407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_BAD_NATIVE_WINDOW"; 261407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL10.EGL_BAD_PARAMETER: 262407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_BAD_PARAMETER"; 263407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL10.EGL_BAD_SURFACE: 264407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_BAD_SURFACE"; 265407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL11.EGL_CONTEXT_LOST: 266407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_CONTEXT_LOST"; 267407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy default: 268407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "0x" + Integer.toHexString(error); 269407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy } 270407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy } 271407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy 27264d10a1da0a702ffeb086ad9c4a632f2712f1dadSiva Velusamy /** 2730c1761bd37815c3776608a19c8e11d862b3e910cSiva Velusamy * Set OpenGL Tracing level for this application. 27464d10a1da0a702ffeb086ad9c4a632f2712f1dadSiva Velusamy * @hide 27564d10a1da0a702ffeb086ad9c4a632f2712f1dadSiva Velusamy */ 2760c1761bd37815c3776608a19c8e11d862b3e910cSiva Velusamy native public static void setTracingLevel(int level); 27764d10a1da0a702ffeb086ad9c4a632f2712f1dadSiva Velusamy 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native private static void nativeClassInit(); 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 280708c17b4168404042852e480f25a91a02cf14247Jack Palevich native private static int native_getInternalFormat(Bitmap bitmap); 281708c17b4168404042852e480f25a91a02cf14247Jack Palevich native private static int native_getType(Bitmap bitmap); 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native private static int native_texImage2D(int target, int level, int internalformat, 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap bitmap, int type, int border); 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native private static int native_texSubImage2D(int target, int level, int xoffset, int yoffset, 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap bitmap, int format, int type); 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 287