1aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy/* 2aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * Copyright (C) 2011 The Android Open Source Project 3aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * 4aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 5aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * you may not use this file except in compliance with the License. 6aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * You may obtain a copy of the License at 7aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * 8aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * http://www.apache.org/licenses/LICENSE-2.0 9aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * 10aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * Unless required by applicable law or agreed to in writing, software 11aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * distributed under the License is distributed on an "AS IS" BASIS, 12aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * See the License for the specific language governing permissions and 14aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * limitations under the License. 15aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy */ 16aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy 17aa6c24c21c727a196451332448d4e3b11a80be69Romain Guypackage android.view; 18aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy 19c89b14bba0f6cc2c91629080617f7ed215f697f3Romain Guyimport android.graphics.Canvas; 20302a9df1d50373c82923bb84ff665dfce584fb22Romain Guyimport android.graphics.Matrix; 212bf68f063b0077ddef6ebfe54f2ae5e063c2c229Romain Guyimport android.graphics.Rect; 22aa6c24c21c727a196451332448d4e3b11a80be69Romain Guyimport android.graphics.SurfaceTexture; 23aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy 24aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy/** 25aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * An OpenGL ES 2.0 implementation of {@link HardwareLayer}. This 26aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * implementation can be used as a texture. Rendering into this 27aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * layer is not controlled by a {@link HardwareCanvas}. 28aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy */ 29aa6c24c21c727a196451332448d4e3b11a80be69Romain Guyclass GLES20TextureLayer extends GLES20Layer { 30aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy private int mTexture; 31aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy private SurfaceTexture mSurface; 32aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy 33a9489274d67b540804aafb587a226f7c2ae4464dRomain Guy GLES20TextureLayer(boolean isOpaque) { 34aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy int[] layerInfo = new int[2]; 35a9489274d67b540804aafb587a226f7c2ae4464dRomain Guy mLayer = GLES20Canvas.nCreateTextureLayer(isOpaque, layerInfo); 36aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy 37aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy if (mLayer != 0) { 38aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy mTexture = layerInfo[0]; 39aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy mFinalizer = new Finalizer(mLayer); 40aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy } else { 41aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy mFinalizer = null; 42ef09a210dd6ea481158b7028ec2424a7f5769ed2Romain Guy } 43aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy } 44aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy 45aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy @Override 46aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy boolean isValid() { 47aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy return mLayer != 0 && mTexture != 0; 48aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy } 49aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy 50aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy @Override 51603f6de35f21d74ae242d52d501f4f5c25ff4f4cChet Haase boolean resize(int width, int height) { 52603f6de35f21d74ae242d52d501f4f5c25ff4f4cChet Haase return isValid(); 53aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy } 54aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy 55aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy @Override 56aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy HardwareCanvas getCanvas() { 57aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy return null; 58aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy } 59aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy 60aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy @Override 61c89b14bba0f6cc2c91629080617f7ed215f697f3Romain Guy HardwareCanvas start(Canvas currentCanvas) { 62aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy return null; 63aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy } 64aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy 65aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy @Override 6678dd96d5af20f489f0e8b288617d57774ec284f7Romain Guy HardwareCanvas start(Canvas currentCanvas, Rect dirty) { 6778dd96d5af20f489f0e8b288617d57774ec284f7Romain Guy return null; 6878dd96d5af20f489f0e8b288617d57774ec284f7Romain Guy } 6978dd96d5af20f489f0e8b288617d57774ec284f7Romain Guy 7078dd96d5af20f489f0e8b288617d57774ec284f7Romain Guy @Override 71c89b14bba0f6cc2c91629080617f7ed215f697f3Romain Guy void end(Canvas currentCanvas) { 72aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy } 73aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy 74aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy SurfaceTexture getSurfaceTexture() { 75aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy if (mSurface == null) { 76e32632682ca9207bd247ca27012cf670b5c23f54Mathias Agopian mSurface = new SurfaceTexture(mTexture); 77aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy } 78aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy return mSurface; 79aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy } 80aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy 812af3524beb75150d347accc925022daa53b4a789Jamie Gennis void setSurfaceTexture(SurfaceTexture surfaceTexture) { 822af3524beb75150d347accc925022daa53b4a789Jamie Gennis if (mSurface != null) { 832af3524beb75150d347accc925022daa53b4a789Jamie Gennis mSurface.release(); 842af3524beb75150d347accc925022daa53b4a789Jamie Gennis } 852af3524beb75150d347accc925022daa53b4a789Jamie Gennis mSurface = surfaceTexture; 862af3524beb75150d347accc925022daa53b4a789Jamie Gennis mSurface.attachToGLContext(mTexture); 872af3524beb75150d347accc925022daa53b4a789Jamie Gennis } 882af3524beb75150d347accc925022daa53b4a789Jamie Gennis 8902ccac69fd1c0a03c24c5f3ace0ad4bed337b1fdRomain Guy @Override 90a9489274d67b540804aafb587a226f7c2ae4464dRomain Guy void update(int width, int height, boolean isOpaque) { 9102ccac69fd1c0a03c24c5f3ace0ad4bed337b1fdRomain Guy super.update(width, height, isOpaque); 92a9489274d67b540804aafb587a226f7c2ae4464dRomain Guy GLES20Canvas.nUpdateTextureLayer(mLayer, width, height, isOpaque, mSurface); 93aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy } 94302a9df1d50373c82923bb84ff665dfce584fb22Romain Guy 95302a9df1d50373c82923bb84ff665dfce584fb22Romain Guy @Override 96846a533945576e5cb1a66529ca3a52d71749f04fRomain Guy void setOpaque(boolean isOpaque) { 97846a533945576e5cb1a66529ca3a52d71749f04fRomain Guy throw new UnsupportedOperationException("Use update(int, int, boolean) instead"); 98846a533945576e5cb1a66529ca3a52d71749f04fRomain Guy } 99846a533945576e5cb1a66529ca3a52d71749f04fRomain Guy 100846a533945576e5cb1a66529ca3a52d71749f04fRomain Guy @Override 101302a9df1d50373c82923bb84ff665dfce584fb22Romain Guy void setTransform(Matrix matrix) { 102302a9df1d50373c82923bb84ff665dfce584fb22Romain Guy GLES20Canvas.nSetTextureLayerTransform(mLayer, matrix.native_instance); 103302a9df1d50373c82923bb84ff665dfce584fb22Romain Guy } 1042bf68f063b0077ddef6ebfe54f2ae5e063c2c229Romain Guy 1052bf68f063b0077ddef6ebfe54f2ae5e063c2c229Romain Guy @Override 10611cb642756093a4af901b1525375b1eb2b5c3e2bRomain Guy void redrawLater(DisplayList displayList, Rect dirtyRect) { 1072bf68f063b0077ddef6ebfe54f2ae5e063c2c229Romain Guy } 108aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy} 109