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 private GLUtils() { 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * return the internal format as defined by OpenGL ES of the supplied bitmap. 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bitmap 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the internal format of the bitmap. 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static int getInternalFormat(Bitmap bitmap) { 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (bitmap == null) { 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException("getInternalFormat can't be used with a null Bitmap"); 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4470a1875635cf988b9962fbe2325ea73fd346858cJack Palevich if (bitmap.isRecycled()) { 4570a1875635cf988b9962fbe2325ea73fd346858cJack Palevich throw new IllegalArgumentException("bitmap is recycled"); 4670a1875635cf988b9962fbe2325ea73fd346858cJack Palevich } 47708c17b4168404042852e480f25a91a02cf14247Jack Palevich int result = native_getInternalFormat(bitmap); 48708c17b4168404042852e480f25a91a02cf14247Jack Palevich if (result < 0) { 49708c17b4168404042852e480f25a91a02cf14247Jack Palevich throw new IllegalArgumentException("Unknown internalformat"); 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 51708c17b4168404042852e480f25a91a02cf14247Jack Palevich return result; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 55708c17b4168404042852e480f25a91a02cf14247Jack Palevich * Return the type as defined by OpenGL ES of the supplied bitmap, if there 56708c17b4168404042852e480f25a91a02cf14247Jack Palevich * is one. If the bitmap is stored in a compressed format, it may not have 57708c17b4168404042852e480f25a91a02cf14247Jack Palevich * a valid OpenGL ES type. 58708c17b4168404042852e480f25a91a02cf14247Jack Palevich * @throws IllegalArgumentException if the bitmap does not have a type. 59708c17b4168404042852e480f25a91a02cf14247Jack Palevich * @param bitmap 60708c17b4168404042852e480f25a91a02cf14247Jack Palevich * @return the OpenGL ES type of the bitmap. 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static int getType(Bitmap bitmap) { 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (bitmap == null) { 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException("getType can't be used with a null Bitmap"); 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6670a1875635cf988b9962fbe2325ea73fd346858cJack Palevich if (bitmap.isRecycled()) { 6770a1875635cf988b9962fbe2325ea73fd346858cJack Palevich throw new IllegalArgumentException("bitmap is recycled"); 6870a1875635cf988b9962fbe2325ea73fd346858cJack Palevich } 69708c17b4168404042852e480f25a91a02cf14247Jack Palevich int result = native_getType(bitmap); 70708c17b4168404042852e480f25a91a02cf14247Jack Palevich if (result < 0) { 71708c17b4168404042852e480f25a91a02cf14247Jack Palevich throw new IllegalArgumentException("Unknown type"); 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 73708c17b4168404042852e480f25a91a02cf14247Jack Palevich return result; 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Calls glTexImage2D() on the current OpenGL context. If no context is 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * current the behavior is the same as calling glTexImage2D() with no 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * current context, that is, eglGetError() will return the appropriate 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * error. 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unlike glTexImage2D() bitmap cannot be null and will raise an exception 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in that case. 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * All other parameters are identical to those used for glTexImage2D(). 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * NOTE: this method doesn't change GL_UNPACK_ALIGNMENT, you must make 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * sure to set it properly according to the supplied bitmap. 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Whether or not bitmap can have non power of two dimensions depends on 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the current OpenGL context. Always check glGetError() some time 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * after calling this method, just like when using OpenGL directly. 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param target 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param level 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param internalformat 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bitmap 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param border 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void texImage2D(int target, int level, int internalformat, 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap bitmap, int border) { 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (bitmap == null) { 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException("texImage2D can't be used with a null Bitmap"); 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10370a1875635cf988b9962fbe2325ea73fd346858cJack Palevich if (bitmap.isRecycled()) { 10470a1875635cf988b9962fbe2325ea73fd346858cJack Palevich throw new IllegalArgumentException("bitmap is recycled"); 10570a1875635cf988b9962fbe2325ea73fd346858cJack Palevich } 106708c17b4168404042852e480f25a91a02cf14247Jack Palevich if (native_texImage2D(target, level, internalformat, bitmap, -1, border)!=0) { 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException("invalid Bitmap format"); 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A version of texImage2D() that takes an explicit type parameter 113708c17b4168404042852e480f25a91a02cf14247Jack Palevich * as defined by the OpenGL ES specification. The actual type and 114708c17b4168404042852e480f25a91a02cf14247Jack Palevich * internalformat of the bitmap must be compatible with the specified 115708c17b4168404042852e480f25a91a02cf14247Jack Palevich * type and internalformat parameters. 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param target 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param level 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param internalformat 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bitmap 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param type 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param border 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void texImage2D(int target, int level, int internalformat, 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap bitmap, int type, int border) { 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (bitmap == null) { 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException("texImage2D can't be used with a null Bitmap"); 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12970a1875635cf988b9962fbe2325ea73fd346858cJack Palevich if (bitmap.isRecycled()) { 13070a1875635cf988b9962fbe2325ea73fd346858cJack Palevich throw new IllegalArgumentException("bitmap is recycled"); 13170a1875635cf988b9962fbe2325ea73fd346858cJack Palevich } 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (native_texImage2D(target, level, internalformat, bitmap, type, border)!=0) { 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException("invalid Bitmap format"); 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 138708c17b4168404042852e480f25a91a02cf14247Jack Palevich * A version of texImage2D that determines the internalFormat and type 139708c17b4168404042852e480f25a91a02cf14247Jack Palevich * automatically. 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param target 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param level 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bitmap 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param border 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void texImage2D(int target, int level, Bitmap bitmap, 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int border) { 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (bitmap == null) { 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException("texImage2D can't be used with a null Bitmap"); 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1515f89f510f327228d4ba2261aff7e8faa7d3715aaJack Palevich if (bitmap.isRecycled()) { 1525f89f510f327228d4ba2261aff7e8faa7d3715aaJack Palevich throw new IllegalArgumentException("bitmap is recycled"); 1535f89f510f327228d4ba2261aff7e8faa7d3715aaJack Palevich } 154708c17b4168404042852e480f25a91a02cf14247Jack Palevich if (native_texImage2D(target, level, -1, bitmap, -1, border)!=0) { 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException("invalid Bitmap format"); 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Calls glTexSubImage2D() on the current OpenGL context. If no context is 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * current the behavior is the same as calling glTexSubImage2D() with no 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * current context, that is, eglGetError() will return the appropriate 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * error. 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unlike glTexSubImage2D() bitmap cannot be null and will raise an exception 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in that case. 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * All other parameters are identical to those used for glTexSubImage2D(). 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * NOTE: this method doesn't change GL_UNPACK_ALIGNMENT, you must make 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * sure to set it properly according to the supplied bitmap. 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Whether or not bitmap can have non power of two dimensions depends on 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the current OpenGL context. Always check glGetError() some time 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * after calling this method, just like when using OpenGL directly. 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param target 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param level 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param xoffset 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param yoffset 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bitmap 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void texSubImage2D(int target, int level, int xoffset, int yoffset, 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap bitmap) { 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (bitmap == null) { 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException("texSubImage2D can't be used with a null Bitmap"); 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18670a1875635cf988b9962fbe2325ea73fd346858cJack Palevich if (bitmap.isRecycled()) { 18770a1875635cf988b9962fbe2325ea73fd346858cJack Palevich throw new IllegalArgumentException("bitmap is recycled"); 18870a1875635cf988b9962fbe2325ea73fd346858cJack Palevich } 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int type = getType(bitmap); 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (native_texSubImage2D(target, level, xoffset, yoffset, bitmap, -1, type)!=0) { 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException("invalid Bitmap format"); 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A version of texSubImage2D() that takes an explicit type parameter 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as defined by the OpenGL ES specification. 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param target 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param level 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param xoffset 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param yoffset 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bitmap 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param type 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void texSubImage2D(int target, int level, int xoffset, int yoffset, 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap bitmap, int format, int type) { 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (bitmap == null) { 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException("texSubImage2D can't be used with a null Bitmap"); 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21170a1875635cf988b9962fbe2325ea73fd346858cJack Palevich if (bitmap.isRecycled()) { 21270a1875635cf988b9962fbe2325ea73fd346858cJack Palevich throw new IllegalArgumentException("bitmap is recycled"); 21370a1875635cf988b9962fbe2325ea73fd346858cJack Palevich } 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (native_texSubImage2D(target, level, xoffset, yoffset, bitmap, format, type)!=0) { 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException("invalid Bitmap format"); 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 219407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy /** 220407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy * Return a string for the EGL error code, or the hex representation 221407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy * if the error is unknown. 22264d10a1da0a702ffeb086ad9c4a632f2712f1dadSiva Velusamy * 223407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy * @param error The EGL error to convert into a String. 22464d10a1da0a702ffeb086ad9c4a632f2712f1dadSiva Velusamy * 225407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy * @return An error string corresponding to the EGL error code. 226407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy */ 227407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy public static String getEGLErrorString(int error) { 228407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy switch (error) { 229407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL10.EGL_SUCCESS: 230407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_SUCCESS"; 231407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL10.EGL_NOT_INITIALIZED: 232407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_NOT_INITIALIZED"; 233407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL10.EGL_BAD_ACCESS: 234407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_BAD_ACCESS"; 235407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL10.EGL_BAD_ALLOC: 236407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_BAD_ALLOC"; 237407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL10.EGL_BAD_ATTRIBUTE: 238407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_BAD_ATTRIBUTE"; 239407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL10.EGL_BAD_CONFIG: 240407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_BAD_CONFIG"; 241407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL10.EGL_BAD_CONTEXT: 242407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_BAD_CONTEXT"; 243407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL10.EGL_BAD_CURRENT_SURFACE: 244407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_BAD_CURRENT_SURFACE"; 245407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL10.EGL_BAD_DISPLAY: 246407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_BAD_DISPLAY"; 247407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL10.EGL_BAD_MATCH: 248407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_BAD_MATCH"; 249407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL10.EGL_BAD_NATIVE_PIXMAP: 250407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_BAD_NATIVE_PIXMAP"; 251407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL10.EGL_BAD_NATIVE_WINDOW: 252407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_BAD_NATIVE_WINDOW"; 253407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL10.EGL_BAD_PARAMETER: 254407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_BAD_PARAMETER"; 255407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL10.EGL_BAD_SURFACE: 256407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_BAD_SURFACE"; 257407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy case EGL11.EGL_CONTEXT_LOST: 258407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "EGL_CONTEXT_LOST"; 259407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy default: 260407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy return "0x" + Integer.toHexString(error); 261407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy } 262407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy } 263407ec78b828173257b0c5dae221649a4ccd8b058Romain Guy 26464d10a1da0a702ffeb086ad9c4a632f2712f1dadSiva Velusamy /** 2650c1761bd37815c3776608a19c8e11d862b3e910cSiva Velusamy * Set OpenGL Tracing level for this application. 26664d10a1da0a702ffeb086ad9c4a632f2712f1dadSiva Velusamy * @hide 26764d10a1da0a702ffeb086ad9c4a632f2712f1dadSiva Velusamy */ 2680c1761bd37815c3776608a19c8e11d862b3e910cSiva Velusamy native public static void setTracingLevel(int level); 26964d10a1da0a702ffeb086ad9c4a632f2712f1dadSiva Velusamy 270708c17b4168404042852e480f25a91a02cf14247Jack Palevich native private static int native_getInternalFormat(Bitmap bitmap); 271708c17b4168404042852e480f25a91a02cf14247Jack Palevich native private static int native_getType(Bitmap bitmap); 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native private static int native_texImage2D(int target, int level, int internalformat, 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap bitmap, int type, int border); 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native private static int native_texSubImage2D(int target, int level, int xoffset, int yoffset, 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap bitmap, int format, int type); 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 277